我正在尝试启动一个子进程,并将 stdin 重定向到我自己创建的句柄,但让 stdout 和 stderr 指向子进程的控制台窗口。
例子:
var processStartInfo = new ProcessStartInfo(m_Exe)
{
UseShellExecute = false,
RedirectStandardInput = true,
};
m_Process = new Process {StartInfo = processStartInfo};
m_Process.Start();
m_StdIn = m_Process.StandardInput;
// write a line to the subprocess
m_StdIn.WriteLine("");
问题是设置 RedirectStandardInput 也会导致 stdout 和 stderr 被拦截。如果未设置 RedirectStandardInput,则子进程的输出将正确发送到子进程的控制台窗口。
查看底层的 win32 api, http: //msdn.microsoft.com/en-gb/library/windows/desktop/ms686331%28v=vs.85%29.aspx说:
如果 dwFlags 指定 STARTF_USESTDHANDLES,则此成员 [hStdOutput] 是进程的标准输出句柄。否则,此成员将被忽略,标准输出的默认值是控制台窗口的缓冲区。
我们必须设置 STARTF_USESTDHANDLES 才能重定向标准输入;有没有其他方法可以将标准输出定向到控制台窗口?