WINAPI:禁用stdin stdout stderr句柄的继承

时间:2014-09-08 06:55:31

标签: c++ winapi subprocess

我使用带有标志BOOL bInheritHandles = TRUE的CreateProcess创建了子进程,因为我想将一些句柄传递给匿名管道到子进程。

我在hStdInput结构中有 NOT 设置hStdOutputhStdErroSTARTF_USESTDHANDLES r以及STARTUPINFO标记,因为我不想对孩子stdout等做点什么。

但是子进程似乎继承了控制台缓冲区的句柄,并且其输出直接进入父应用程序控制台。我想要彻底改变这一点,所以我用过 SetHandleInformation(GetStdHandle(STD_OUTPUT_HANDLE), HANDLE_FLAG_INHERIT, 0); 报告错误87 - ERROR_INVALID_PARAMETER

我做错了什么?

1 个答案:

答案 0 :(得分:1)

错误消息告诉您无法为标准输出句柄设置HANDLE_FLAG_INHERIT

相反,您应该创建传递DETACHED_PROCESSCREATE_NEW_CONSOLE创建标志的进程。或者,如果您不希望子进程使用其他控制台,则需要在STARTUPINFO结构中提供标准句柄。