Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2005.10.23;
Скачать: [xml.tar.bz2];

Вниз

Загрузка внешних программ   Найти похожие ветки 

 
Sasha000   (2005-09-30 20:38) [0]

Ниже приведён код который запускает внешнюю прогу и ждёт её завершения. Всё в принципе работает. Только вот не совсеми программами. Мне надо запустить программу установки Setup.exe. При выполнении кода программа установки не появляется, а всё зависает. Короче они друг друга ждут пока кто нибуть закроется. Программа ждёт пока завершится непоявившаяся программа setup завершится, а программа установки не появляется. Но как только я нажимаю снять задачу с программы (насильно закрываю написанное мною прогу), как тут же запускается программа установи. Только теперь мне уже не надо. Мне надо чтобы её не вырубать. Она должна сделать кое какие действия после того, как пройдёт установка.А она виснет. И из-за этого не появляется setup.
Ведать когда прога ждёт завершения другой она зависает. А некоторые внешние приложения не работают когда кто-то висит в системе.
Помогите пожалуйста разобраться. Как сделать так, чтобы прога ждущая окончания работы внешней программы не висела.
Если мне не верите проверте сами этот алгоритм. Запустите программу установки чего либа.

function ExecAndWait(const FileName, Params: ShortString; const WinState: Word): boolean; export;
var
 StartInfo: TStartupInfo;
 ProcInfo: TProcessInformation;
 CmdLine: ShortString;
begin
 { Помещаем имя файла между кавычками, с соблюдением всех пробелов в именах Win9x }
 CmdLine := """ + Filename + "" " + Params;
 FillChar(StartInfo, SizeOf(StartInfo), #0);
 with StartInfo do
 begin
   cb := SizeOf(StartInfo);
   dwFlags := STARTF_USESHOWWINDOW;
   wShowWindow := WinState;
 end;
 Result := CreateProcess(nil, PChar( String( CmdLine ) ), nil, nil, false,
                         CREATE_NEW_CONSOLE or NORMAL_PRIORITY_CLASS, nil,
                         PChar(ExtractFilePath(Filename)),StartInfo,ProcInfo);
 { Ожидаем завершения приложения }
 if Result then
 begin
   WaitForSingleObject(ProcInfo.hProcess, INFINITE);
   { Free the Handles }
   CloseHandle(ProcInfo.hProcess);
   CloseHandle(ProcInfo.hThread);
 end;
end;

......
ExecAndWait(С:\setup.EXE","", SW_SHOWNORMAL );


 
umbra ©   (2005-09-30 21:10) [1]


> CREATE_NEW_CONSOLE


А setup.EXE консольная прога?


 
begin...end ©   (2005-09-30 21:22) [2]

> Sasha000   (30.09.05 20:38)

> Как сделать так, чтобы прога ждущая окончания работы внешней
> программы не висела.

Вынести код ожидания завершения работы внешней программы в дополнительный поток.


 
Sasha000   (2005-10-01 09:06) [3]


> begin...end ©   (30.09.05 21:22) [2]

А как напиши пожалуйста пример. Если можно.


 
Sasha000   (2005-10-01 09:26) [4]

Мне бы хотябы чтобы программа не висело приожидании, а перерисовывалась её главная форма.


 
ssk ©   (2005-10-01 09:33) [5]

> Sasha000   (30.09.05 20:38)  

замени у себя в коде строку WaitForSingleObject(ProcInfo.hProcess, INFINITE);

на

while WaitForSingleObject(ProcInfo.hProcess, 50) = WAIT_TIMEOUT do
   Application.ProcessMessages;


 
Sasha000   (2005-10-01 09:47) [6]


> ssk ©   (01.10.05 09:33) [5]

Спасибо тебе большое пребольшое!!!!!!!
Всё работает. Инсталляция запустилась.
Спасибо!!!!



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

Форум: "Основная";
Текущий архив: 2005.10.23;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.46 MB
Время: 0.041 c
3-1126499470
oleg_p
2005-09-12 08:31
2005.10.23
Не работает ORDER BY


14-1128245552
Андрей В
2005-10-02 13:32
2005.10.23
Разработка ПО для КПК на Delphi2005


14-1127992402
alk20
2005-09-29 15:13
2005.10.23
Помогите программа не работает так как надо из под win 98


14-1128023549
LordOfRock
2005-09-29 23:52
2005.10.23
Что такое SVCHOST.EXE


2-1127915344
Igor_thief
2005-09-28 17:49
2005.10.23
Tnotebook





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский