Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.05.16;
Скачать: CL | DM;

Вниз

Как отследить окончание работы внешней программы   Найти похожие ветки 

 
Бульбаш   (2004-04-29 11:20) [0]

Запускаю через winEXEC внешнюю процедуру (конвертер БД не имеющий соб.окна). Перед стартом запускаю анимашку, после тушу:
Animate.Visible:=True;   Animate.Active:=True;
winEXEC("ora2cl_srv.exe config.xml",sw_restore);
Animate.Active:=False;  Animate.Visible:=False;
Анимашка запускается, конвертер работает. После остановки анимации процесс не заканчивается (пытаюсь вывести log в мемо и вижу что процесс еще идет). Как корректнее отследить окончание работы внеш. проги и повесить выкл. анимации на это событие?


 
Sam Stone ©   (2004-04-29 11:43) [1]

Либо лови исчезновение процесса, либо используй CreateProcess и WaitForSingleObject

 si : Tstartupinfo;
 p  : Tprocessinformation;
begin
FillChar( Si, SizeOf( Si ) , 0 );
with Si do begin
 cb := SizeOf( Si);
 dwFlags := startf_UseShowWindow;
 wShowWindow := 4;
end;
Createprocess(nil,<Путь>,nil,nil,false,Create_default_error_mode,nil,nil,si,p);
Waitforsingleobject(p.hProcess,infinite);


 
Юрий Зотов ©   (2004-04-29 12:03) [2]

> Sam Stone ©   (29.04.04 11:43) [1]

Все замечательно, но только:
- startf_UseShowWindow и wShowWindow - лишнее;
- Create_default_error_mode - тоже лишнее;
- нет CloseHandle для потока и процесса.

> Бульбаш   (29.04.04 11:20)

procedure LaunchAndWait(СmdLine: string; Dir: string = "");
var
 P: PChar;
 SI: TStartupInfo;
 PI: TProcessInformation;
begin
 if Dir = "" then P := nil else P := PChar(Dir);
 ZeroMemory(@SI, SizeOf(SI));
 SI.cb := SizeOf(SI);
 Win32Check(CreateProcess(nil, PChar(CmdLine), nil, nil, False, 0, nil, P, SI, PI));
 CloseHandle(PI.hThread);
 WaitForSingleObject(PI.hProcess, INFINITE);
 CloseHandle(PI.hProcess)
end;


 
Бульбаш   (2004-04-29 12:11) [3]

Когда искал в хелпе функцию для запуска вн.программ нашел только winEXEC, а на Createprocess была тока пустая ссылка. А через него работает действительно отлично, попутно решилось еще пару проблем, большой спасиб Sam Stone.


 
Тимохов ©   (2004-04-29 12:18) [4]


> решилось еще пару проблем, большой спасиб Sam Stone.

имхо большое спасибо нужно говорить Юрию Зотову, т.к. у sam stone не совсем корретный код.


 
Бульбаш   (2004-04-29 12:22) [5]

Вот увидел и второй вариант, рассмотрю все, так как учится никогда не поздно.


 
Бульбаш   (2004-04-29 12:34) [6]

> Юрий Зотов. У меня нет описания CreateProcess, не могли бы вы пояснить мне назначение второго параметра Dir вашей функции?


 
Рамиль ©   (2004-04-29 12:36) [7]


> Бульбаш   (29.04.04 12:34) [6]

http://www.delphiworld.ru/index.php?stat&stat=10


 
Тимохов ©   (2004-04-29 12:38) [8]


> Бульбаш   (29.04.04 12:34) [6]

Все описание тут
msdn.microsoft.com далее library


 
Юрий Зотов ©   (2004-04-29 13:02) [9]

> Бульбаш   (29.04.04 12:34) [6]

Описание CreateProcess есть в справке API. Если Вы делали полную установку Delphi, то эта справка у Вас есть. Вызывается она из меню Delphi (Help - Windows SDK).

Параметр Dir определяет стартовый каталог запускаемой программы. Если он не указан или задан пустой строкой, то ее стартовым каталогом будет текущий на момент запуска.


 
Бульбаш   (2004-04-29 13:12) [10]

Всем большое спасибо :)



Страницы: 1 вся ветка

Текущий архив: 2004.05.16;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.049 c
3-1082106946
Smile))
2004-04-16 13:15
2004.05.16
Конвертация БД


3-1082696901
WondeRu
2004-04-23 09:08
2004.05.16
Высота строк в DBGrid!


14-1082914716
Knight
2004-04-25 21:38
2004.05.16
FAQ, примеры кода, статьи и прочее...


1-1083078445
er
2004-04-27 19:07
2004.05.16
Загрузка jpg картинки из ресурсов.


1-1083230319
Петя
2004-04-29 13:18
2004.05.16
Автоскрол в TRichEdit