process 실행 및 종료까지 대기 sample

2018. 10. 29. 18:45IT-개발/winapi 및 MFC

반응형


(1. WaitForSingleObject 를 사용한 방법 : 펌 -  http://sijoo.tistory.com/288)


SHELLEXECUTEINFO info;
 
// 실행을 위해 구조체 세트
ZeroMemory( &cinfo, sizeof(info) );
info.cbSize = sizeof(info);
info.lpVerb = "open";
info.lpFile = "C:\\aaa\\aaa.exe";
info.lpParameters =  "\"c:\\a.txt\"";
info.fMask = SEE_MASK_NOCLOSEPROCESS;
info.nShow = SW_SHOWDEFAULT;
 
// 프로그램을 실행한다.
int r = (int)ShellExecuteEx( &info );

//프로세스가 종료될 때까지 무한정 기다림
WaitForSingleObject(info.hProcess, INFINITE);




(2. Loop 돌면서 확인하는 방법 방법 : 펌 -  https://zemnablog.wordpress.com/2007/08/27/shellexecuteex-%ED%95%A8%EC%88%98-%EC%A2%85%EB%A3%8C%EC%8B%9C%EC%A0%90-%EC%9E%A1%EA%B8%B0/)



SHELLEXECUTEINFO shExIf;
 
DWORD dwExitCode;
 
CString FileName = "jpk.exe";
 
shExIf.lpDirectory = "C:my_folder";
shExIf.lpParameters = "";
shExIf.cbSize = sizeof( SHELLEXECUTEINFO );
shExIf.lpVerb = "open";
shExIf.lpFile = FileName;
shExIf.nShow = SW_HIDE;
shExIf.fMask = SEE_MASK_NOCLOSEPROCESS;
 
ShellExecuteEx( &shExIf );
 
dwExitCode = 0;
 
while(1)
{
    ::GetExitCodeProcess( shExIf.hProcess, &dwExitCode );
 
    if( dwExitCode != STILL_ACTIVE )
    {
        MessageBox(" jpk.exe 종료");
        break;
    }
}