Функция WinExec (winbase.h)
Запускает указанное приложение.
Синтаксис
UINT WinExec(
[in] LPCSTR lpCmdLine,
[in] UINT uCmdShow
);
Параметры
[in] lpCmdLine
Командная строка (имя файла и необязательные параметры) для выполнения приложения. Если имя исполняемого файла в параметре lpCmdLine не содержит путь к каталогу, система выполняет поиск исполняемого файла в этой последовательности:
- Каталог, из которого загружено приложение.
- Текущий каталог.
- Системный каталог Windows. Функция GetSystemDirectory извлекает путь к этому каталогу.
- Каталог Windows. Функция GetWindowsDirectory извлекает путь к этому каталогу.
- Каталоги, перечисленные в переменной среды PATH.
[in] uCmdShow
Параметры отображения. Список допустимых значений см. в описании параметра nCmdShow функции ShowWindow .
Возвращаемое значение
Если функция выполняется успешно, возвращаемое значение больше 31.
Если функция завершается сбоем, возвращается одно из следующих значений ошибки.
Возвращаемый код/значение | Описание |
---|---|
|
Системе не хватает памяти или ресурсов. |
|
Недопустимый файл .exe. |
|
Указанный файл не найден. |
|
Указанный путь не найден. |
Комментарии
Функция 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) |