Как получить стандартный вывод/ошибку процесса, начатого Process.Start()
, до string
?Как фиксировать стандартный вывод/ошибку процесса?
ответ
redirecting it и чтение потока.
Пример кода ниже:
ProcessStartInfo psi = new ProcessStartInfo();
psi.CreateNoWindow = false;
psi.UseShellExecute = false;
psi.FileName = "C:\\my.exe";
psi.WindowStyle = ProcessWindowStyle.Hidden;
psi.RedirectStandardOutput = true;
psi.RedirectStandardError = true;
using (Process exeProcess = Process.Start(psi))
{
exeProcess.WaitForExit();
var exitCode = exeProcess.ExitCode;
var output = exeProcess.StandardOutput.ReadToEnd();
var error = exeProcess.StandardError.ReadToEnd();
if (output.Length > 0)
{
// you have some output
}
if(error.Length > 0)
{
// you have some error details
}
}
Вам необходимо установить UseShellExecute в true для глагола, который должен соблюдаться, и его необходимо установить в 'false' для перенаправления стандартного вывода. Вы не можете обойти оба. Я уверен, что Windows также не позволит перенаправлять стандартный ввод/вывод/ошибку на границе безопасности администратора/не-администратора. Вам нужно найти другой способ получить выход из программы, запущенной как admin. - Ссылка: http://stackoverflow.com/a/8690661 – Kiquenet
-1. Как указано в документации MSDN: «Условие взаимоблокировки возникает, если родительский процесс вызывает p.StandardOutput.ReadToEnd, за которым следует p.StandardError.ReadToEnd, а дочерний процесс записывает достаточно текста для заполнения потока ошибок». Ваш код делает именно это. – tstone2077
Для решения проблемы тупиковых использовать этот подход:
ProcessStartInfo hanging on "WaitForExit"? Why?
хорошо работает в моем коде ...
-1: Связанный статья возникает в тупиковой ситуации (по крайней мере, на момент написания этого сообщения): Как указано в документации MSDN: «Условие взаимоблокировки возникает, если родительский pr ocess вызывает p.StandardOutput.ReadToEnd, за которым следует p.StandardError.ReadToEnd, а дочерний процесс записывает достаточно текста для заполнения потока ошибок ". – tstone2077