| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Общие вопросы > WaitForSingleObject |
| Автор: Madest 13.5.2004, 12:05 |
| У меня почему-то при инсталяции некой программы первый раз проскакивает мимо 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); ... нее, никогда оказывается не ждет. |
| Автор: bel_nikita 13.5.2004, 14:08 | ||
Попробуй, но не знаю, поможет ли
|
| Автор: Madest 13.5.2004, 14:58 |
| Не помогает =( Это под XP такое. В 2000-м эта же программа нормально себя вела (не замечал во всяком случае). А может это от того что MySQL устанавливаю? |
| Автор: Madest 13.5.2004, 15:17 |
| В общем, при инсталяции именно MySQL, WaitForSingleObject() не ловит этот процесс. Как это сделать? |
| Автор: AndyY 13.5.2004, 16:33 |
| Инсталлеры часто распаковывают в temp и запускать другой процесс, после чего закрываются. Так, к примеру, устроен wise. Нужно внимательно посмотреть в таск менеджере, совпадает ли process id инсталлера с возвращенным в startupinfo (после того как wait завершился) |
| Автор: Madest 13.5.2004, 16:45 |
| Пытаюсь это так ловить его - не выходит =( HWND hwnd=GetActiveWindow(); LPDWORD lpId; GetWindowThreadProcessId(hwnd,lpId); WaitForSingleObject((HANDLE)lpId,INFINITE); Хотя сам догадываюсь, что нужно ловить хэндл другого (второго) инсталяционного окна, которое выскакивает после первого. Первое закрывается, а инсталяция еще продолжается. |
| Автор: Madest 13.5.2004, 17:03 |
| Хотя сам догадываюсь, что нужно ловить хэндл другого (второго) инсталяционного окна, которое выскакивает после первого. Первое закрывается, а инсталяция еще продолжается. |
| Автор: DenDen 13.5.2004, 19:36 |
| А ты в дебаггере проверял. Он точно не NULL?? А еще попробуй флаг STARTF_FORCEONFEEDBACK--может каким-то образом случиться, что процесс либо к моменту занесения еще не запустился, либо в случае перегруженности машины, в процессе проссто поменялось значение дескриптора. Это не так болезненно для процессора. как может показаться на первый взгляд. У меня уже такое бывало. |
| Автор: mr.DUDA 14.5.2004, 10:20 | ||||
Конечно не будет работать - т.к. ID процесса и хэндл процесса разные вещи !!! Совсем другое дело, если получать потом хэндл процесса по его ID (OpenProcess), либо сделать вот так:
|
| Автор: Madest 14.5.2004, 10:49 | ||||
| Одолел! Нашел последнее окошко и жду пока его закроют. В общем, вот код кому интересно: как установить MySQL, создать сервис и запустить его. Юзеру остается только ввести пароль root.
Mr.DUDA, у меня были такие подозрения =) Надо как-нить для общего развития и через SHELLEXECUTEINFO сделать. Cпасибо всем. |