使用ProcessStartInfo将路径传递给cmd不能按预期工作

时间:2009-10-08 15:54:36

标签: c# cmd

我正在使用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);
        }

2 个答案:

答案 0 :(得分:3)

你不应该使用“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
        };

答案 1 :(得分:0)

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