У меня есть процесс P, который вызывает исполняемый файл PSEXEC и передает ему аргумент. Моя проблема в том, что вывод моей программы на С# отличается от того, когда я вызываю точно такую же команду непосредственно в командную строку.
Вот результат, который я ожидаю (при запуске из CMD):
Server Name Server Load
-------------------- ------------
601CTXD04 0
601CTXD05 0
...
601CTXP03 0
И вот фактический вывод (при запуске из моей программы):
Server Name Server Load
-------------------- ------------
601CTXD04 0
Поэтому, когда я запускаю команду из своей программы на C#, я получаю только 1 сервер. Я называю процесс следующим образом:
p.StartInfo.UseShellExecute = false;
p.StartInfo.RedirectStandardOutput = true;
p.StartInfo.CreateNoWindow = true;
p.StartInfo.FileName = cServer.psexec; //Path to the PSEXEC executable
p.StartInfo.Arguments = "-accepteula \\\\601ctxp01 qfarm /load /continue";
p.Start();
string output = p.StandardOutput.ReadToEnd();
string[] lines = Regex.Split(output, "\\r\\n");
Я действительно не понимаю, почему та же самая команда, запущенная из CMD, не дает такого же результата при запуске из процесса C #. Пожалуйста, дайте мне знать, что я делаю неправильно, поскольку я в настоящее время не обращаю внимания на свою ошибку.
p.WaitForExit()
послеp.Start()
- person feiyun0112   schedule 20.11.2014WaitForExit()
сразу после звонкаStart()
верен. Однако здесь вообще нет смысла вызыватьWaitForExit()
.ReadToEnd()
не вернется, пока поток не будет закрыт, что не произойдет, пока процесс не завершится. - person Peter Duniho   schedule 20.11.2014