此代码在我的测试系统上运行良好(原始Windows 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;
}在原始系统上:我在task中看到了"cmd.exe /c openfiles /query /Fo list“任务,但是这个任务永远不会结束(process.WaitForExit()进程永远不会结束)。Cmd上的原始系统:openfiles /query /fo list工作也很好!
问题在哪里?
问候葡萄干
编辑:我可以用任务管理器停止这个过程.stdOutput是正确的。为什么不结束这场比赛。
发布于 2014-10-01 12:45:29
子进程正在等待输入或其输出被读取。管道缓冲器不是无限大的。您需要不断地输出标准输出和标准错误。
从进程StandardOutput中获取值看上去很合理。https://stackoverflow.com/a/24084220/122718文档如何安全地读取这两个流。
还请注意cmd的Visual Basic捕获输出和汉斯在这个话题上所说的一切。
在没有输出重定向的情况下使用Process类是非常棘手的,而且文档也不完整。
https://stackoverflow.com/questions/26141168
复制相似问题