![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Не работает Create Process
strong © (2001-09-27 11:17:00)Всем привет!
Пытаюсь запустить 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;
Но программа виснет и ничего не происходит! Если убрать ожидание, то все работает. В чем дело?
Юрий Зотов (2001-11-09 11:23:00) [1]Этот вопрос уже обсуждался. Как выяснилось, проблема - в особенностях инсталляторов, которые создает InstallShield. Чтобы Setup нормально стартовал, не используйте INFINITE, а сделайте, например, так:
while WaitForSingleObject(p.hProcess, 300) = WAIT_TIMEOUT do;
Такой цикл тоже не загружает CPU (вернее, почти не загружает), тоже ожидает завершения процесса, но из ожидания периодически выходит - благодаря чему и удается разблокировать клинч.
AnnaBal (2001-11-08 19:04:00) [2]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.
Digitman (2001-09-28 08:47:00) [3]появление is_set.exe в списке как раз и говорит о том, что CreateProcess() отрабатывает, и это - ответ на твой вопрос. Остальное же сильно зависит от того, что делается в инсталляторе и твоем приложении - они могут и зависеть друг от друга
strong (2001-09-27 15:33:00) [4]Ну так что Мастера, есть решения?
strong (2001-09-27 14:04:00) [5]А вот и может.
Самое интересное, что в списке появляется не Setup.exe, который я вызываю, а какой-то is_set.exe
Короче, я думаю, что сам setup вызывает еще кучу процессов, может в этом все дело?
Digitman (2001-09-27 13:27:00) [6]Ну вот этого, IMHO, не может быть) ...
При "зависании" на Waitforsingleobject(infinite) открой список задач (ALT-CTRL-DEL) и посмотри : процесс, вызванный к выполнению по CreateProcess() должен быть в списке. То, что ты не видишь его визуальные проявления, еще не говорит о том, что он не запущен.
strong (2001-09-27 13:07:00) [7]В том то и дело, что ничего подобного!
Если я ставлю ожидание Waitforsingleobject(infinite), то инсталляция не запускается (это то приложение, которое я собираюсь запустить). А если ставлю напримет Waitforsingleobject(1000), то инсталляция запускается, но только после ожидания, а должна запускаться до него.
Сама create Process выдает вроде Tryue.
Digitman (2001-09-27 12:39:00) [8]Что возвращает Createprocess() ? True или False ?
Инсталляционный процесс реально запускается или нет ?
Если запускается, то - что же ты хочешь ? Waitforsingleobject() будет ждать завершения вызванного инсталляционного процесса столько, сколько он будет продолжаться, вплоть до его завершения (если он вообще завершается у тебя ?). И лишь после этого твоя задача продолжит выполнение со строчки, следующей за Waitforsingleobject() - на то он и Wait !
strong (2001-09-27 12:27:00) [9]Вызываемый процесс длинный - это инсталляция.
p.hprocess содержит 20.
Пока ожидание не прошло,ничего не запускается.
Digitman (2001-09-27 11:25:00) [10]что возвращает Createprocess() ?
чему равен p.hProcess при вызове Waitforsingleobject() ?
Вызываемый процесс - длительный ?