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"。它弄乱了我的代码,我不能提前计算参数的顺序。我该怎么修理它?也许我可以定义我自己的分隔符,忽略空白作为分隔符?如有任何帮助或建议,我将不胜感激。
您应该可以通过将参数用双引号括起来来解决这个问题:
string myParams = "'"Test proj name'" " + "3.22.652.965863 " + "QA " + "true " + "463841";
来自文档:
包含空格的单个参数必须用引号括起来,但这些引号不会传递到目标应用程序。
。您的应用程序将收到没有引号的Test proj name
字符串。