//我用如下程序,在控制台执行一个程序,取得应用程序的执行输出//其中path 是test.exe的绝对路径,prameter是test需要的参数 static public string Svnlook_Action(string path, string prameter)
{
ProcessStartInfo psi = new ProcessStartInfo("cmd.exe" );
psi.Arguments = "/c " + path + "test.exe " + prameter; //設定程式執行參數
System.Console.WriteLine(psi.Arguments);
psi.RedirectStandardOutput = true;
psi.UseShellExecute = false;
Process p = Process.Start(psi);
string output = p.StandardOutput.ReadToEnd();
p.WaitForExit();
return output;
}问题:path的路径没有空格时,程序执行良好,当出现:C:/Program Files/之类的路径时,就会提示 C:/Program不是外部命令也不是内部命令尝试命令对路径加双引号: psi.Arguments = "/c \"" + path + "test.exe\" " + prameter; 这样仍然不能解决问题,还是提示: C:/Program不是外部命令也不是内部命令尝试: psi.Arguments = "/c \"" + @path + "test.exe\" " + prameter; 也是同样的错误请教这是怎么解决?
psi.Arguments = "/c \"" + path + "test.exe " + prameter + "\""; //設定程式執行參數
cmd /c "c:\program files\test.exe yourParameter"
这样yourParameter是test.exe的参数。而你的代码组合出来的是
cmd /c "c:\program files\test.exe" yourParameter
这样yourParameter就成了cmd的参数了。
如果你要让浏览器打开指定的 HTML 页面文件,这样写:psi.Arguments = Appliccation.StartPath + "\\mydir\\xxx.html";
如果你要让程序在后台执行 winrar,则这样写:psi.Arguments = "a -ibck 你的目标文件名称 \" 你的原始文件或目录\"";
psi.Arguments打印结果:
/c "C:/Program Files/123/test.exe changed -t 80-84 “C:\subversion\repos”"这样也是不行的,还是提示C:/Program不是外部命令,也不是内部命令考虑到双引号的嵌套,后来改成:
/c "C:/Program Files/123/test.exe changed -t 80-84 ‘C:\subversion\repos’"
也是不行的。如果我的路径没有空格,不用加双引号都可以psi.Arguments打印结果/c C:/没有空格的路径/123/test.exe changed -t 80-84 “C:\subversion\repos”
/c "C:/Program Files/123/test.exe changed -t 80-84 C:\subversion\repos"
这不行的,我的C:\subversion\repos也是个动态的路径参数,它也可能带有空格所以我很头疼。
参考这位老兄的建议如下:psi.Arguments = "/c (\"" + path + "test.exe\" " + prameter + ")";这样就正确了,就是说每个路径要加双引号,而对于/c后面的参数部分,整体要加上()不需要转义谢谢楼上各位!