过程卡住黑色cmd屏幕

时间:2013-08-01 13:39:59

标签: c# process

所以我有这个代码来启动一个bat脚本,它将执行某些java命令,从“java -version”开始只是为了得到一些输出。我第一次称之为它有效,但第二次我被黑色cmd屏幕困住了。

使用相同的代码但位于不同的位置。

Process proc = new Process();
ProcessStartInfo StartInfo = new ProcessStartInfo();
StartInfo.RedirectStandardOutput = true;
StartInfo.RedirectStandardError = true;
StartInfo.FileName = path + "javaScript.bat";
StartInfo.Arguments = "\"" + path + "\"";
StartInfo.UseShellExecute = false;
StartInfo.CreateNoWindow = false;

proc.StartInfo = StartInfo;

proc.Start();

proc.WaitForExit();

string output = proc.StandardOutput.ReadToEnd();

任何人都可以帮我弄清楚会发生什么?由于我没有得到任何回声,我怀疑bat文件被卡在任何地方(回显打开,第一个命令是java -version所以它应该写一些东西,而不是只是卡在黑色cmd窗口)

1 个答案:

答案 0 :(得分:3)

        proc.WaitForExit();
        string output = proc.StandardOutput.ReadToEnd();

您使用此代码使进程陷入僵局。在清空其输出缓冲区之前,它无法退出。但是在退出之前你不会读取它的输出。该计划无法继续,也不能。一种“致命的拥抱”,更好地称为死锁。

只需交换这两行代码即可解决问题。

请注意,您也遇到StandardError问题,当它向该流发送一堆错误文本时,它仍然会死锁。如果您不想阅读它,请不要重定向它。如果你想让它完全稳固,你需要使用BeginErrorReadLine和BeginOutputReadLine。