Форум: "Основная";
Текущий архив: 2004.05.16;
Скачать: [xml.tar.bz2];
ВнизКак отследить окончание работы внешней программы Найти похожие ветки
← →
Бульбаш (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;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.03 c