C#程序启动需要的参数用双引号的 - 他们消失(C# Process Start needs Arg

2019-07-18 06:05发布

我试图运行从C#使用的Process.Start(的ProcessStartInfo)的CMD线的应用;

问题是,CMD线应用程序是一个独立的MATLAB .exe和具有可选参数意味着你把它们CMD线为这样的:

app.exe "optional1" optional1value "optional2" optional2value

optional1value是整数或字符串等。

我们遇到的问题是,双引号不被作为“optional1”参数的一部分过去了,所以我相信cmd.exe的越来越是这样的:

app.exe optional1 optional1value optional2 optional2value

或类似的东西,这MATLAB的解析器明显得到由混淆。

我试过了:

@"""optional1"" optional1value ""optional2" optional2value"""

通过一些关于CMD行参数的双引号其他SO问题的建议,但它似乎并没有为我工作,也没有:

"\"optional1\" optional1value \"optional2\" optional2value\""

我写了一个小的C#命令行的.exe打印出它得到的参数。 如果我把在VS工程 - >调试区域的命令行参数和运行它,然后打印它们用双引号,但因为所有的逃避等。我这样做的代码时,.exe文件打印参数没有任何双引号。

我发现这篇文章吧,也许是在.NET 3.5的CMD语法分析器中的错误,但似乎无法找到一个可行的解决方案。

有没有人有什么想法?

感谢您的时间,

雨披

PS有没有办法,看看有什么CMD.EXE得到发送时的争论与的Process.Start()? 我有我的方法打开一个cmd窗口,但它会很高兴看到线的cmd.exe得到如:“APP.EXE optional1 optional1value”等。

再次感谢。

Answer 1:

在行情ProcessStartInfo.Arguments必须转义三个引号( """ ),这是因为单引号被用于传递包含空格作为单个参数字符串。

看到这里的文档: https://msdn.microsoft.com/en-us/library/system.diagnostics.processstartinfo.arguments(v=vs.110).aspx

ProcessStartInfo psi = new ProcessStartInfo("cmd_app.exe", "\"\"\"optional1\"\"\" optional1value \"\"\"optional2\"\"\" optional2value");
Process.Start(psi);

所有cmd_app.exe确实是宣布其参数的个数#,什么ARG游戏,与此输入它显示:

"optional1"
optional1value
"optional2"
optional2value


文章来源: C# Process Start needs Arguments with double quotes - they disappear