目前处理我需要为外部进程的子进程捕获stdout / stderr的情况。对于这种情况,我需要一个命名管道吗?
我目前尝试了以下内容:
SECURITY_ATTRIBUTES saAttr;
HANDLE hStdOutRd = NULL;
HANDLE hStdOutWr = NULL;
HANDLE hDupStdOutWr = NULL;
saAttr.nLength = sizeof(SECURITY_ATTRIBUTES);
saAttr.bInheritHandle = TRUE;
saAttr.lpSecurityDescriptor = NULL;
CreatePipe(&hStdOutRd, &hStdOutWr, &saAttr, 0) )
SetHandleInformation(hStdOutRd, HANDLE_FLAG_INHERIT, 0) )
HANDLE hExProc = OpenProcess(PROCESS_DUP_HANDLE, false, EXTERNAL_PROC);
DuplicateHandle(GetCurrentProcess(),
hStdOutWr,
hExProc,
&hDupStdOutWr,
0,
TRUE,
DUPLICATE_SAME_ACCESS);
// Child process for EXTERNAL_PROC executes and should inherit the duplicated handle
// Read from hStdOutRd
从管道读取时,它会挂起或不返回任何内容。我假设这是一个匿名管道,只适用于父子进程而不是外部进程。我宁愿不使用命名管道,是否可以将DuplicateHandle()管道从远程进程返回到我的进程然后访问数据?如果是这样,那会是什么样的?
答案 0 :(得分:0)
不,你不需要使用命名管道,匿名管道就可以了。 MSDN提供了捕获子进程输出的完整示例: