2011-01-20 145 views
0

我有一個簡單的控制檯應用程序,爲我提供了Visual Studio 2010中的一些預生成功能。它繼續產生其他子進程(儘管等待終止這些子進程在Visual Studio中捕獲控制檯應用程序的輸出

當我在Visual Studio外部運行應用程序時,它的所有消息等都出現在控制檯窗口(即stdout)中,但是當我在VS下運行此應用程序時,在構建中看不到任何輸出窗口。

有誰知道這是爲什麼?

它很討厭。

編輯:進一步檢查我設法讓我的應用程序的標準輸出出現,但子進程的標準輸出沒有出現。有任何想法嗎?

我再直接使用下面的代碼的子進程的標準輸出:

STARTUPINFO si; 
GetStartupInfo(&si); 

si.dwFlags  = STARTF_USESTDHANDLES; 
si.hStdError = GetStdHandle(STD_ERROR_HANDLE); 
si.hStdInput = GetStdHandle(STD_INPUT_HANDLE); 
si.hStdOutput = GetStdHandle(STD_OUTPUT_HANDLE); 

PROCESS_INFORMATION pi; 

// Create the process. 
if (!CreateProcess(applicationName.GetCStr(), cmd.CStr(), NULL, NULL, TRUE, 0, NULL, workingDir.GetCStr(), &si, &pi)) 
{ 
    // Failed to create process!! 
    return false; 
} 
+0

除非您另有說明,否則不要子進程自動繼承其父母的標準I/O句柄? – ChrisV 2011-01-20 16:03:34

回答

1

我相信你需要作出明確的句柄子進程掛鉤起來。 MSDN上有一篇文章(或多篇文章),例如參見http://msdn.microsoft.com/en-us/library/ms682499%28v=vs.85%29.aspx

子進程繼承打開的對象句柄,但有自己的標準輸入/標準輸出/等。處理,除非你通過適當的箍來明確地爲它創建它們。無論如何,這是我的理解。閱讀文章以獲取更多信息。

+0

我只是想接受這個答案,因爲我已經意識到它正在工作,我正在遭受另一個問題。感謝您的幫助! :) – Goz 2011-01-20 17:15:17

相關問題