进程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。
子进程正在等待输入或读取其输出。管道缓冲区并不是无限大。您需要不断地消耗标准输出和标准错误。
从Process StandardOutput获取值看起来很合理。https://stackoverflow.com/a/24084220/122718记录如何安全地读取两个流。
还要注意cmd的Visual Basic Capture输出,以及Hans Passant在本主题中所说的一切。
在没有输出重定向的情况下使用Process
类是相当棘手的,而且文档记录也很差。