从创建进程创建的进程获取输出
Getting the output from a process created by CreateProcess
在我的控制台应用程序中,我使用 CreateProcess 方法创建了一个进程。 现在,此过程要么写入控制台"OK",要么写入"不正常"。如何截获该信息,以便控制台将其写入文件?
- 使用
CreatePipe
创建匿名管道。 - 将孩子的标准输出设置为管道的写入端
- 父进程从管道的读取端读取
- 父进程可以写入文件和控制台,以及任何地方。
有关完整详细信息,请参阅 MSDN 上创建具有重定向输入和输出的子进程。
管道很难正确,尤其是在Windows中。当您有简单的单行输出时,就像在这种情况下一样,只需将进程的标准输出重定向到临时文件并读取该文件。一个非常简单的重定向方法是让cmd.exe
通过其>
运算符完成工作。
听起来好像您正在开发启动的过程。
如果是这种情况,请考虑使用进程退出代码而不是输出,以获得是/否结果。
进程退出代码是来自main
的结果值。(通常相同的)值0
和EXIT_SUCCESS
表示成功,如"OK",值EXIT_FAILURE
,加上Windows中<windows.h>
的值E_FAIL
,表示失败,如"不正常"。在 Windows 中,EXIT_SUCCESS
(从<stdlib.h>
标头)始终为 0,EXIT_FAILURE
通常为 1。
检查进程退出代码比检查进程输出更简单、更有效。
特别是,C++标准库的system
函数返回进程退出代码,并将您的命令传递给cmd.exe
,因此在这种情况下无需进行 API 级别的舞蹈。
相关文章:
- C++ 无法识别创建进程'telnet'
- gcc 找不到 -lgcc, g++.exe: 错误: 创建进程: 没有这样的文件或目录
- 创建进程 API 失败,在窗口 122 上出现错误代码 10
- 为什么创建进程 API 调用会导致内存访问冲突?
- 创建进程失败,意外错误
- C++ - 创建进程失败代码 2
- 创建进程使用路径时出现错误事件:类型 "char *" 的 E0167 参数与类型 "LPWSTR" 的参数不兼容
- 无法使用创建进程重定向标准输出
- C++ Mingw32 创建进程() 失败,错误代码 2:系统找不到指定的文件
- 来自 c++ 服务的 CreateProcessAsUser 创建进程,但没有控制台
- 我试图创建进程的二叉树结构,其中每个进程不超过 2 个子进程
- 如何在 DPI 感知设置为DPI_AWARENESS_CONTEXT_UNAWARE的情况下创建进程
- 创建进程命令行参数
- 创建进程和重定向输出
- 从创建进程创建的进程获取输出
- 使用创建进程函数创建"dir"命令失败,错误代码为 2
- 创建进程不继承父环境
- 创建进程失败,错误代码'740' Windows7 64 位
- Windows 在创建进程时如何传递 ANSI 命令行
- 创建进程作为用户 - 错误 1305