Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.07.03;
Скачать: CL | DM;

Вниз

Помогите с WaitForSingleObject   Найти похожие ветки 

 
sunwheel1   (2003-04-28 12:38) [0]

Возникла необходимость запускать из своей программы инсталятор BDE. Взял пример из FAQ`а (код приведен ниже)и столкнулся с проблемой. Файл bde511en.exe запускается, распаковывает во времменый каталог дистрибутив и все на этом заканчивается. Моя программа стоит на строке WaitForSingleObject и ждет когда отработает инсталятор, а инсталятор неизвестно чего ждет. Начинает установку BDE, если принудительно завершить мою программу. Как я понимаю рыть надо в сторону установки каких-то флагов.
Буду признателен за любую подсказку.

Var
si:STARTUPINFO;
pi:PROCESS_INFORMATION;
cmdline:string;
....

ZeroMemory(@si,sizeof(si));
si.cb:=SizeOf(si);
cmdline:="bde511en.exe";
if not CreateProcess( nil, // No module name (use command line).
PChar(cmdline), // Command line.
nil, // Process handle not inheritable.
nil, // Thread handle not inheritable.
False, // Set handle inheritance to FALSE.
0, // No creation flags.
nil, // Use parent"s environment block.
nil, // Use parent"s starting directory.
si, // Pointer to STARTUPINFO structure.
pi ) // Pointer to PROCESS_INFORMATION structure.
then ShowMessage( "CreateProcess "+cmdline+" failed." )
else Begin
WaitForSingleObject( pi.hProcess, INFINITE );
CloseHandle( pi.hProcess );
CloseHandle( pi.hThread );
end;


 
Anet   (2003-04-28 12:51) [1]

Да Delphi7 не всегда корректно справляется с CreateProcess, пытаясь по-видимому дебугить и твой созданный процесс (а может и нет). Запусти свою прогу не из дельфы и посмотри, что получится.
Кстати CloseHandle(pi.hprocess (и hThread)) здесь совсем не к месту.


 
Digitman ©   (2003-04-28 12:54) [2]

ОС какая ? административые права достаточны для выполнения инсталляции ?


 
sunwheel1   (2003-04-28 12:55) [3]

Без Дельфи запускал, тоже самое. :(


 
sunwheel1   (2003-04-28 12:57) [4]

Забыл добавить: OS - Windows 2000, прав достаточно, Delphi 5. Если просто запускать bde511en.exe через проводник, все нормально ставиться.


 
Anet   (2003-04-28 12:58) [5]

Инсталлятор запускается без WaitFor... и CloseHandle ?


 
sunwheel1   (2003-04-28 13:04) [6]

>Anet (28.04.03 12:58)
Запускается.

Но мне необходимо, чтобы моя программа дождалась завершения установки BDE.


 
Anet   (2003-04-28 13:10) [7]

Убери CloseHandle - оставm Wait и попробуй снова


 
sunwheel1   (2003-04-28 13:22) [8]

Anet CloseHandle не успевает отрабатывать, моя программа останавливается на WaitForSingleObject и ждет завершения bde511en.exe. Пытался запускать другие программы вместо "bde511en.exe", все работало нормально, т.е. программа нормально запускалась и после своего завершения, моя программа продолжала работу.


 
Anet   (2003-04-28 14:02) [9]

Понимаешь, насколько я знаю инсталлятор InstallShield используtт системные приложения для работы.
В любом случай CloseHandle - это не верно, система сама освобождает всю память, связанную с процессом. А Closehandle нужно исп-ть после OpenProcess. К тому же после завершения процесса -после Waitfor...-его хэндл уже не имеет смысла.

Я с подобной проблемой столкнулся, когда создавал процесс explorer.exe. В этом случае Waitfor возвращался сранемедленно.


 
jack128 ©   (2003-04-28 16:25) [10]

Anet (28.04.03 14:02)
> В любом случай CloseHandle - это не верно, система сама
> освобождает всю память, связанную с процессом.
Система не освободит память, связанную с процессом, пока программа не закроет Handle


 
Zelius ©   (2003-04-28 17:14) [11]

To Anet (28.04.03 14:02)
вы не правы, 1 - CloseHandle по правилам хорошего тона нужно вызывать и 2 - после завершения программы хендл процесса действителен, по нему можно узнать код завершения процесса - GetExitCodeProcess.



 
Proton ©   (2003-05-01 09:25) [12]

В каталоге
"D:\Program Files\Common Files\Borland Shared\BDE\"
есть файлик bdeinst.cab, внутри его BdeInst.dll внутри его DllRegisterServer. Вызывай и будет тебе счастье.



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

Текущий архив: 2003.07.03;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.02 c
14-7650
Шишкин Илья
2003-06-10 13:38
2003.07.03
Как сделать, чтобы программа работала под DOS?


6-7577
Алексей
2003-04-26 15:19
2003.07.03
послать пакет по IPX


1-7533
Mishenka
2003-06-22 03:02
2003.07.03
Как иконку засунуть в ImageList?


14-7653
Леприкон
2003-06-16 14:00
2003.07.03
Компоненты


14-7719
ZeroDivide
2003-06-10 12:40
2003.07.03
Бесконечная история 1