我正在努力让 msvc 下的 CreateProcessW 使用 EXTENDED_STARTUPINFO_PRESENT 选项。我创建了一个最小的示例,它调用 ping.exe 并将标准输出重定向到句柄。如果没有 EXTENDED_STARTUPINFO_PRESENT 选项,这也可以正常工作(但不是线程安全的),因此尝试将句柄显式传递给子进程,如下面的最小示例所示。
#include <windows.h>
#include <processthreadsapi.h>
#include <WinBase.h>
#include <iostream>
using namespace std;
void TestFunctionW()
{
STARTUPINFOEXW startup_info = { 0 };
PROCESS_INFORMATION process_info = { 0 };
SECURITY_ATTRIBUTES saAttr;
// Set the bInheritHandle flag so pipe handles are inherited.
saAttr.nLength = sizeof(SECURITY_ATTRIBUTES);
saAttr.bInheritHandle = TRUE;
saAttr.lpSecurityDescriptor = NULL;
HANDLE m_hChildStd_OUT_Rd;
HANDLE m_hChildStd_OUT_Wr;
// Create a pipe for the child process's STDOUT. (m_hChildStd_OUT_Wr->m_hChildStd_OUT_Rd)
if (!CreatePipe(&m_hChildStd_OUT_Rd, &m_hChildStd_OUT_Wr, &saAttr, 0)) {
std::cerr << …
Run Code Online (Sandbox Code Playgroud)