【发布时间】:2018-06-27 15:50:08
【问题描述】:
我正在为第三方控制台应用程序编写 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);
}
上述代码在外部应用程序进行初始化时确实工作了一分钟左右,但在初始化过程中的特定点之后崩溃。
经过一番研究,发现第三方控制台应用程序依赖输出流作为控制台,这就是我尝试重定向它时崩溃的原因。尝试访问输出流而不重定向它也会导致错误提示我必须先重定向它。
这让我想到了我的实际问题:
是否可以在不重定向输出流的情况下读取控制台应用程序的输出?
【问题讨论】:
-
当然,您可以反过来做,使用管道将应用程序的输出作为您的输入。
-
这将如何工作?难道它还不需要重定向应用程序的输出吗?
-
@alexkarlin 我有这个确切的问题。你找到解决方案了吗?
-
@alexkarlin 另外,只是好奇,您是否还为 csgo 服务器制作了 GUI? :)
-
@Jesbus 我没有找到任何解决方案。 :( 我最终将命令行窗口重新定位到 GUI 的中心,但这根本不是一个非常优雅的解决方案。是的,几乎。我正在为 Garry 的 Mod 服务器制作 GUI。:)跨度>
标签: c# windows output-redirect console-output