2010-09-03 1 views

ответ

0

redirecting it и чтение потока.

+6

-1: Связанный статья возникает в тупиковой ситуации (по крайней мере, на момент написания этого сообщения): Как указано в документации MSDN: «Условие взаимоблокировки возникает, если родительский pr ocess вызывает p.StandardOutput.ReadToEnd, за которым следует p.StandardError.ReadToEnd, а дочерний процесс записывает достаточно текста для заполнения потока ошибок ". – tstone2077

-1

Пример кода ниже:

 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 
      } 
     } 
+1

Вам необходимо установить UseShellExecute в true для глагола, который должен соблюдаться, и его необходимо установить в 'false' для перенаправления стандартного вывода. Вы не можете обойти оба. Я уверен, что Windows также не позволит перенаправлять стандартный ввод/вывод/ошибку на границе безопасности администратора/не-администратора. Вам нужно найти другой способ получить выход из программы, запущенной как admin. - Ссылка: http://stackoverflow.com/a/8690661 – Kiquenet

+5

-1. Как указано в документации MSDN: «Условие взаимоблокировки возникает, если родительский процесс вызывает p.StandardOutput.ReadToEnd, за которым следует p.StandardError.ReadToEnd, а дочерний процесс записывает достаточно текста для заполнения потока ошибок». Ваш код делает именно это. – tstone2077