进程 WaitForExit() 永远不会结束(cmd openfiles)

rai*_*rle 4 c# cmd process windows-server-2008-r2

这段代码在我的测试系统上运行良好(原始 Windows-Server 2008 R2 的副本)

private string _getNetFiles()
{
    // prepare execution process
    ProcessStartInfo processStartInfo = new ProcessStartInfo("cmd.exe", "/c openfiles /query /Fo list");
    processStartInfo.CreateNoWindow = true;
    processStartInfo.UseShellExecute = false;
    processStartInfo.RedirectStandardError = true;
    processStartInfo.StandardOutputEncoding = System.Text.Encoding.GetEncoding(437);
    processStartInfo.RedirectStandardOutput = true;

    // execute
    Process process = Process.Start(processStartInfo);
    process.WaitForExit();


    // read outputs
    string stdOutput = process.StandardOutput.ReadToEnd();
    string stdError = process.StandardError.ReadToEnd();

    return stdOutput;
}
Run Code Online (Sandbox Code Playgroud)

在原始系统上:我在任务管理器中看到“cmd.exe /c openfiles /query /Fo list”任务,但该任务永远不会结束(process.WaitForExit() process never end)。在原始系统上使用 Cmd:openfiles /query /fo list也可以正常工作!

问题可能出在哪里?

问候提高者

编辑:我可以使用任务管理器停止该过程。stdOutput 是正确的。为什么不结束 cmd-taks。

usr*_*usr 5

子进程正在等待输入或等待读取其输出。管道缓冲区不是无限大的。您需要不断地消耗标准输出和标准错误。

从 Process StandardOutput 获取值看起来很合理。/sf/answers/1685895431/记录了如何安全读取两个流。

另请注意cmd 的 Visual Basic Capture 输出以及Hans Passant 就该主题所说的所有内容

在没有输出重定向的情况下使用该类Process非常棘手并且记录很少。