2016-12-21 18 views
0

Когда я пытаюсь запустить tasklist.exe с классом Process и устанавливаю RedirectStandardOutput в true, процесс никогда не заканчивается.Почему TaskList.exe никогда не заканчивается при перенаправлении стандартного вывода?

using System.Diagnostics; 

class Program 
{ 
    static void Main(string[] args) 
    { 
     RunProcess("tasklist.exe"); 
    } 

    private static void RunProcess(string command) 
    { 
     var process = new Process() 
     { 
      StartInfo = 
      { 
       FileName = command, 
       RedirectStandardOutput = true, 
       UseShellExecute = false 
      } 
     }; 

     process.Start(); 
     process.WaitForExit(); 
    } 
} 

Если я установил RedirectStandardOutput в false, процесс заканчивается !!!

Почему процесс tasklist.exe никогда не заканчивается? Я использую Windows 7 и .net framework 4.5.2.

Я узнал, что когда я принудительно закрываю tasklist.exe, каждый раз записывается ровно 4096 байт на стандартный вывод! Есть ли какой-то буфер символов, который мне нужно увеличить по размеру?

+2

Вы не читать выход .. – Blorgbeard

+0

Почему этот вопрос? – LVBen

+0

Я легко могу добавить эти две строки после WaitForExit, но он никогда не будет выполнен: var response = process.StandardOutput.ReadToEnd(); Console.WriteLine (ответ); – LVBen

ответ

2

Если вы используете RedirectStandardOutput = true добавить эту строку в код:

process.Start(); 

// To avoid deadlocks, always read the output stream first and then wait. 
string out = process.StandardOutput.ReadToEnd(); 

process.WaitForExit(); 
+1

Я думаю, вы хотите использовать StandardOutput вместо StandardError, но да, это работает! – LVBen

+0

Спасибо, LVBen;) –