在Visual Studio中捕获控制台应用程序的输出
问题描述:
我有一个简单的控制台应用程序,为我提供了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;
}
答
我相信你需要作出明确的句柄子进程挂钩起来。 MSDN上有一篇文章(或多篇文章),例如参见http://msdn.microsoft.com/en-us/library/ms682499%28v=vs.85%29.aspx。
子进程继承打开的对象句柄,但有自己的标准输入/标准输出/等。处理,除非你通过适当的箍来明确地为它创建它们。无论如何,这是我的理解。阅读文章以获取更多信息。
+0
我只是想接受这个答案,因为我已经意识到它正在工作,我正在遭受另一个问题。感谢您的帮助! :) – Goz 2011-01-20 17:15:17
除非您另有说明,否则不要子进程自动继承其父母的标准I/O句柄? – ChrisV 2011-01-20 16:03:34