AVZ 5. Руководство пользователя
×

16.38.2. function ExecuteFileOUT

 
function  ExecuteFileOUT(FileName, Params: string;
                         Mode : integer;
                         WaitTime : integer; ATerminate : boolean;
                         AOUT: TStringList; AErrors : TStringList;
                         ACodePage : integer) : boolean;
 
 
Производит выполнение указанного приложения, полный аналог ExecuteFile, за исключением того, что данная функция предназначена для запуска консольных приложений и перехватывает выводимые ими на консоль данные с учетом кодировки.  Код возврата процесса, запущенного при помощи ExecuteFileOUT можно узнать при помощи функции GetLastExitCode
Функция возвращает true в случае успешного запуска процесса, false в случае ошибки.
 
AOUT - экземпляр класса TStringList, в случае успешного запуска приложения заполняется строками, выведенными запущенным приложением на консоль в поток StdOutput. Если поток StdOutput не представляет интереса, вместо экземпляра класса можно передать nil.
AErrors - экземпляр класса TStringList, в случае успешного запуска заполняется строками, выведенными запущенным приложением на консоль в поток StdError. Если поток StdError не представляет интереса, вместо экземпляра класса можно передать nil.
ACodePage - кодовая страница для перекодировки сообщений, выводимых приложением в консоль. Для русскоязычной Windows это, как правило, 866.
 
Совместимость: AVZ 5.45 и выше
Начиная с версии AVZ 5.62 при помощи функции GetLastError можно проверить успешность выполнения данной операции и получить код ошибки.
 
На заметку:
Так как в данном случае необходимо дождаться завершения работы приложения, WaitTime=0 не поддерживается, для значений менее 5000 оно автоматически исправляется на 5000 (т.е. минимальное ожидание завершения процесса - 5 секунд, рекомендуется задать большие значения, так как если приложение завершится раньше заданного интервала, то ожидание немедленно прервется). 
 
Пример:
var
 PrgOut, PrgErr : TStringList;
begin
 PrgOut := TStringList.Create;
 PrgErr := TStringList.Create;
 ExecuteFileOUT('cmd', '/c dir', 1, 15000, true, PrgOut, PrgErr, 866);
 AddToLog('Приложение вывело на консоль:');
 AddToLog(PrgOut.text);
 AddToLog('Ошибки:');
 AddToLog(PrgErr.text);
end.
В данном примере выполняется команда DIR, и результаты работы этой команды выводится в протокол.
 
var
 PrgOut, SummaryOut: TStringList;
 procedure AddLinesToSummary(ALines : TStringList);
 var
  i : integer;
 begin
   for i := 0 to ALines.Count-1 do
     SummaryOut.Add(ALines[i]);
 end;
begin
 PrgOut := TStringList.Create;
 SummaryOut:= TStringList.Create;
 SummaryOut.Add('--- Запуск ipconfig /flushdns ---');
 ExecuteFileOUT('ipconfig', '/flushdns', 1, 15000, true, PrgOut, nil, 866);
 SummaryOut.Add(PrgOut.Text);
 SummaryOut.Add('--- Запуск ipconfig /all ---');
 ExecuteFileOUT('ipconfig.exe', '/all', 1, 15000, true, PrgOut, nil, 866);
 SummaryOut.Add(PrgOut.Text);
 AddToLog('Итоговый протокол:');
 AddToLog(SummaryOut.text);
end.
 
В данном примере демонстрируется формирование сводного протокола, содержащего данные, выведенные в StdOut несколькими консольными приложениями.