Функция
WinExecФункция
WinExec запускает заданную прикладную программу.
Обратите внимание! Эта функция предусмотрена для совместимости с более ранними версиями Windows. Для базирующихся на Win32 прикладных программ, используйте функцию CreateProcess. |
Синтаксис
lpCmdLine, // адрес командной линии UINT uCmdShow // стиль окна); |
Параметры
lpCmdLine
[in] Указывает на строку символов с нулем в конце, которая содержит командную линию (имя файла плюс необязательные параметры) для прикладной программы, которая будет исполняться. Если имя исполняемого файла в параметре
lpCmdLine не содержит путь к каталогу, система осуществляет поиск исполняемого файла в этой последовательности:Windows. Функция GetSystemDirectory извлекает путь к этому каталогу.1. Каталог, из которого загружена прикладная программа.
2. Текущий каталог.
3. Системный каталог
4. Каталог
Windows. Функция GetWindowsDirectory извлекает путь к этому каталогу.5. Каталоги, перечисленные в переменной окружения
PATH.uCmdShow
[in] Список приемлемых значений, рассмотрен в параметре
nCmdShow функции ShowWindow. Для не-Windows программы, PIF файл (описатель программы), если таковой имеется, обуславливает для приложения состояние окна.Возвращаемые значения
Если функция завершается успешно, величина возвращаемого значения - больше чем 31.
Если функция завершается с ошибкой, величина возвращаемого значения - одно из нижеследующих значений ошибки:
Значение |
Описание |
0 |
Системе не хватает памяти или ресурсов |
ERROR_BAD_FORMAT |
.EXE файл является неправильным (не-Win32 .EXE или ошибка в образе .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", ...) |
Смотри также
Краткий обзор Процессы и потоки, Функции, используемые процессами и потоками, CreateProcess, GetMessage, GetSystemDirectory, GetWindowsDirectory, LoadModule, ShowWindow
Размещение и совместимость WinExec |
|
Windows. NET Server |
Да |
Windows XP |
Да |
Windows 2000 |
Да |
Windows NT |
Да версия 3.1 и выше |
Windows Me |
Да |
Windows 98 |
Да |
Windows 95 |
Да |
Используемая библиотека |
Kernel32.lib |
Заголовочный файл |
|
- объявлено в |
Winbase.h |
- включено в |
Windows.h |
Unicode |
Нет |
Замечания по платформе |
Не имеется |