从创建进程创建的进程获取输出

Getting the output from a process created by CreateProcess

本文关键字:创建 进程 输出 获取      更新时间:2023-10-16

在我的控制台应用程序中,我使用 CreateProcess 方法创建了一个进程。 现在,此过程要么写入控制台"OK",要么写入"不正常"。如何截获该信息,以便控制台将其写入文件?

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

有关完整详细信息,请参阅 MSDN 上创建具有重定向输入和输出的子进程。

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


听起来好像您正在开发启动的过程。

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

进程退出代码是来自main的结果值。(通常相同的)值0EXIT_SUCCESS表示成功,如"OK",值EXIT_FAILURE,加上Windows中<windows.h>的值E_FAIL,表示失败,如"不正常"。在 Windows 中,EXIT_SUCCESS(从<stdlib.h>标头)始终为 0,EXIT_FAILURE通常为 1。

检查进程退出代码比检查进程输出更简单、更有效。

特别是,C++标准库的system函数返回进程退出代码,并将您的命令传递给cmd.exe,因此在这种情况下无需进行 API 级别的舞蹈。