2011-01-20 3 views
0

У меня есть простое консольное приложение, предоставляющее мне некоторые функции предварительной сборки в Visual Studio 2010. Он продолжает порождать другие дочерние процессы (хотя ждет завершения этих дочерних процессов .Захват вывода консольного приложения в визуальной студии

Когда я запускаю приложение за пределами визуальной студии, все его сообщения и т. Д. Появляются в окне консоли (например, 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

Не дочерние процессы автоматически наследуют стандартные дескрипторы ввода/вывода своих родителей, если вы не сказали иначе? – ChrisV

ответ

1

Я считаю, что вам нужно сделать явные ручки для дочернего процесса зацепить их. У MSDN есть статья на нем (или несколько), например, http://msdn.microsoft.com/en-us/library/ms682499%28v=vs.85%29.aspx.

Реальные процессы наследуют дескрипторы открытых объектов, но имеют собственный stdin/stdout/etc. если вы не пройдете через надлежащие обручи, чтобы создать их явно для него. Во всяком случае, это мое понимание; прочитайте статью для получения дополнительной информации.

+0

Я просто собираюсь принять этот ответ, потому что понял, что он работает, и у меня другая проблема. Спасибо за помощь, хотя! :) – Goz

Смежные вопросы