我正在使用該調用創建一個進程:c#如何將stdout重定向到新的進程窗口?
Process.Start(startInfo);
與
startInfo.WindowStyle = ProcessWindowStyle.Normal;
startInfo.FileName = "cmd.exe";
startInfo.UseShellExecute = true;
startInfo.RedirectStandardInput = false;
startInfo.RedirectStandardOutput = false;
時的過程與這些參數運行時,它輸出到新進程的窗口罰款。
但是,當我使UseShellExecute爲false而不重定向標準輸出時,該進程不再打印到屏幕上。這是預期的行爲?
如果是這樣,我怎麼能寫入新窗口,該過程開始?
我可以使用StandardOutput.Read()手動獲取數據,但我不知道如何將它寫入新窗口。當我創建該窗口時,它默認情況下似乎有一個控制檯。
我可以使用的PInvoke來調用新工藝C++函數:
[DllImport("kernel32", SetLastError = true)]
private static extern bool AttachConsole(int dwProcessId);
我想我或許可以使用功能只寫到新窗口的控制檯「writeconsole」 https://msdn.microsoft.com/en-us/library/windows/desktop/ms687401%28v=vs.85%29.aspx
但是,我想知道是否有可能這樣做只是使用.net庫。我覺得我想要的不是那麼複雜,以至於這應該是必要的。
我想要的是能夠啓動一個新進程並將該進程的stdout重定向到在該進程中創建的新窗口,同時保留寫入stdin的能力。
編輯: 使用console.writeline寫入只會寫入程序的主控制檯。我的應用程序是一個GUI應用程序,所以說實話,我不知道它在哪裏寫入,但我知道你可以在visual studio中的「輸出」標籤下看到這個輸出,但不能在程序的窗口中看到本身。我認爲控制檯有一個由.net分配的獨立緩衝區。
所以,你有GUI應用程序啓動控制檯之一。您已經成功地閱讀了輸出結果,並且不知道如何在窗口中顯示它,對嗎?您是否嘗試在窗口中添加文本框並在文本中添加文本? – n0rd
這聽起來像是可能的,儘管我用了不同的方法 –
不同的方式如何?在一個GUI應用程序中,你必須有一個控制你想要放置文本的位置。 'TextBox'在這裏是一個明顯的選擇。你用什麼? – n0rd