Поймать вывод консольного приложения в visual studio - PullRequest
0 голосов
/ 20 января 2011

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

Когда я запускаю приложение за пределами Visual Studio, все его сообщения и т. Д. Появляются в окне консоли (т. Е. Стандартный вывод). Однако, когда я запускаю это приложение под VS, я не вижу ничего из вывода в окне сборки.

Кто-нибудь знает, почему это так?

Очень раздражает.

Редактировать : При дальнейшей проверке мне удалось отобразить стандартный вывод моего приложения, но выход дочерних процессов не отображается. Есть идеи?

Я перенаправляю stdout дочерних процессов, используя следующий код:

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;
}

1 Ответ

1 голос
/ 20 января 2011

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

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

...