2016년 5월 18일 수요일

ShellExecuteEx 함수 사용법

어플리케이션에서 외부 프로세스를 실행 시키고 싶을때 사용한다.

클래스 멤버 변수 선언
SHELLEXECUTEINFO m_sInfo;

외부 어플리케이션 실행
ZeroMemory(&m_sInfo, sizeof(SHELLEXECUTEINFO));
m_sInfo.cbSize = sizeof(SHELLEXECUTEINFO);
m_sInfo.lpFile = _T("D:\\my_process.exe"); //프로세스 경로
m_sInfo.lpParameters = _T("--id=my --pass=process"); //전달 인자
m_sInfo.nShow = SW_SHOWMINIMIZED; //실행시 최소화
m_sInfo.lpVerb = _T("runas"); //관리자 권한 실행
m_sInfo.fMask = SEE_MASK_NOCLOSEPROCESS; //프로세스 핸들값 사용

if(ShellExecuteEx(&m_sInfo))
{
TRACE("ShellExecuteEx Success\n");
}
else
{
TRACE("ShellExecuteEx Failed\n");
}

※ fMask에 SEE_MASK_NOCLOSEPROCESS 값을 설정하면 m_sInfo.hProcess에 프로세스 핸들이 저장된다.

프로세스 종료
if(TerminateProcess(m_sInfo.hProcess, 0))
{
m_sInfo.hProcess = 0;
TRACE("Exit Process Success\n");
}
else
{
TRACE("Exit Process Failed\n");
}