function ExecAndCaptureOutput(const Filename, Params, WorkingDir: String; const ShowCmd: Integer; const Wait: TExecWait; var ResultCode: Integer; var Output: TExecOutput): Boolean;
Идентична функции Exec за исключением:
— вывод программы перехватывается из потоков stdout и stderr. Это отличается от функции ExecAndLogOutput, которая объединяется потоки вывода.
— консольные программы всегда
запускаются в скрытом режиме, а параметр ShowCmd влияет только
на программы с графического интерфейсом, поэтому рекомендуется всегда
использовать флаг SW_SHOWNORMAL
вместо SW_HIDE
;
— если при настройке перенаправления вывода произошла ошибка (что должно происходить крайне редко), будет вызвано исключение.
При вызове этой функции для параметра Wait всегда должно быть установлено значение ewWaitUntilTerminated.
Класс TExecOutput
объявлен как:
TExecOutput = record StdOut: TArrayOfString; StdErr: TArrayOfString; Error: Boolean; end;
Error будет True, если чтение вывода не удалось (что возможно в довольно редких случаях), или если вывод слишком велик. Ошибка регистрируется в файле журнала установки или удаления и/или в панели сообщений отладки IDE компилятора. После ошибки дальнейший вывод не производится.
Общий размер вывода ограничен 10 миллионами байт или максимум 1 миллионом строк.
var ResultCode: Integer; Output: TExecOutput; begin try // Получаем конфигурацию системы Result := ExecAndCaptureOutput(ExpandConstant('{cmd}'), '/c systeminfo', '', SW_SHOWNORMAL, ewWaitUntilTerminated, ResultCode, Output); except Result := False; Log(GetExceptionMessage); end; if Result then begin // Выполняем необходимые операции с массивом строк Output.StdOut end; end;