![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| Madest |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 143 Регистрация: 27.11.2003 Где: Городок Репутация: нет Всего: нет |
У меня почему-то при инсталяции некой программы первый раз проскакивает мимо WaitForSingleObject(), а потом когда ставлю поверх - нормально ждет. Почему?
... STARTUPINFO si; si.cb=sizeof(STARTUPINFO); si.lpReserved=NULL; si.lpDesktop=NULL; si.lpTitle=NULL; si.dwFlags=STARTF_USESHOWWINDOW; si.wShowWindow=SW_SHOWNORMAL; si.cbReserved2=0; si.lpReserved2=NULL; static PROCESS_INFORMATION pi; CreateProcess(NULL,"c:\\1\\setup",NULL,NULL,FALSE,0,NULL,NULL,&si,&pi); WaitForSingleObject(pi.hProcess,INFINITE); MessageBox(NULL,"setup","aga",MB_OK); ... нее, никогда оказывается не ждет. Это сообщение отредактировал(а) Madest - 13.5.2004, 12:07 --------------------
|
|||
|
||||
| bel_nikita |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Эксперт Сообщений: 2304 Регистрация: 12.10.2003 Где: Поезд №21/22 ( ст . Прага ) Репутация: 21 Всего: 47 |
Попробуй, но не знаю, поможет ли
|
|||
|
||||
| Madest |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 143 Регистрация: 27.11.2003 Где: Городок Репутация: нет Всего: нет |
Не помогает =(
Это под XP такое. В 2000-м эта же программа нормально себя вела (не замечал во всяком случае). А может это от того что MySQL устанавливаю? Это сообщение отредактировал(а) Madest - 13.5.2004, 15:02 --------------------
|
|||
|
||||
| Madest |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 143 Регистрация: 27.11.2003 Где: Городок Репутация: нет Всего: нет |
В общем, при инсталяции именно MySQL, WaitForSingleObject() не ловит этот процесс. Как это сделать?
--------------------
|
|||
|
||||
| AndyY |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 316 Регистрация: 8.5.2004 Где: СПб Репутация: 2 Всего: 4 |
Инсталлеры часто распаковывают в temp и запускать другой процесс, после чего закрываются.
Так, к примеру, устроен wise. Нужно внимательно посмотреть в таск менеджере, совпадает ли process id инсталлера с возвращенным в startupinfo (после того как wait завершился) |
|||
|
||||
| Madest |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 143 Регистрация: 27.11.2003 Где: Городок Репутация: нет Всего: нет |
Пытаюсь это так ловить его - не выходит =(
HWND hwnd=GetActiveWindow(); LPDWORD lpId; GetWindowThreadProcessId(hwnd,lpId); WaitForSingleObject((HANDLE)lpId,INFINITE); Хотя сам догадываюсь, что нужно ловить хэндл другого (второго) инсталяционного окна, которое выскакивает после первого. Первое закрывается, а инсталяция еще продолжается. Это сообщение отредактировал(а) Madest - 13.5.2004, 17:03 --------------------
|
|||
|
||||
| Madest |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 143 Регистрация: 27.11.2003 Где: Городок Репутация: нет Всего: нет |
Хотя сам догадываюсь, что нужно ловить хэндл другого (второго) инсталяционного окна, которое выскакивает после первого. Первое закрывается, а инсталяция еще продолжается.
--------------------
|
|||
|
||||
| DenDen |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 84 Регистрация: 25.3.2004 Репутация: нет Всего: нет |
А ты в дебаггере проверял. Он точно не NULL??
А еще попробуй флаг STARTF_FORCEONFEEDBACK--может каким-то образом случиться, что процесс либо к моменту занесения еще не запустился, либо в случае перегруженности машины, в процессе проссто поменялось значение дескриптора. Это не так болезненно для процессора. как может показаться на первый взгляд. У меня уже такое бывало. |
|||
|
||||
| mr.DUDA |
|
||||
|
3D-маньяк ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 8244 Регистрация: 27.7.2003 Где: город-герой Минск Репутация: 25 Всего: 232 |
Конечно не будет работать - т.к. ID процесса и хэндл процесса разные вещи !!! Совсем другое дело, если получать потом хэндл процесса по его ID (OpenProcess), либо сделать вот так:
-------------------- ![]() |
||||
|
|||||
| Madest |
|
||||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 143 Регистрация: 27.11.2003 Где: Городок Репутация: нет Всего: нет |
Одолел! Нашел последнее окошко и жду пока его закроют.
В общем, вот код кому интересно: как установить MySQL, создать сервис и запустить его. Юзеру остается только ввести пароль root.
Mr.DUDA, у меня были такие подозрения =) Надо как-нить для общего развития и через SHELLEXECUTEINFO сделать. Cпасибо всем. --------------------
|
||||
|
|||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |