c#分离参数并将其传递给Process.Start()方法

本文关键字:Process Start 方法 参数 分离 | 更新日期: 2023-09-27 18:06:08

我需要向我的concole应用程序传递几个参数:

1项目名称

2版本名

3部署环境名称

4布尔值

5整数数组

据我所知,我需要运行以下代码:

  string myParams = "Test proj name " + "3.22.652.965863 " + "QA " + "true " + "463841";
        //string cParams = "true ";
        var proc = System.Diagnostics.Process.Start(@"c:'' MyFolder'bin'Debug'MyApp.exe", myParams);

MyExe.exe入口点有这个代码:

static void Main(string[] args)
    {
        //Console.WriteLine(Convert.ToBoolean(args[0]));
        string projectName = null;
        string buildNumber = null;
        string deploymentEnvironmentName = null;
        bool shouldResolve = false;
        List<int> ids = new List<int>();

        if (args.Length >= 5)
        {
            for (int i = 0; i < args.Length; i++)
            {
                if (i == 0)
                {
                    Console.WriteLine($"Arg: {i} is {args[i]}");
                    projectName = args[i];
                }
                if (i == 1)
                {
                    Console.WriteLine($"Arg: {i} is {args[i]}");
                    buildNumber = args[i];
                }
                if (i == 2)
                {
                    Console.WriteLine($"Arg: {i} is {args[i]}");
                    deploymentEnvironmentName = args[i];
                }
                if (i == 3)
                {
                    Console.WriteLine($"Arg: {i} is {args[i]}");
                    Console.WriteLine($"Boolean convertion: {args[i]}");
                    shouldResolve = Convert.ToBoolean(args[i]);
                }
                if (i > 3)
                {
                    ids.Add(Convert.ToInt32(args[i]));
                }
            }
            MyService.MyMethod(ids, projectName, buildNumber, deploymentEnvironmentName, shouldResolve);
        }
        else
        {
            throw new Exception("You should define arguments only in following order: Project Name, Build Number, Deployment Environment Name and Array of your Change Sets");
        }
        Console.ReadLine();
    }

我不知道我将有多少个整数,但我需要提前知道其他参数的顺序。然而,我的问题是System.Diagnostics.Process.Start方法通过空格分隔参数。这意味着我的第一个参数"Test proj name"将不会被转换为一个参数,但它将被解析为"Test","proj"answers"name"。它弄乱了我的代码,我不能提前计算参数的顺序。我该怎么修理它?也许我可以定义我自己的分隔符,忽略空白作为分隔符?如有任何帮助或建议,我将不胜感激。

c#分离参数并将其传递给Process.Start()方法

您应该可以通过将参数用双引号括起来来解决这个问题:

string myParams = "'"Test proj name'" " + "3.22.652.965863 " + "QA " + "true " + "463841";

来自文档:

包含空格的单个参数必须用引号括起来,但这些引号不会传递到目标应用程序。

。您的应用程序将收到没有引号的Test proj name字符串。