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

Вниз

Помогите с 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 вся ветка

Форум: "WinAPI";
Текущий архив: 2003.07.03;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.009 c
3-7341
Alek Aaz
2003-06-10 11:02
2003.07.03
Обработка исключительных операций


14-7691
Кен
2003-06-17 03:29
2003.07.03
На чём написан Дельфи. На Си или на Дельфи ?


3-7318
abc
2003-06-08 23:52
2003.07.03
как сделать так что бы при вводе данных в DBGrid первая буква...


1-7421
manumba
2003-06-23 11:23
2003.07.03
Профессиональное использование ООП в Delphi.....литература


6-7567
andrew_snk
2003-04-25 23:36
2003.07.03
Определение заголовка сайта





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