Share via


WinExec 함수(winbase.h)

지정된 애플리케이션을 실행합니다.

참고 이 함수는 16비트 Windows와의 호환성을 위해서만 제공됩니다. 애플리케이션은 CreateProcess 함수를 사용해야 합니다.
 

구문

UINT WinExec(
  [in] LPCSTR lpCmdLine,
  [in] UINT   uCmdShow
);

매개 변수

[in] lpCmdLine

실행할 애플리케이션의 명령줄(파일 이름 및 선택적 매개 변수)입니다. lpCmdLine 매개 변수의 실행 파일 이름에 디렉터리 경로가 없는 경우 시스템은 다음 순서로 실행 파일을 검색합니다.

  1. 애플리케이션이 로드된 디렉터리입니다.
  2. 현재 디렉터리
  3. Windows 시스템 디렉터리입니다. GetSystemDirectory 함수는 이 디렉터리의 경로를 검색합니다.
  4. Windows 디렉터리입니다. GetWindowsDirectory 함수는 이 디렉터리의 경로를 검색합니다.
  5. PATH 환경 변수에 나열된 디렉터리입니다.

[in] uCmdShow

표시 옵션입니다. 허용되는 값 목록은 ShowWindow 함수의 nCmdShow 매개 변수에 대한 설명을 참조하세요.

반환 값

함수가 성공하면 반환 값이 31보다 큽니다.

함수가 실패하면 반환 값은 다음 오류 값 중 하나입니다.

반환 코드/값 설명
0
시스템이 메모리 또는 리소스가 부족합니다.
ERROR_BAD_FORMAT
.exe 파일이 잘못되었습니다.
ERROR_FILE_NOT_FOUND
지정된 파일을 찾을 수 없습니다.
ERROR_PATH_NOT_FOUND
지정된 경로를 찾을 수 없습니다.

설명

WinExec 함수는 시작 프로세스가 GetMessage 함수를 호출하거나 제한 시간에 도달하면 를 반환합니다. 시간 초과 지연을 기다리지 않도록 하려면 WinExec 호출로 시작된 모든 프로세스에서 가능한 한 빨리 GetMessage 함수를 호출합니다.

보안 설명

실행 파일 이름은 lpCmdLine에서 공백으로 구분된 첫 번째 문자열로 처리됩니다. 실행 파일 또는 경로 이름에 공백이 있는 경우 함수가 공백을 구문 분석하는 방식으로 인해 다른 실행 파일이 실행될 위험이 있습니다. 다음 예제는 함수가 "MyApp.exe" 대신 "Program.exe"(있는 경우)을 실행하려고 하기 때문에 위험합니다.
WinExec("C:\\Program Files\\MyApp", ...)

악의적인 사용자가 시스템에서 "Program.exe"라는 애플리케이션을 만드는 경우 Program Files 디렉터리를 사용하여 WinExec 을 잘못 호출하는 모든 프로그램은 의도한 애플리케이션 대신 이 애플리케이션을 실행합니다.

이 문제를 방지하려면 WinExec 대신 CreateProcess를 사용합니다. 그러나 레거시 이유로 WinExec 을 사용해야 하는 경우 애플리케이션 이름이 아래 예제와 같이 따옴표로 묶어야 합니다.

WinExec("\"C:\\Program Files\\MyApp.exe\" -L -S", ...)

요구 사항

요구 사항
지원되는 최소 클라이언트 Windows XP [데스크톱 앱만 해당]
지원되는 최소 서버 Windows Server 2003 [데스크톱 앱만 해당]
대상 플랫폼 Windows
헤더 winbase.h(Windows.h 포함)
라이브러리 Kernel32.lib
DLL Kernel32.dll
API 세트 ext-ms-win-kernel32-process-l1-1-0(Windows 10 버전 10.0.14393에 도입됨)

추가 정보

CreateProcess