2011-01-20 143 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

相关问题