我现在要用createprocess来调用cl.exe编译c:\aa.c文件,并且把编译过程中的错误信息传出来,
请问我该怎么设置createprocess参数.
希望各位大虾多多指教哦,先谢过了!
CreateProcess(NULL, "", NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi);
请问我该怎么设置createprocess参数.
希望各位大虾多多指教哦,先谢过了!
CreateProcess(NULL, "", NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi);
主要就是&si的设置,
{
resStr = "";
exitCode = -1;
SECURITY_ATTRIBUTES saPipe;
saPipe.nLength = sizeof(SECURITY_ATTRIBUTES);
saPipe.lpSecurityDescriptor = NULL;
saPipe.bInheritHandle = TRUE;
HANDLE hReadPipe, hWritePipe;
if (CreatePipe(&hReadPipe, &hWritePipe, &saPipe, 0) == 0)
return false; SECURITY_ATTRIBUTES sa;
ZeroMemory(&sa, sizeof(SECURITY_ATTRIBUTES));
sa.nLength = sizeof(SECURITY_ATTRIBUTES);
sa.bInheritHandle = TRUE;
STARTUPINFO startupInfo;
ZeroMemory(&startupInfo, sizeof(STARTUPINFO));
startupInfo.cb = sizeof(STARTUPINFO);
startupInfo.dwFlags = STARTF_USESTDHANDLES | STARTF_USESHOWWINDOW;
startupInfo.hStdError = hWritePipe;
startupInfo.hStdOutput = hWritePipe;
PROCESS_INFORMATION processInfo;
char *cmdStr = new char[strlen(cmdLine) + 1];
strcpy(cmdStr, cmdLine);
if (CreateProcess(NULL, cmdStr, &sa, &sa, TRUE, 0, NULL, NULL, &startupInfo, &processInfo))
{
WaitForSingleObject(processInfo.hProcess, INFINITE);
GetExitCodeProcess(processInfo.hProcess, &exitCode);
CloseHandle(hWritePipe);
char buf[256];
DWORD num = 0;
while (ReadFile(hReadPipe, buf, sizeof(buf) - 1, &num, NULL))
{
buf[num] = '\0';
resStr += buf;
}
CloseHandle(hReadPipe);
}
else
{
CloseHandle(hWritePipe);
CloseHandle(hReadPipe);
// ShowWinError();
delete []cmdStr;
exitCode = GetLastError();
return false;
}
delete []cmdStr;
CloseHandle(processInfo.hThread);
CloseHandle(processInfo.hProcess);
return true;
}