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。
子进程正在等待输入或等待读取其输出。管道缓冲区不是无限大的。您需要不断地消耗标准输出和标准错误。
从 Process StandardOutput 获取值看起来很合理。/sf/answers/1685895431/记录了如何安全读取两个流。
另请注意cmd 的 Visual Basic Capture 输出以及Hans Passant 就该主题所说的所有内容。
在没有输出重定向的情况下使用该类Process非常棘手并且记录很少。