외부 프로그램 실행
1. 현재 프로세스 종료 안시키고 실행
SHELLEXECUTEINFO si;
ZeroMemory(&si, sizeof(si));
si.cbSize = sizeof(si);
si.lpFile = 실행파일명;
si.lpDirectory = 실행파일 경로;
si.nShow |= SW_SHOWNA;
si.lpParameters = (LPCSTR)보내고자할 파라미터 데이터;
if(!ShellExecuteEx(&si))
{
int res = GetLastError();
if(res == ERROR_FILE_NOT_FOUND)
AfxMessageBox("프로그램을 찾을 수 없습니다.");
if(res == ERROR_PATH_NOT_FOUND)
AfxMessageBox("프로그램 경로가 올바르지 않습니다.");
if(res == ERROR_ACCESS_DENIED)
AfxMessageBox("프로그램 액세스가 거부되었습니다.");
return;
}
2. 현재 프로세스 종료시키고 실행
- 기존 프로세스의 기억 공간에 새로운 프로그램을 적재함으로써, 호출 프로세스를 변형(프로세스 식별번호 유지)
- 테스트 해보니 클래스의 소멸자 호출이 되지 않음(메모리 릭 발생 가능성 존재)
execl (char*path, char*argo, char*arg1,………,NULL)
execv (char*path, char**argv)
execlp(char*filename, char*argo, char*arg1,………,NULL)
execvp(char*filename, char**argv)
path 실행화일이 있는 곳까지의 전체 경로 이름
argo 실행하고자 하는 프로그램 이름
arg1~argn 실행하고자 하는 프로그램의 인수들
avgv 실행하고자 하는 프로그램의 인수들의 배열
filename 실행하고자 하는 프로그램 이름
[출처] execl, execv 함수 사용법|작성자 지코
참조
http://blog.naver.com/PostView.nhn?blogId=eyes0311&logNo=20009947817&redirect=Dlog&widgetTypeCall=true
http://blog.naver.com/PostView.nhn?blogId=shymusicko&logNo=90005695640
[출처] 외부프로그램 실행하기|작성자 아이즈