为什么在重定向标准输出时TaskList.exe永远不会结束?

时间:2016-12-21 22:45:10

标签: c# windows process hang tasklist

当我尝试使用Process类运行tasklist.exe并将RedirectStandardOutput设置为true时,该过程永远不会结束。

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字节写入标准输出!我需要增加某种字符缓冲区吗?

1 个答案:

答案 0 :(得分:2)

如果您正在使用RedirectStandardOutput = true,请将此行添加到您的代码中:

process.Start();

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

process.WaitForExit();