//我用如下程序,在控制台执行一个程序,取得应用程序的执行输出//其中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; 也是同样的错误请教这是怎么解决?

解决方案 »

  1.   

    调试时,psi.Arguments里面的字符串是多少?
      

  2.   

    本帖最后由 net_lover 于 2010-08-16 09:41:47 编辑
      

  3.   

    参数实际上是exe的参数,如果你吧他们分开,就会被作为第二参数传给cmd.exe。应该这样写
    psi.Arguments = "/c \"" + path + "test.exe " + prameter + "\""; //設定程式執行參數
      

  4.   

    实际应该是
    cmd /c "c:\program files\test.exe yourParameter"
    这样yourParameter是test.exe的参数。而你的代码组合出来的是
    cmd /c "c:\program files\test.exe" yourParameter
    这样yourParameter就成了cmd的参数了。
      

  5.   

    最好将你的可执行文件的路径放在双引号中,这样无论你的路径中是否包含空格,程序都会很好的运行,至于 arguments 参数值没有固定的内容。请参考下面的一些例子。如果你要让程序自动打开某个指定的目录,可以这样写:psi.Arguments = Appliccation.StartPath + "\\mydir";
    如果你要让浏览器打开指定的 HTML 页面文件,这样写:psi.Arguments = Appliccation.StartPath + "\\mydir\\xxx.html";
    如果你要让程序在后台执行 winrar,则这样写:psi.Arguments = "a -ibck 你的目标文件名称 \" 你的原始文件或目录\"";
      

  6.   

    我的prameter是比较复杂的,内容是:changed -t 80-84 “C:\subversion\repos”利用wuyazhe的解释,把cmd的参数加双引号
    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”
      

  7.   

    你加太多双引号了。
    /c "C:/Program Files/123/test.exe changed -t 80-84 C:\subversion\repos"
      

  8.   


    这不行的,我的C:\subversion\repos也是个动态的路径参数,它也可能带有空格所以我很头疼。
      

  9.   


    参考这位老兄的建议如下:psi.Arguments = "/c (\"" + path + "test.exe\" " + prameter + ")";这样就正确了,就是说每个路径要加双引号,而对于/c后面的参数部分,整体要加上()不需要转义谢谢楼上各位!