2010-05-27 12 views
2

Кто-нибудь знает, как MessageBox (...) может терпеть неудачу?Почему сообщение MessageBox терпит неудачу?

MessageBox(g_hMainhWnd, buffer, "Oops!", MB_OK | MB_ICONERROR); 

ShellExecute(0, "open", "http://intranet/crash_handler.php", NULL, "", SW_SHOWNORMAL); 

Для небольшого контекста, этот код вызывается внутри нашего собственного обработчика исключений, который был зарегистрирован в функции SetUnhandledExceptionFilter()

Большую часть времени, я вижу окно сообщения, а затем запускает веб браузер.

Однако у меня есть exe, который, насколько мне известно, использует этот точный код, и он успешно запускает веб-браузер, но я не вижу это окно в первую очередь.

Благодаря

Tim


Трещины его. Я пробовал сознательно проходить в HWND мусора, и окно сообщения не появилось.

Спасибо, Брайан!

+0

Когда это не удается, что на самом деле происходит? Прерывает ли процесс? Возвращает ли MessageBox 0? Вы можете GetLastError() определить причину? –

+0

К сожалению, у меня больше нет доступа к коду, который построил exe, поэтому я точно не могу отследить его. Спасибо за предложения, хотя. –

ответ

5

Неверная идея, но, возможно, g_hMainhWnd? Посмотрите, работает ли он, когда вы ставите NULL для первого параметра.

Я предлагаю позвонить по телефону GetLastError после вызова и записать вывод в файл. Таким образом, вы можете увидеть, что Windows думает об ошибке. В документации MSDN MessageBox указано, что для этого API он устанавливает GetLastError, и если он сбой, он возвращает ноль.

+0

Да, я думаю, HWND был недействительным - спасибо! –

0

Это распространенная проблема в Windows Mobile, когда ошибка вызывает остановку (что я предполагаю, это то, что происходит в вашем случае, учитывая URL-адрес, который вы собираетесь). Даже если вы поймаете необработанное исключение, вы можете надежно выполнить кучу утверждений до того, как приложение закроется, но MessageBoxes могут отображаться или не отображаться. Они почти всегда отображаются при запуске приложения при отладке через Visual Studio, но они почти никогда не появляются, когда приложение запускается как скомпилированный EXE.

Сложно, если вы дважды вызываете MessageBox в этой ситуации, вызов второй обычно показывает поле (даже в EXE).

Я не знаю, существует ли та же проблема с обычной Windows, но похоже, что вы описываете ту же ситуацию. Завершите угадывание здесь, но возможно, что ОС Windows знает, что приложение, запрашивающее окно с сообщениями, находится в его смертельных муках и разумно игнорирует запрос (в прежние времена умирающие приложения часто использовали, чтобы вызвать шквал «помогите мне» , Я умираю "в сообщениях).

Смежные вопросы