【问题标题】:Passing paths to cmd using ProcessStartInfo not working as intended使用 ProcessStartInfo 将路径传递给 cmd 未按预期工作
【发布时间】:2009-10-08 15:54:36
【问题描述】:

我正在使用 Process 和 ProcessStartInfo 启动一个带有通常重定向输出等的 cmd 窗口。但是我正在尝试启动一个带有参数的命令行可执行文件,即使当我将它回显到 cmd 时字符串是正确的,当我在没有回显的情况下运行它,我得到“'C:\Program' 不是被识别为内部或外部命令”,就好像路径不在引号中并且空格正在丢弃它一样。

任何帮助都非常感谢!

       static void Backup(string machinename)
        {
            Process p = new Process();
            p.StartInfo = new ProcessStartInfo("cmd", "/c \"C:\\Program Files\\Citrix\\XenCenter\\xe.exe\" vm-export vm=" + machinename + " -s 192.168.00.00 -u root -pw Password1! filename=\"C:\\VMs\\" + machinename + ".xva\"")
            {
                RedirectStandardOutput = true,
                UseShellExecute = false,
                CreateNoWindow = false
            };
            p.Start();
            string output = p.StandardOutput.ReadToEnd();
            p.WaitForExit();
            Console.WriteLine(output);
        }

【问题讨论】:

    标签: c# cmd


    【解决方案1】:

    您不应该使用“cmd”来调用它 - 在这种情况下它实际上对您不利,并且没有任何作用。直接调用你的可执行文件:

    p.StartInfo = new ProcessStartInfo(
        @"C:\Program Files\Citrix\XenCenter\xe.exe",
        "vm-export vm=" + machinename + " -s 192.168.00.00 -u root -pw Password1! filename=\"C:\\VMs\\" + machinename + ".xva\"")
            {
                RedirectStandardOutput = true,
                UseShellExecute = false,
                CreateNoWindow = false
            };
    

    【讨论】:

      【解决方案2】:

      你需要有带空格的环绕路径和额外的引号;但你也应该使用Environment.ExpandEnvironmentVariables 而不是硬编码到“c”。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-02-25
        • 2022-08-06
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多