从CreateProcess创建的进程获取输出

时间:2016-12-13 14:08:15

标签: c++ winapi

在我的控制台应用程序中,我使用CreateProcess方法创建了一个进程。 现在,此过程要么写入控制台“确定”或“不正常”。我如何拦截这些信息,以便我可以将控制台写入文件?

2 个答案:

答案 0 :(得分:3)

  • 使用CreatePipe创建匿名管道。
  • 将您孩子的标准输出设置为管道的写入端
  • 父进程从管道的读取端读取
  • 父进程可以写入文件和控制台,无论何处。

有关详细信息,请参阅MSDN上的Creating a Child Process with Redirected Input and Output

答案 1 :(得分:1)

管道难以正确使用,尤其是在Windows中。当你有简单的单行输出时,就像在这种情况下,只需将进程的标准输出重定向到一个临时文件并读取它。一种非常简单的重定向方法是让cmd.exe通过其>运算符完成工作。

听起来好像是在开发已启动的过程。

如果是这种情况,请考虑使用流程退出代码而不是输出,以获得是/否结果。

流程退出代码是main的结果值。 (通常相同)值0EXIT_SUCCESS表示成功,如“OK”,值EXIT_FAILURE,加上Windows中E_FAIL的值{{1} ,意思是失败,就像“不行”。在Windows中<windows.h>(来自EXIT_SUCCESS标题)始终为0,<stdlib.h>通常为1.

检查流程退出代码比检查流程输出要简单得多,效率更高。

特别是,C ++标准库的EXIT_FAILURE函数返回进程退出代码,并将命令传递给system,因此不需要为此情况进行API级别的舞蹈。