我有一个简单的控制台应用程序,在Visual Studio 2010中为我提供了一些预构建功能。它继续产生其他子进程(但等待这些子进程的终止。
当我在visual studio外部运行应用程序时,它的所有消息等都出现在控制台窗口中(即stdout)。但是,当我在VS下运行此应用程序时,我没有在构建窗口中看到任何输出。
有人知道这是为什么吗?
非常烦人。
编辑:在进一步检查时,我设法让我的应用程序的stdout出现,但子进程的stdout没有出现。有什么想法吗?
我使用以下代码重定向子进程的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;
}
答案 0 :(得分:1)
我认为你需要为子进程制作显式句柄来连接它们。 MSDN上有一篇文章(或几篇),例如http://msdn.microsoft.com/en-us/library/ms682499%28v=vs.85%29.aspx。
子进程继承开放对象句柄,但有自己的stdin / stdout / etc。处理,除非你通过适当的箍明确地为它创建它们。无论如何,这是我的理解;阅读文章了解更多信息。