我正在尝试访问我的应用程序启动的进程的输入和输出流。我的代码是:
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();
该代码确实可以完美运行。它将生成的进程的任何输出打印到控制台中。问题是,生成的进程是一个源专用服务器,它不喜欢当它的 STDIN/STDERR/STDOUT 句柄被重定向时 - 抛出一个错误 MessageBox 并在它关闭后死亡。我花了几个小时试图弄乱 kernel32.dll,但失败了。我正在寻找一种方法来访问生成的进程的句柄/输出而不重定向它们,因为我显然不允许这样做。
任何人?请。