Как я могу поймать сбой приложения или выйти в mshtml? - PullRequest
0 голосов
/ 15 июля 2009

Наше приложение использует mshtml. Эта dll заставляет наше приложение некорректно завершать работу из-за известных проблем в mshtml, так как мы не устанавливаем новые браузеры на компьютерах пользователей. Мы просто используем то, что у них уже есть.

SetUnhandledExceptionFilter() не обрабатывает это, равно как и try / catch не блокирует вызовы в mshtml. Фильтр исключений перехватывает другие исключения.

Настройки исключения: /EHa.

Когда я удаленно отлаживаю сбой, я вижу:

необработанное исключение - нарушение прав доступа

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

Что нам нужно сделать, чтобы поймать исключение?


Edit:

Это старая версия IE6.

Ответы [ 2 ]

2 голосов
/ 15 июля 2009

Кажется, что функции MSHTML передают необходимые данные в отдельный поток. Этот отдельный поток обрабатывает ваш запрос, и происходит исключение. Вот почему вы не можете поймать исключение через блок try / catch. Вы должны проверить это в отладчике. Если это так, единственный способ отловить исключения из других потоков - это установить хуки для функций TerminateThread и TerminateProcess. Проверьте класс CApiHook Джеффри Рихтера для этой цели (или других реализаций). Но это сделает вашу программу несовместимой с /NXCOMPAT флагом компилятора.

Ваш второй вариант - установить все важные обновления ОС.

1 голос
/ 16 июля 2009

Почти нет. Это не SetUnhandledExceptionFilter(), а AddVectoredExceptionHandler вы хотите. С учетом сказанного вы можете получить первый выстрел в этом исключении.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...