2016-12-21 52 views
0

當我嘗試使用Process類運行tasklist.exe並將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框架4.5.2。

我發現當我強制關閉tasklist.exe時,每次都有4096字節寫入標準輸出!是否有某種字符緩衝區需要增加尺寸?

+2

你不讀輸出.. – Blorgbeard

+0

爲什麼是怎麼回事? – LVBen

+0

我可以在WaitForExit之後輕鬆添加這兩行,但它永遠不會被執行:var response = process.StandardOutput.ReadToEnd(); Console.WriteLine(response); – 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;) –