Передача путей к cmd с использованием ProcessStartInfo не работает должным образом

Я использую 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);
        }

person Community    schedule 08.10.2009    source источник


Ответы (2)


Вы не должны использовать «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
        };
person Reed Copsey    schedule 08.10.2009

У вас должны быть объемные пути с пробелами и дополнительными кавычками; но вы также должны использовать Environment.ExpandEnvironmentVariables вместо жесткого кода для «c».

person Marc Gravell    schedule 08.10.2009