我正在尝试使用Process.Start(ProcessStartInfo)从C#运行一个命令行应用程序。
问题在于,这个命令行应用程序是一个Matlab独立的.exe文件,并且有可选参数,这意味着你要在命令行上传递它们,如下所示:
app.exe "optional1" optional1value "optional2" optional2value
其中optional1value是整数或字符串等。
我们遇到的问题是双引号没有作为"optional1"参数的一部分传递,因此我认为cmd.exe收到了类似以下内容的信息:
app.exe optional1 optional1value optional2 optional2value
或类似的东西,这显然会让Matlab的解析器混淆。
我已经尝试过:
@"""optional1"" optional1value ""optional2" optional2value"""
正如其他 Stack Overflow 问题中有些人建议的那样,关于 cmd 行参数中的双引号,但对我来说似乎并没有起作用,也不会:
"\"optional1\" optional1value \"optional2\" optional2value\""
我写了一个小的 C# 命令行 .exe 程序来打印它接收到的参数。如果我将命令行参数放在 VS 项目 -> Debug 区域中并运行它,那么它会带着双引号打印出来,但是因为所有的转义等等,当我在代码中这样做时,.exe 不会打印任何双引号。
我找到了这篇文章,关于这可能是 .NET 3.5 的 cmd 解析器中的一个 bug,但似乎找不到可行的解决方案。
有人有什么想法吗?
谢谢你们的时间,
Poncho
P.S. 是否有办法查看通过 Process.Start() 发送参数时 cmd.exe 得到的内容? 我的进程会打开一个 cmd 窗口,但很好看到 cmd.exe 得到的命令行,例如:"app.exe optional1 optional1value" 等等。
再次感谢。