Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Как дождаться выполнения bat-файла? [D7, Win95/98]


Гость2 ©   (2005-06-26 10:13:00) 

Из приложения запускаю bat-файл, который выполняет команды на протяжении 2-3 минут. Надо проверить правильность выполнения батника (наличие созданых батником файлов и папок). Но это можна сделать только, когда батник проработал до конца. Как определить, что батник завершил роботу?


BiN   (2005-06-27 11:38:00) [1]

MS-MEN ©   (26.06.05 18:33) [1], [2]
http://www.veloplus.ru/invent/g/sht1.jpg
-)

смотрим Wait-функции


MS-MEN   (2005-06-26 18:38:00) [2]

function WinExecAndWait(Path: PChar; Visibility: Word): Word;
var
 InstanceID: THandle;
 Msg: TMsg;
begin
 InstanceID := WinExec(Path, Visibility);
 if InstanceID < 32 then { значение меньше чем 32 указывает на ошибку }
   WinExecAndWait := InstanceID
 else
   repeat
     while PeekMessage(Msg, 0, 0, 0, pm_Remove) do
     begin
       if Msg.message = wm_Quit then
         Halt(Msg.WParam);
       TranslateMessage(Msg);
       DispatchMessage(Msg);
     end;
   until
     GetModuleUsage(InstanceID) = 0;
 WinExecAndWait := 0;
end;


MS-MEN   (2005-06-26 18:33:00) [3]

Есть такие ф-ций но не помню (Все помнить не возможно)
предлагаю указать инструкцию в конце "BAT" файла
простую команду, например создание директорий.

Вот может это поможет.

{ **** UBPFD *********** by delphibase.endimus.com ****
>> Запуск программы и ожидание ее окончания, принудительное завершение если timeout

Функция создавалась для запуска и сопровождения приложения в указаном интервале времени.
Я лично для наблюдения за работой приложения включил функцию в нить,
которая (обрывалась) по завершении процесса.

Зависимости: Classes, SysUtils, Windows, strUtils, Consts;
Автор:       August, august@torba.com, ICQ:176381214
Copyright:   doctorAugust
Дата:        5 февраля 2003 г.
***************************************************** }

function ExecuteFileTm(FileName: string; Params: string; Dsk: boolean; TimeOut:
 cardinal): boolean;
var
 Res: LongBool;
 PIn: PROCESS_INFORMATION;
 SII: STARTUPINFO;
 RetCode: cardinal;
 TmOut: cardinal; //In seconds
 i: cardinal;
 CreationsFlags: cardinal;
begin
 TmOut := TimeOut;
 try
   if Dsk then
   begin
     CreationsFlags := CREATE_DEFAULT_ERROR_MODE or NORMAL_PRIORITY_CLASS
       or CREATE_UNICODE_ENVIRONMENT;
   end
   else
   begin
     CreationsFlags := CREATE_DEFAULT_ERROR_MODE or CREATE_NO_WINDOW
       or NORMAL_PRIORITY_CLASS
       or CREATE_UNICODE_ENVIRONMENT;
   end;
   getstartupinfo(SII);
   Res := createprocess(
     pchar(FileName),
     pchar(Params),
     nil,
     nil,
     True,
     CreationsFlags,
     nil,
     pchar(extractfilepath(FileName)),
     SII,
     PIn);
 except
   CloseHandle(Pin.hProcess);
   ExecuteFileTm := False;
   exit;
 end;
 if not Res then
 begin
   CloseHandle(Pin.hProcess);
   ExecuteFileTm := False;
   exit;
 end;
 i := 0;
 RetCode := STILL_ACTIVE;
 while (i <= TmOut) and (RetCode = STILL_ACTIVE) do
 begin
   try
     GetExitCodeProcess(Pin.hProcess, RetCode);
   except
     CloseHandle(Pin.hProcess);
     ExecuteFileTm := False;
     exit;
   end;
   Sleep(1000);
   inc(i);
 end;
 if (i > TmOut) and (RetCode = STILL_ACTIVE) then
 begin
   TerminateProcess(Pin.hProcess, RetCode);
   CloseHandle(Pin.hProcess);
   // ExecuteFilePrExt:=false;
   ExecuteFileTm := false; // ION T
   exit;
 end;
 CloseHandle(Pin.hProcess);
 ExecuteFileTm := True;
end;


Наверх

Титульная страница Поиск, карта сайта Написать письмо