Программирование: Exec

Прототип

function Exec(const Filename, Params, WorkingDir: String; const ShowCmd: Integer; const Wait: TExecWait; var ResultCode: Integer): Boolean;

Описание

Выполняет запуск указанного исполняемого (.exe) или пакетного (.bat) файла, используя те же учётные данные, что и программа установки/удаления. Параметр Wait определяет немедленный возврат функции или ожидание завершения запущенного процесса или его бездействия. Функция возвращает значение True, если указанный файл был успешно запущен, в противном случае False.

Если функция вернула True, а для параметра Wait задано значение ewWaitUntilTerminated, тогда параметр ResultCode возвращает код выхода запущенного процесса.

Если функция вернула False, то значение параметра ResultCode указывает на возникшую ошибку. Используйте SysErrorMessage(ResultCode) для получения описания ошибки.

Комментарии

Класс TExecWait представлен следующими значениями:

TExecWait = (ewNoWait, ewWaitUntilTerminated, ewWaitUntilIdle);

Используйте функцию ShellExec, если требуется запустить файл отличный от исполняемого или пакетного.

Не заключайте значение параметра Filename в кавычки: функция добавит их автоматически.

Параметр WorkingDir может быть пустой строкой. В этом случае функция попытается получить рабочий каталог из параметра Filename и использовать его в качестве текущего каталога процесса. Если в Filename не указано имя пути, то будет использован каталог по умолчанию.

Если в одной строке содержится имя файла и параметры его запуска (например, командная строка, полученная из ключа UninstallString в реестре), нет необходимости в их разделении: просто передайте '>' в параметре Filename, а всю командную строку в параметре Params. (Обратите внимание, что в этом случае поддержка файлов .bat и .cmd отключается; просто указанная командная строка передается в CreateProcess без какой-либо обработки.)

По умолчанию, когда программа установки/удаления выполняется в 64-разрядном режиме установки, при вызове CreateProcess эта функция отключает перенаправление файловой системы в WOW64. Это можно переопределить, вызвав функцию EnableFsRedirection.

Эта функция не может использоваться для запуска самой программы установки до тех пор, пока не начнётся процесс установки.

Внимание! По сравнению с функцией Exec в ISPP параметры ShowCmd и Wait поменяны местами!

Пример

var
  ResultCode: Integer;
begin
  // Запускаем Блокнот и ожидаем завершения его работы
  if Exec(ExpandConstant('{win}\notepad.exe'), '', '', SW_SHOWNORMAL,
     ewWaitUntilTerminated, ResultCode) then
  begin
    // выполняем какие-либо действия в случае успеха
    // параметр ResultCode содержит код выхода
  end
  else begin
    // выполняем какие-либо действия в случае неудачи
    // параметр ResultCode содержит код выхода
  end;
end;

См. также:

ExecAndCaptureOutput
ExecAndLogOutput
ExecAsOriginalUser