gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-30 01:18:42 30 4
gpt4 key购买 nike

此代码在我的测试系统(原始 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 也可以正常工作!

问题出在哪里?

问候 raiserle

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

最佳答案

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

Get Values from Process StandardOutput看起来合理。 https://stackoverflow.com/a/24084220/122718记录如何安全地读取这两个流。

另请注意 Visual Basic Capture output of cmd以及everything that Hans Passant says on this topic .

在没有输出重定向的情况下使用 Process 类非常棘手,而且文档也很少。

关于c# - 进程 WaitForExit() 永远不会结束(cmd 打开文件),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26141168/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com