C#Process Start需要带双引号的参数 – 它们会消失

我正在尝试使用Process.Start(ProcessStartInfo)从c#运行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 Project-> Debug区域并运行它然后用双引号打印它们但由于所有转义等等,当我在代码中执行此操作时,.exe打印参数而不带任何双引号。

我发现这篇文章可能是.NET 3.5的cmd解析器中的一个错误,但似乎找不到可行的解决方案。

有没有人有任何想法?

感谢您的时间,

雨披

PS有没有办法看到使用Process.Start()发送参数时cmd.exe得到了什么? 我让我的进程打开了一个cmd窗口但是很高兴看到cmd.exe行如下所示:“app.exe optional1 optional1value”等。

再次感谢。

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都会宣布它的args和args是什么,它显示的是这个输入:

 "optional1" optional1value "optional2" optional2value