Форум: "WinAPI";
Текущий архив: 2002.01.10;
Скачать: [xml.tar.bz2];
ВнизНе работает Create Process Найти похожие ветки
← →
strong (2001-09-27 11:17) [0]Всем привет!
Пытаюсь запустить Setup написанный на Install Sheld из своей программы и дождаться окончания установки. Делаю так:
procedure TForm1.Button1Click(Sender: TObject);
var
si: TStartupInfo;
p: TProcessInformation;
begin
FillChar(Si,SizeOf(Si),0);
with Si do begin
cb := SizeOf( Si);
dwFlags := STARTF_USESHOWWINDOW;
wShowWindow := 4;
end;
Form1.WindowState:=wsMinimized;
Createprocess(nil,"c:\пример запуска\setup.exe",nil,nil,false,CREATE_DEFAULT_ERROR_MODE,nil,nil,si,p);
Waitforsingleobject(p.hProcess,infinite);
Form1.WindowState:=wsNormal;
end;
Но программа виснет и ничего не происходит! Если убрать ожидание, то все работает. В чем дело?
← →
Digitman (2001-09-27 11:25) [1]что возвращает Createprocess() ?
чему равен p.hProcess при вызове Waitforsingleobject() ?
Вызываемый процесс - длительный ?
← →
strong (2001-09-27 12:27) [2]Вызываемый процесс длинный - это инсталляция.
p.hprocess содержит 20.
Пока ожидание не прошло,ничего не запускается.
← →
Digitman (2001-09-27 12:39) [3]Что возвращает Createprocess() ? True или False ?
Инсталляционный процесс реально запускается или нет ?
Если запускается, то - что же ты хочешь ? Waitforsingleobject() будет ждать завершения вызванного инсталляционного процесса столько, сколько он будет продолжаться, вплоть до его завершения (если он вообще завершается у тебя ?). И лишь после этого твоя задача продолжит выполнение со строчки, следующей за Waitforsingleobject() - на то он и Wait !
← →
strong (2001-09-27 13:07) [4]В том то и дело, что ничего подобного!
Если я ставлю ожидание Waitforsingleobject(infinite), то инсталляция не запускается (это то приложение, которое я собираюсь запустить). А если ставлю напримет Waitforsingleobject(1000), то инсталляция запускается, но только после ожидания, а должна запускаться до него.
Сама create Process выдает вроде Tryue.
← →
Digitman (2001-09-27 13:27) [5]Ну вот этого, IMHO, не может быть) ...
При "зависании" на Waitforsingleobject(infinite) открой список задач (ALT-CTRL-DEL) и посмотри : процесс, вызванный к выполнению по CreateProcess() должен быть в списке. То, что ты не видишь его визуальные проявления, еще не говорит о том, что он не запущен.
← →
strong (2001-09-27 14:04) [6]А вот и может.
Самое интересное, что в списке появляется не Setup.exe, который я вызываю, а какой-то is_set.exe
Короче, я думаю, что сам setup вызывает еще кучу процессов, может в этом все дело?
← →
strong (2001-09-27 15:33) [7]Ну так что Мастера, есть решения?
← →
Digitman (2001-09-28 08:47) [8]появление is_set.exe в списке как раз и говорит о том, что CreateProcess() отрабатывает, и это - ответ на твой вопрос. Остальное же сильно зависит от того, что делается в инсталляторе и твоем приложении - они могут и зависеть друг от друга
← →
AnnaBal (2001-11-08 19:04) [9]Analogichnaja problema. Prichem trebujushaja srochnogo rasreshenija.
Mne nujno zapustit installator JDK, potom popravit koe chto v reestre i eshe odnu programku zapustit. JDK nachimaet rabotat, raspakovywaet svoi faily i ostaetsya viset v spiske sadach, ne rabotaja dalshe. moja programma gluho visnet. Bez Waitforsingleobject rabotaet normalno, no mne to nujno posledovatelno i ostalnoe otrabatyvat.
Pomogite kto znaet, ochen nujno.
← →
Юрий Зотов (2001-11-09 11:23) [10]Этот вопрос уже обсуждался. Как выяснилось, проблема - в особенностях инсталляторов, которые создает InstallShield. Чтобы Setup нормально стартовал, не используйте INFINITE, а сделайте, например, так:
while WaitForSingleObject(p.hProcess, 300) = WAIT_TIMEOUT do;
Такой цикл тоже не загружает CPU (вернее, почти не загружает), тоже ожидает завершения процесса, но из ожидания периодически выходит - благодаря чему и удается разблокировать клинч.
Страницы: 1 вся ветка
Форум: "WinAPI";
Текущий архив: 2002.01.10;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.003 c