我通过这段代码执行cmd命令,它可以在大多数命令上运行,例如ver,cd ......但是对于像netstat这样的命令或者有很多文件的文件夹上的dir
,需要更多的时间来执行,它无法检测到该命令已完成。
我可以使用超时但我想知道为什么它无法检测到netstat命令的结束
string results="";
string command = @"dir c:\windows";
ProcessStartInfo procStartInfo = new ProcessStartInfo("cmd", "/c " + command);
procStartInfo.RedirectStandardInput = true;
procStartInfo.RedirectStandardOutput = true;
procStartInfo.RedirectStandardError = true;
procStartInfo.UseShellExecute = false;
procStartInfo.CreateNoWindow = true;
Process proc = new Process();
proc.StartInfo = procStartInfo;
proc.Start();
results = proc.StandardOutput.ReadToEnd(); //<-Move here
proc.WaitForExit();
//results = proc.StandardOutput.ReadToEnd(); //Moved
Console.WriteLine(results);
修正:
我移动阅读结果(结果= proc.StandardOutput.ReadToEnd();)并解决问题。
答案 0 :(得分:0)
使用您的代码我无法重现问题:
使用Process.WaitForExit(),您所说的是不可能的:
指示Process组件无限期地等待关联进程退出。
修改1:
即使使用dir c:\Windows
(花了一分多钟)我也无法重现这个问题。