본문으로 건너뛰기

CreateProcess 예제

보통 다른 프로그램을 프로그래밍 적으로 실행을 하려면 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 함수를 사용하시기 바랍니다.