进程WaitForExit()永远不会结束(cmd打开文件)

本文关键字:cmd 结束 文件 WaitForExit 永远 进程 | 更新日期: 2023-09-27 18:25:22

此代码在我的测试系统上运行良好(原始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;
}

在原始系统上:我在任务管理器中看到"cmd.exe/c openfiles/query/Fo list"任务,但此任务从未结束(process.WaitForExit()进程从未结束)。原始系统上的Cmd:openfiles/query/fo-list也可以!

问题出在哪里?

尊敬的

编辑:我可以和任务经理一起停止这个过程。stdOutput是正确的。为什么不结束cmd taks。

进程WaitForExit()永远不会结束(cmd打开文件)

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

从Process StandardOutput获取值看起来很合理。https://stackoverflow.com/a/24084220/122718记录如何安全地读取两个流。

还要注意cmd的Visual Basic Capture输出,以及Hans Passant在本主题中所说的一切。

在没有输出重定向的情况下使用Process类是相当棘手的,而且文档记录也很差。