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

时间:2016-09-08 13:24:25

标签: c# process

我需要向我的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”和“name”。它使我的代码混乱,我不能提前指望参数的顺序。 我该如何解决? 也许我可以定义自己的分隔符并忽略空格作为分隔符? 我将不胜感激任何帮助或建议。

1 个答案:

答案 0 :(得分:3)

您应该能够通过将参数括在双引号中来解决此问题:

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

来自documentation

  

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

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