Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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.084 c
1-1083063501
smolin
2004-04-27 14:58
2004.05.16
Функция выделения подстроки


1-1083610229
apel
2004-05-03 22:50
2004.05.16
использование модуля на С++


14-1082666702
RealRascal
2004-04-23 00:45
2004.05.16
Вон из памяти


7-1081420177
onyx
2004-04-08 14:29
2004.05.16
Работа с именем файла


1-1083148179
jek_
2004-04-28 14:29
2004.05.16
Дата модификации файла





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский