보통 다른 프로그램을 프로그래밍 적으로 실행을 하려면 ShellExcute 함수를 많이 쓰긴 합니다만.. 다른 이유로 CreateProcess 로 실행을 해야 하는 경우도 있지요 .. PID로 뭔가를 해야 한다거나 .. 등등…
그런때 쓰시면 됩니다.
C++
/**
* RunProcess
**/
BOOL RunProcess(TCHAR* szExeName) {
STARTUPINFO si;
PROCESS_INFORMATION pi;
ZeroMemory(&si, sizeof(si));
si.cb = sizeof(si);
ZeroMemory(&pi, sizeof(pi));
// Start the child process.
if (!CreateProcess(NULL, // No module name (use command line)
szExeName, // Command line
NULL, // Process handle not inheritable
NULL, // Thread handle not inheritable
FALSE, // Set handle inheritance to FALSE
0, // No creation flags
NULL, // Use parent's environment block
NULL, // Use parent's starting directory
&si, // Pointer to STARTUPINFO structure
&pi) // Pointer to PROCESS_INFORMATION structure
)
{
return FALSE;
}
// Wait until child process exits.
WaitForSingleObject(pi.hProcess, INFINITE);
// Close process and thread handles.
CloseHandle(pi.hProcess);
CloseHandle(pi.hThread);
return TRUE;
}위 코드는 실행시킨 프로세스가 종료되기 전까지 대기를 합니다.. 만약 대기 없이 실행만 시키고 함수가 리턴되길 바라시면 ..
WaitForSingleObject 를 쓰지 마시고 .,.
C++
DWORD dwWait = ::WaitForInputIdle(pi.hProcess, INFINITE);WaitForInputIdle 함수를 사용하시기 바랍니다.