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

Nom*_*per 2 .net c#

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

pen*_*tur 7

请参阅 MSDN文章.

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


Nom*_*per 5

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

  • 那没有意义。因为在执行“System.Diagnostics.Process.Start()”之后可能根本没有任何输出。 (2认同)