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

问题描述 投票:2回答:2

我有以下代码可在另一台服务器上很好地工作。问题在于该进程似乎从未使它进入已退出状态。被称为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();
c# .net
2个回答
7
投票

请参阅this MSDN文章。

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


2
投票

似乎Process.StandardOutput.ReadToEnd()之后必须立即调用Process.Start(),否则可能会创建死锁

© www.soinside.com 2019 - 2024. All rights reserved.