无法正确检测c#中cmd命令的退出?

时间:2017-09-11 04:23:54

标签: c# .net cmd

我通过这段代码执行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();)并解决问题。

1 个答案:

答案 0 :(得分:0)

使用您的代码我无法重现问题:

enter image description here

使用Process.WaitForExit(),您所说的是不可能的:

  

指示Process组件无限期地等待关联进程退出。

修改1:

即使使用dir c:\Windows(花了一分多钟)我也无法重现这个问题。