sa.nLength = sizeof(SECURITY_ATTRIBUTES);
sa.lpSecurityDescriptor = NULL;
sa.bInheritHandle = TRUE;
if (!CreatePipe(&hRead,&hWrite,&sa,0))
{
AfxMessageBox("创建管道失败!",MB_OK);
return "";
}
STARTUPINFO si;
PROCESS_INFORMATION pi;
si.cb = sizeof(STARTUPINFO);
GetStartupInfo(&si);
si.hStdError = hWrite; //把创建进程的标准错误输出重定向到管道输入
si.hStdOutput = hWrite; //把创建进程的标准输出重定向到管道输入
si.wShowWindow = SW_HIDE;
if (!CreateProcess(NULL, cmd,NULL,NULL,TRUE,NULL,NULL,NULL,&si,&pi))
{
CloseHandle(hWrite);
CloseHandle(hRead);
AfxMessageBox("进程创建失败!\r请尝试再次编译!",MB_OK);
return "";
}
CloseHandle(hWrite);
CloseHandle(hRead);
//将结果读取出来
CString StrOutPut=ReadOutPutFile(StrSQLResult.GetBuffer(StrSQLResult.GetLength()));
SetSaveOutPut(StrOutPut);
return StrOutPut;
}
摘自 chenjieb520--两片森林的技术博客