System.Diagnostics.Process未在代码中退出

时间:2012-02-15 17:30:07

标签: c# .net

我有以下代码,可以在另一台服务器上运行良好。问题是该过程似乎永远不会使其进入退出状态。被调用的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();

2 个答案:

答案 0 :(得分:7)

请参阅this MSDN文章。

如果父进程在p.StandardOutput.ReadToEnd之前调用p.WaitForExit并且子进程写入足够的文本来填充重定向的流,则可能导致死锁条件。父进程将无限期地等待子进程退出。子进程将无限期地等待父进程从完整的StandardOutput流中读取。

答案 1 :(得分:2)

似乎必须在proc.Start()之后立即调用proc.StandardOutput.ReadToEnd(),否则它可能会造成死锁。