Главная страница
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.027 c
8-7563
Help me!!!!!!!1
2003-03-20 16:33
2003.07.03
Как сделать зону рисования больше в TImage.Canvas


14-7593
Leo^Sun
2003-06-14 13:10
2003.07.03
Вывод на экран больших чисел


1-7406
LinOS
2003-06-23 06:33
2003.07.03
В ListBox хочу выделять Item правой кнопкой мыши.


1-7411
Артем К.
2003-06-22 13:12
2003.07.03
Где можно достать нестандартный компонент Grida?


14-7666
INTAARI
2003-06-16 19:22
2003.07.03
Спасибо за DCOM