如何在不重定向标准输出的情况下读取进程的控制台输出?

时间:2018-06-27 15:50:09

标签: c# windows output-redirect console-output

我正在为第三方控制台应用程序编写GUI,我希望它捕获控制台窗口的输出并将其添加到GUI中的文本框中。这似乎很简单,我要做的就是重定向目标进程的输出流。

但是,当我这样做时,控制台应用程序会抛出错误:

  

CTextConsoleWin32 :: GetLine:!GetNumberOfConsoleInputEvents

我当前导致此错误的代码是:

// This gets called once after the application has initialized.
private void StartServer()
{
    ProcessStartInfo processStartInfo = new ProcessStartInfo();
    processStartInfo.FileName = srcdsExeFile;
    processStartInfo.UseShellExecute = false;
    processStartInfo.CreateNoWindow = true;
    processStartInfo.RedirectStandardOutput = true;
    processStartInfo.RedirectStandardError = true;
    processStartInfo.RedirectStandardInput = true;

    serverProcess = Process.Start(processStartInfo);
    serverProcess.EnableRaisingEvents = true;
    serverProcess.Exited += new EventHandler(Server_Exited);
    serverProcess.OutputDataReceived += ServerProcess_OutputDataReceived;
    serverProcess.ErrorDataReceived += ServerProcess_ErrorDataReceived;
    serverProcess.BeginOutputReadLine();
    serverProcess.BeginErrorReadLine();
}

// This is (like seen above) an event handler for serverProcess.ErrorDataReceived.
private void ServerProcess_ErrorDataReceived(object sender, DataReceivedEventArgs e)
{
    Console.Output.WriteLine("\n\nServer Error: " + e.Data + "\n\n");
}

// This is (like seen above) an event handler for serverProcess.OutputDataReceived.
private void ServerProcess_OutputDataReceived(object sender, DataReceivedEventArgs e)
{
    Console.Output.WriteLine(e.Data);
}

上面的代码在外部应用程序进行初始化时可以工作一分钟左右,但是在初始化过程中的特定时间点后崩溃。

经过研究后,发现第三方控制台应用程序依赖于输出流作为控制台,这就是为什么当我尝试重定向它时会崩溃的原因。尝试在不重定向输出流的情况下访问它,还会导致错误,提示我必须先将其重定向。

哪个使我想到了我的实际问题:
是否可以在不重定向输出流的情况下读取控制台应用程序的输出?

0 个答案:

没有答案