首页 文章

WINAPI:禁用stdin stdout stderr句柄的继承[关闭]

提问于
浏览
-1

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

我在 STARTUPINFO struct中设置了 hStdInputhStdOutputhStdErro 以及 STARTF_USESTDHANDLES 标志,因为我不想对childs stdout等做一些事情 .

但是子进程似乎继承了控制台缓冲区的句柄,它的输出直接进入父应用程序控制台 . 我想要发现这个,所以我使用 SetHandleInformation(GetStdHandle(STD_OUTPUT_HANDLE), HANDLE_FLAG_INHERIT, 0); 报告错误87 - ERROR_INVALID_PARAMETER

我究竟做错了什么?

1 回答

  • 1

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

    相反,您应该创建传递 DETACHED_PROCESSCREATE_NEW_CONSOLE 创建标志的进程 . 或者,如果你不需要在 STARTUPINFO 结构中提供标准句柄 .

相关问题