Функция WinExec

Функция WinExec запускает заданную прикладную программу.

Обратите внимание! Эта функция предусмотрена для совместимости с более ранними версиями Windows. Для базирующихся на Win32 прикладных программ, используйте функцию CreateProcess.

Синтаксис

UINT WinExec(

LPCSTR lpCmdLine, // адрес командной линии

UINT uCmdShow     // стиль окна

   );

Параметры

lpCmdLine

[in] Указывает на строку символов с нулем в конце, которая содержит командную линию (имя файла плюс необязательные параметры) для прикладной программы, которая будет исполняться. Если имя исполняемого файла в параметре lpCmdLine не содержит путь к каталогу, система осуществляет поиск исполняемого файла в этой последовательности:

1. Каталог, из которого загружена прикладная программа.

2. Текущий каталог.

3. Системный каталог Windows. Функция GetSystemDirectory извлекает путь к этому каталогу.

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

Нет

Замечания по платформе

Не имеется

 

Назад в оглавление
На главную страницу
На оглавление справки

Hosted by uCoz