我有以下代码,可以在另一台服务器上运行良好。问题是该过程似乎永远不会使其进入退出状态。被调用的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();
答案 0 :(得分:7)
请参阅this MSDN文章。
如果父进程在p.StandardOutput.ReadToEnd之前调用p.WaitForExit并且子进程写入足够的文本来填充重定向的流,则可能导致死锁条件。父进程将无限期地等待子进程退出。子进程将无限期地等待父进程从完整的StandardOutput流中读取。
答案 1 :(得分:2)
似乎必须在proc.Start()之后立即调用proc.StandardOutput.ReadToEnd(),否则它可能会造成死锁。