我有以下代码可在另一台服务器上很好地工作。问题在于该进程似乎从未使它进入已退出状态。被称为exe的文件会在最后一步创建一个文件,并且确实会创建该文件,但我的代码似乎从未知道该过程已完成。手动运行时,被调用的exe文件也可以在不到10秒的时间内运行。我的代码如下:
System.Diagnostics.Process proc = new System.Diagnostics.Process() proc.StartInfo.RedirectStandardOutput = true;
proc.StartInfo.RedirectStandardError = true;
proc.StartInfo.UseShellExecute = false;
proc.StartInfo.CreateNoWindow = true;
proc.StartInfo.FileName = exeConf.CMD;
proc.StartInfo.Arguments = argString;
proc.Start();
proc.WaitForExit(10000);
if(proc.HasExited)
msgLine = proc.StandardError.ReadToEnd();
请参阅this MSDN文章。
如果父进程在p.StandardOutput.ReadToEnd之前调用p.WaitForExit,并且子进程写入足够的文本以填充重定向的流,则可能导致死锁。父进程将无限期地等待子进程退出。子进程将无限期等待父进程从完整的StandardOutput流中读取。
似乎Process.StandardOutput.ReadToEnd()
之后必须立即调用Process.Start()
,否则可能会创建死锁。