C# - 访问进程的STDIN和STDOUT句柄而不重定向它们

时间:2013-06-09 18:50:00

标签: c# .net process

我正在尝试访问应用程序启动的进程的输入和输出流。我的代码是:

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,但失败了。 我正在寻找一种方法来访问生成过程的句柄/输出而不重定向它们,因为我显然不允许这样做。

任何? 请。

0 个答案:

没有答案