Функция 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

Параметры отображения. Список допустимых значений см. в описании параметра nCmdShow функции ShowWindow .

Возвращаемое значение

Если функция выполняется успешно, возвращаемое значение больше 31.

Если функция завершается сбоем, возвращается одно из следующих значений ошибки.

Возвращаемый код/значение Описание
0
Системе не хватает памяти или ресурсов.
ERROR_BAD_FORMAT
Недопустимый файл .exe.
ERROR_FILE_NOT_FOUND
Указанный файл не найден.
ERROR_PATH_NOT_FOUND
Указанный путь не найден.

Комментарии

Функция WinExec возвращается, когда запущенный процесс вызывает функцию GetMessage или достигается ограничение времени ожидания. Чтобы избежать ожидания задержки времени ожидания, вызовите функцию GetMessage как можно скорее в любом процессе, запущенном вызовом WinExec.

Примечания по безопасности

Имя исполняемого файла рассматривается как первая строка с разделителями пробелами в lpCmdLine. Если в имени исполняемого файла или пути есть пробел, существует риск запуска другого исполняемого файла из-за того, как функция анализирует пробелы. Следующий пример опасен тем, что функция попытается запустить "Program.exe", если она существует, а не "MyApp.exe".
WinExec("C:\\Program Files\\MyApp", ...)

Если злоумышленник создает приложение с именем "Program.exe" в системе, любая программа, которая неправильно вызывает WinExec с помощью каталога Program Files, запустит это приложение вместо предполагаемого приложения.

Чтобы избежать этой проблемы, используйте CreateProcess , а не WinExec. Однако если для устаревших версий необходимо использовать WinExec , убедитесь, что имя приложения заключено в кавычки, как показано в примере ниже.

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

Требования

Требование Значение
Минимальная версия клиента Windows XP [только классические приложения]
Минимальная версия сервера Windows Server 2003 [только классические приложения]
Целевая платформа Windows
Header winbase.h (включая Windows.h)
Библиотека Kernel32.lib
DLL Kernel32.dll
Набор API ext-ms-win-kernel32-process-l1-1-0 (представлено в Windows 10 версии 10.0.14393)

См. также раздел

CreateProcess