2
我試圖用stdin重定向到我自己創建的句柄來啓動一個子進程,但是將stdout和stderr指向了子進程的控制檯窗口。如何用stdin重定向啓動進程,但不啓用stdout?
實施例:
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還引起輸出和錯誤要被截取。如果RedirectStandardInput未設置,則子進程的輸出將正確發送到子進程的控制檯窗口。
綜觀底層的Win32 API,http://msdn.microsoft.com/en-gb/library/windows/desktop/ms686331%28v=vs.85%29.aspx表示:
如果dwFlags中指定STARTF_USESTDHANDLES,此構件[hStdOutput]是 該進程的標準輸出句柄。否則,該成員被忽略, 緩衝區的標準輸出的默認值是控制檯窗口的 。
我們必須設置STARTF_USESTDHANDLES才能重定向stdin;有沒有其他方法可以將stdout指向控制檯窗口?
也許我應該更清楚了:我的主進程是不是一個控制檯應用程序;當我啓動子進程時,它會打開自己的控制檯緩衝區,但是如果你設置了RedirectStandardInput,輸出將被吞下(或者說,寫入主進程的標準輸出,在我的情況下這是無效的)。 我希望子進程的輸出轉到彈出的控制檯窗口。 – richvdh 2013-03-21 12:52:26