15,471
社区成员
发帖
与我相关
我的任务
分享
SECURITY_ATTRIBUTES sa; //定义安全属性结构体
sa.bInheritHandle=TRUE; //如果为真,新的进程继承这个句柄
sa.lpSecurityDescriptor=NULL; //赋予一个默认的安全描述符
sa.nLength=sizeof(SECURITY_ATTRIBUTES); //用sizeof取得长度
if(!CreatePipe(&hRead,&hWrite,&sa,0)) //注意,由sa而写上面的结构体.注意这里用的是if(!xxx)的写法
{
MessageBox(_T("创建匿名管道失败"));
return;
}
STARTUPINFO sui; //STARTUPINFO结构体的构造
ZeroMemory(&sui,sizeof(STARTUPINFO)); //用ZeroMemory函数,将sui结构体中所有对象全部设置为0
sui.cb=sizeof(STARTUPINFO);
sui.dwFlags=STARTF_USESTDHANDLES;
sui.hStdInput=hRead;
sui.hStdOutput=hWrite; //获取读写句柄
sui.hStdError=GetStdHandle(STD_ERROR_HANDLE);
PROCESS_INFORMATION pi;
if (!CreateProcess(".\\Child.exe",NULL,NULL,NULL,TRUE,0,NULL,NULL,&sui,&pi))
{
CloseHandle(hRead);
CloseHandle(hWrite);
MessageBox("创建子进程失败");
//如下将读写句柄设置为 NULL 那么在析构函数中,就不会再关闭一次了
hRead=NULL;
hWrite=NULL;
return;
}
else
{
//关闭子进程的进程、线程对象
CloseHandle(pi.hProcess);
CloseHandle(pi.hThread);
}
if (!CreateProcess("..\\Child123.exe",NULL,NULL,NULL,TRUE,0,NULL,NULL,&sui,&pi))
{