进程被黑色cmd屏幕卡住

本文关键字:屏幕 cmd 黑色 进程 | 更新日期: 2023-09-27 18:25:45

所以我有这段代码来启动一个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();

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

进程被黑色cmd屏幕卡住

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

您使用此代码使进程死锁。在清空其输出缓冲区之前,它无法退出。但在它退出之前,您不会读取它的输出。程序无法继续,你也无法。一种"致命的拥抱",更广为人知的说法是僵局。

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

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