Использование WER
Начиная с Windows Vista, Windows по умолчанию предоставляет отчеты об ошибках сбоя, сбоях и сбоях ядра, не требуя внесения изменений в приложение. При необходимости в отчете будут содержаться сведения о дампе минидампов и дампах кучи. Вместо этого приложения используют API WER для отправки отчетов о проблемах, относящихся к приложениям, в корпорацию Майкрософт.
Так как Windows автоматически сообщает об необработанных исключениях, приложение не должно обрабатывать неустранимые исключения. Если процесс сбоя или не отвечает является интерактивным, WER отображает пользовательский интерфейс, информирующий пользователя о проблеме. Приложение считается неотвечающим, если оно не отвечает на сообщения Windows в течение пяти секунд, пока пользователь пытается взаимодействовать с приложением.
Ниже приведены шаги, которые выполняются в случае сбоя приложения, отсутствия ответа или сбоя ядра.
- Возникает проблемное событие.
- Операционная система вызывает WER.
- WER собирает данные, создает отчет и запрашивает у пользователя согласие (при необходимости).
- WER отправляет отчет в корпорацию Майкрософт (Watson Server), если пользователь предоставил согласие.
- Если сервер Watson запрашивает дополнительные данные, WER собирает данные и запрашивает согласие пользователя (при необходимости).
- Если приложение зарегистрировано для восстановления и перезапуска, WER выполняет зарегистрированные функции обратного вызова, пока данные сжимаются и отправляются в корпорацию Майкрософт (если пользователь согласился).
- Если корпорация Майкрософт может получить ответ на эту проблему, пользователь получает уведомление.
Приложения могут использовать следующие функции для настройки содержимого отчета, отправляемого в корпорацию Майкрософт. Функции регистрации сообщают WER включить определенные файлы и блоки памяти в создаваемый отчет об ошибках.
- WerRegisterFile
- WerRegisterMemoryBlock
- WerSetFlags
- WerUnregisterFile
- WerUnregisterMemoryBlock
- WerGetFlags
Ниже показано, как приложения могут получить отчет об ошибках для неустранимого состояния ошибки.
- Возникает неустранимое событие проблемы.
- Приложение распознает событие и использует следующую последовательность вызовов функций для создания отчета.
- Вызовите функцию WerReportCreate , чтобы создать отчет.
- Вызовите функцию WerReportSetParameter , чтобы задать параметры отчета.
- Вызовите функцию WerReportAddFile , чтобы добавить файлы в отчет.
- Вызовите функцию WerReportAddDump , чтобы добавить минидамп в отчет (при необходимости).
- Вызовите функцию WerReportSubmit для отправки отчета.
- Вызовите WerReportCloseHandle , чтобы освободить ресурсы.
- В зависимости от конкретных параметров, используемых при вызове функций на шаге 2, WER завершит создание отчетов об ошибках. WER гарантирует, что отчеты выполняются в соответствии с политиками, установленными пользователем. Например, WER отправляет отчет в корпорацию Майкрософт, помещает отчет в очередь и показывает пользователю соответствующие пользовательские интерфейсы.
Чтобы исключить приложение из отчетов об ошибках Windows, используйте функцию WerAddExcludedApplication . Чтобы восстановить отчеты об ошибках для приложения, используйте функцию WerRemoveExcludedApplication .
Приложение может использовать восстановление и перезапуск приложения для сохранения данных и сведений о состоянии перед завершением работы приложения из-за необработанного исключения или при остановке ответа приложения. Приложение также перезапускается при запросе. Дополнительные сведения см. в разделе Восстановление и перезапуск приложений.
Приложение может сообщить о сбое, вызвав функцию ReportFault . Однако не следует использовать функцию ReportFault , если у вас нет очень конкретных требований, которые не могут быть выполнены поведением операционной системы по умолчанию в отчетах об ошибках.
Если отчеты об ошибках включены, система отображает для пользователя диалоговое окно с сообщением о том, что приложение столкнулось с проблемой и закроется. Если в ключе HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\AeDebug настроен отладчик, пользователю предоставляется возможность запуска отладчика. Пользователю также предоставляется возможность отправить отчет в корпорацию Майкрософт. Если пользователь отправляет отчет, система отображает другое диалоговое окно с благодарностью за отчет и ссылкой на дополнительные сведения.
Система отчетов об ошибках поддерживает следующие режимы работы.
Режим работы | Описание |
---|---|
Отчеты об общей памяти | Если контекст безопасности приложения совпадает с контекстом безопасности вошедшего в систему пользователя, система отчетов об ошибках использует блок общей памяти для обмена данными. Этот режим нельзя использовать с режимом отчетов манифеста. |
Отчеты о манифесте | Если контекст безопасности приложения отличается от контекста безопасности вошедшего в систему пользователя, система отчетов об ошибках использует файл для обмена данными. Этот режим также используется для создания отчетов о неотвеченных приложениях и сбоях ядра. Этот режим нельзя использовать с режимом создания отчетов в общей памяти. |
Интернет-отчеты | Система отчетов об ошибках отправляет все данные в корпорацию Майкрософт через Интернет. Это режим работы по умолчанию. Его нельзя использовать в режиме корпоративной отчетности. Этот режим используется, если администратор не указал корпоративный путь отправки. |
Корпоративная отчетность | Система отчетов об ошибках отправляет все данные в общую папку, а не отправляет их непосредственно в корпорацию Майкрософт. Это позволяет корпоративным ИТ-менеджерам просматривать данные перед их отправкой в корпорацию Майкрософт. Этот режим используется при наличии корпоративного пути отправки, указанного администратором. Его нельзя использовать в режиме интернет-отчетов. |
Отчеты без головы | Система отчетов об ошибках не будет отображать диалоговые окна для пользователя. Это позволяет ИТ-менеджерам организации в любое время собирать отчеты об ошибках от своих сотрудников. Этот режим используется, когда администратор включает отчеты, но уведомление отключено. Его можно использовать только в режиме корпоративной отчетности. |
Чтобы исключить приложение из отчетов об ошибках, используйте функцию AddERExcludedApplication .