我正在尝试访问应用程序启动的进程的输入和输出流。我的代码是:
this.App = new Process();
this.App.StartInfo.FileName = this.AppPath;
this.App.StartInfo.Arguments = this.AppArgs;
this.App.StartInfo.RedirectStandardOutput = true;
this.App.StartInfo.UseShellExecute = false;
this.App.Start();
ThreadStart ts = new ThreadStart(() =>
{
while (true)
{
if (this.App.StandardOutput != null && !this.App.StandardOutput.EndOfStream)
{
Console.Write((char)this.App.StandardOutput.Read());
}
}
}
this.listener = new Thread(ts);
this.listener.IsBackground = true;
this.listener.Start();
this.App.WaitForExit();
代码确实完美无缺。它将生成的进程的任何输出打印到控制台中。问题是,生成的进程是一个Source Dedicated Server,当它的STDIN / STDERR / STDOUT句柄被重定向时它不喜欢 - 抛出一个错误MessageBox并在它关闭后死掉。我花了好几个小时试图搞乱kernel32.dll,但失败了。 我正在寻找一种方法来访问生成过程的句柄/输出而不重定向它们,因为我显然不允许这样做。
任何? 请。