You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

通过Arguments在控制台程序间传递信息失败求助

解决控制台程序调用时参数无法传递的问题

问题根源

你在主程序里指定的启动文件是ConsoleApp2.application,这是ClickOnce部署的清单文件,并非可直接执行的exe程序。直接启动这类文件时,系统会通过ClickOnce部署机制启动应用,常规的Arguments参数无法被正确传递到目标程序的Main方法参数中。

解决方案

方案1:直接调用目标程序的EXE文件(推荐)

修改主程序中ProcessStartInfo.FileName的值,指向ConsoleApp2编译生成的实际exe文件路径,而非.application文件:

static void Main()
{
    ProcessStartInfo startinfo = new ProcessStartInfo();
    // 替换为ConsoleApp2实际的exe路径,比如项目Debug/Release目录下的文件
    startinfo.FileName = @"C:\YourProjectDir\ConsoleApp2\bin\Debug\ConsoleApp2.exe";
    startinfo.Arguments = "DateRange ClinetID PhoneNo";
    Process.Start(startinfo);
}

方案2:若必须使用ClickOnce部署的应用

如果ConsoleApp2是通过ClickOnce发布的,需用特殊方式传递参数:

  1. 主程序中通过rundll32.exe启动ClickOnce应用并传递参数:
    static void Main()
    {
        ProcessStartInfo startinfo = new ProcessStartInfo();
        startinfo.FileName = "rundll32.exe";
        // 替换为你的ClickOnce部署地址,参数附加在末尾
        startinfo.Arguments = "dfshim.dll,ShOpenVerbApplication https://your-deploy-url/ConsoleApp2.application DateRange ClinetID PhoneNo";
        Process.Start(startinfo);
    }
    
  2. 目标程序中通过ClickOnce的激活上下文获取参数,而非依赖Main方法的args数组:
    using System.Deployment.Application;
    using System.Web;
    
    namespace ConsoleApp2
    {
        class Program
        {
            static void Main(string[] args)
            {
                if (ApplicationDeployment.IsNetworkDeployed)
                {
                    var queryParams = HttpUtility.ParseQueryString(ApplicationDeployment.CurrentDeployment.ActivationUri.Query);
                    Console.WriteLine("Received ClickOnce arguments:");
                    foreach (string key in queryParams.AllKeys)
                    {
                        Console.WriteLine($"{key} = {queryParams[key]}");
                    }
                }
                else
                {
                    // 兼容常规exe启动的参数处理
                    Console.WriteLine("Received the following arguments:\n" + args.Length);
                    for (var i = 0; i < args.Length; i++)
                    {
                        Console.WriteLine($"[{i}] = {args[i]}");
                    }
                }
                Console.WriteLine("\nPress any key to exit");
                Console.ReadLine();
            }
        }
    }
    
    注意:此方式需要为ConsoleApp2项目添加System.Deployment和System.Web程序集引用。

验证

修改后重新编译主程序与目标程序,启动主程序后,目标程序即可正确接收传递的参数。

内容的提问来源于stack exchange,提问作者Robert Goth

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 14:05:17