Mafa Dev
WinExec ( 프로세서에서 외부 프로세스 실행하기 ) 본문
WinExec
특정 어플리케이션을 실행한다.
Note 16비트 윈도우즈에만 제공된다. 어플리케이션은 CreateProcess 함수를 사용하는 것이 좋다.
UINT WINAPI WinExec(
LPCSTR lpCmdLine,
UINT uCmdShow
);
Parameters
lpCmdLine
[in] 실행될 어플리케이션에 대한 명령어 라인이다(파일 이름과 추가적인 파라미터). lpCmdLine
파라미터에 있는 실행 가능한 파일의 이름이 경로를 가지고 있지 않으면, 시스템은 다음의 절차
대로 실행가능한 파일을 찾는다.
1. 어플리케이션이 실행된 경로
2. 현재 디렉토리
3. 윈도우즈 시스템 디렉토리. GetSystemDirectory 함수는 이 디렉토리의 경로를 나타낸다.
4. 윈도우즈 디렉토리. GetWindowDirectory 함수는 이 디렉토리의 경로를 나타낸다.
5. PATH 환경 변수에 있는 디렉토리
uCmdShow
[in] 디스플레이 옵션. 적절한 값의 목록은 ShowWindow 함수의 nCmdShow 파라미터의 설명을
보라.
몇가지 예를 들면
SW_SHOW |
보여주기 |
SW_HIDE |
윈도우 숨김 |
SW_SHOWMAXIMIZED |
전체화면으로 윈도우 출력 |
Return Value
함수가 성공적으로 실행되면, 리턴 값은 31보다 크다.
함수 실행이 실패하면, 리턴 값은 다음의 에러 값 중의 하나이다.
Return code/value Description
0 out of memroy 또는 out of resource
ERROR_BAD_FORMAT .exe 파일이 유효하지 않다.
ERROR_FILE_NOT_FOUND 명세된 파일을 찾을 수 없다.
ERROR_PATH_NOT_FOUND 명세된 경로를 찾을 수 없다.
Remarks
시작된 프로세스가 GetMessage 함수를 호출하거나 time-out에 도달하면 WinExec 함수는 리턴한다. 타임 아웃동안 기다리는 것이 싫으면 WinExec 호출에 의해 시작한 프로세스에서 가능한 빨리 GetMessage 함수를 호출하면 된다.
Security Remarks
실행가능한 이름은 lpCmdLine에서 첫번째 공백으로 나눠지는 것으로 간주된다. 실행가능한 경로 이름이 공백을 가지고 있다면, 다른 실행가능 파일이 실행될 수 있는 위험이 있다 왜냐하면 함수가 공백을 파싱하는 방법이기 때문이다. 다음의 예제는 "Program.exe"를 실행하도록 시도하기 때문에 위함하다.
WinExec("C:\\Program Files\\MyApp", ...)
"Program.exe"라는 프로그램을 시스템에 악의적으로 설치한 사용자가 있다면 WinExec를 호출하면 의도된 어플리케이션이 아니라 "Program.exe"가 실행될 것이다.
이런 문제를 방지하기 위해서, WinExec보다는 CreateProcess 함수를 사용하라. 하지만 WinExec를 꼭 사용해야 한다면, 다음의 예제처럼 어플리케이션 이름을 따옴표로 둘러싸라.
WinExec("\"C:\\Program Files\\MyApp.exe\", -L -S", ...)
실제 실행시키기 위한 코딩
[출처] [MFC]다른 프로그램 실행 WinExec|작성자 네이밍
'개발 > USB' 카테고리의 다른 글
USB로 exe 자동실행 소스 (0) | 2013.02.21 |
---|---|
getdrive ( 최근의 드라이버 불러오는 함수) (0) | 2013.02.18 |
WM_DEVICECHANGE (착탈) 메시지 (0) | 2013.02.17 |
[WM_DEVICECHANGE 이벤트 종류] (0) | 2013.02.17 |