我使用带有标志 BOOL bInheritHandles = TRUE
的CreateProcess创建了子进程,因为我想将一些句柄传递给子进程的匿名管道 .
我在 STARTUPINFO
struct中设置了 hStdInput
, hStdOutput
和 hStdErro
以及 STARTF_USESTDHANDLES
标志,因为我不想对childs stdout等做一些事情 .
但是子进程似乎继承了控制台缓冲区的句柄,它的输出直接进入父应用程序控制台 . 我想要发现这个,所以我使用 SetHandleInformation(GetStdHandle(STD_OUTPUT_HANDLE), HANDLE_FLAG_INHERIT, 0);
报告错误87 - ERROR_INVALID_PARAMETER
我究竟做错了什么?
1 回答
错误消息告诉您无法为标准输出句柄设置
HANDLE_FLAG_INHERIT
.相反,您应该创建传递
DETACHED_PROCESS
或CREATE_NEW_CONSOLE
创建标志的进程 . 或者,如果你不需要在STARTUPINFO
结构中提供标准句柄 .