相关文章推荐
八块腹肌的四季豆  ·  cmd ...·  4 周前    · 
空虚的枕头  ·  java: ...·  4 月前    · 

在C#中执行cmd指令时,因空格导致执行出错的解决方法

最近在研究一个小工具,需要用C#执行一条cmd指令,其代码如下:

"C:\Program Files\TargetApp.exe" -install -name TargetAppName -logFile +"C:\Program Files\TargetAppLog.txt" -l "C:\Program Files\TargetApp.mlf"

可以看到其中包括了三个路径,且路径之中都有空格,这就导致这行代码在cmd中可以正常执行,但在C#中会提示 “C:\Program 不是内部或外部命令,也不是可运行的程序或批处理文件

经过对于命令逐渐删减排查,发现是在 -logFile +"C:\Program Files\TargetAppLog.txt" 的路径添加进去后出现的该提示,推测是这种格式触发了某种语句的格式导致了冲突。


那为什么在cmd里直接执行就正常,在C#里就不对劲了呢?

其实也很简单,因为在C#里的执行方式是:

string arg = "\"C:\\Program Files\\TargetApp.exe\" -install -name TargetAppName -logFile +\"C:\\Program Files\\TargetAppLog.txt\" -l \"C:\\Program Files\\TargetApp.mlf\"";
Process process = new Process();
ProcessStartInfo startInfo = new ProcessStartInfo
    UseShellExecute = true,
    WindowStyle = ProcessWindowStyle.Hidden,
    FileName = "cmd.exe",