我使用带有标志BOOL bInheritHandles = TRUE
的CreateProcess创建了子进程,因为我想将一些句柄传递给匿名管道到子进程。
我在hStdInput
结构中有 NOT 设置hStdOutput
,hStdErro
和STARTF_USESTDHANDLES
r以及STARTUPINFO
标记,因为我不想对孩子stdout等做点什么。
但是子进程似乎继承了控制台缓冲区的句柄,并且其输出直接进入父应用程序控制台。我想要彻底改变这一点,所以我用过
SetHandleInformation(GetStdHandle(STD_OUTPUT_HANDLE), HANDLE_FLAG_INHERIT, 0);
报告错误87 - ERROR_INVALID_PARAMETER
我做错了什么?
答案 0 :(得分:1)
错误消息告诉您无法为标准输出句柄设置HANDLE_FLAG_INHERIT
。
相反,您应该创建传递DETACHED_PROCESS
或CREATE_NEW_CONSOLE
创建标志的进程。或者,如果您不希望子进程使用其他控制台,则需要在STARTUPINFO
结构中提供标准句柄。