Поделиться через


Функция RegisterApplicationRecoveryCallback (winbase.h)

Регистрирует активный экземпляр приложения для восстановления.

Синтаксис

HRESULT RegisterApplicationRecoveryCallback(
  [in]           APPLICATION_RECOVERY_CALLBACK pRecoveyCallback,
  [in, optional] PVOID                         pvParameter,
  [in]           DWORD                         dwPingInterval,
  [in]           DWORD                         dwFlags
);

Параметры

[in] pRecoveyCallback

Указатель на функцию обратного вызова восстановления. Дополнительные сведения см. в разделе ApplicationRecoveryCallback.

[in, optional] pvParameter

Указатель на переменную, передаваемую функции обратного вызова. Может иметь значение NULL.

[in] dwPingInterval

Интервал проверки пинга восстановления в миллисекундах. По умолчанию интервал составляет 5 секунд (RECOVERY_DEFAULT_PING_INTERVAL). Максимальный интервал составляет 5 минут. Если указать ноль, используется интервал по умолчанию.

Необходимо вызвать функцию ApplicationRecoveryInProgress в течение указанного интервала, чтобы сообщить ARR, что вы по-прежнему активно восстанавливаетесь; в противном случае WER завершает восстановление. Как правило, восстановление выполняется в цикле, при этом каждая итерация не превышает интервал проверки связи. Каждая итерация выполняет блок работы по восстановлению, за которым следует вызов ApplicationRecoveryInProgress. Так как вы также используете ApplicationRecoveryInProgress для определения того, хочет ли пользователь отменить восстановление, следует учитывать меньший интервал, чтобы не выполнять много работы без необходимости.

[in] dwFlags

Зарезервировано для последующего использования. Задайте нулевое значение.

Возвращаемое значение

Эта функция возвращает S_OK при успешном выполнении или одном из следующих кодов ошибок.

Код возврата Описание
E_FAIL
Внутренняя ошибка; сбой регистрации.
E_INVALIDARG
Интервал проверки связи не может превышать пять минут.

Комментарии

Если приложение обнаруживает необработанное исключение или перестает отвечать на запросы, отчеты об ошибках Windows (WER) вызывает указанный обратный вызов восстановления. Для сохранения данных и сведений о состоянии следует использовать обратный вызов. Эти сведения можно использовать, если вы также вызываете функцию RegisterApplicationRestart для запроса на перезапуск приложения.

WER не будет вызывать обратный вызов восстановления, если установщик хочет обновить компонент вашего приложения. Чтобы сохранить данные и сведения о состоянии в случае обновления, необходимо обрабатывать сообщения WM_QUERYENDSESSION и WM_ENDSESSION . Дополнительные сведения см. в каждом сообщении. Время ожидания ответа на эти сообщения составляет пять секунд. Большая часть доступного времени восстановления находится в WM_CLOSE сообщении, для которого у вас есть 30 секунд.

Консольное приложение, которое можно обновить, использует уведомление CTRL_C_EVENT для запуска восстановления (дополнительные сведения см. в разделе Функция обратного вызова HandlerRoutine ). Время ожидания для завершения обработчика составляет 30 секунд.

Приложениям следует рассмотреть возможность сохранения данных и сведений о состоянии на периодических базах, чтобы сократить время, необходимое для восстановления.

Требования

   
Минимальная версия клиента Windows Vista [только классические приложения]
Минимальная версия сервера Windows Server 2008 [только классические приложения]
Целевая платформа Windows
Header winbase.h (включая Windows.h)
Библиотека Kernel32.lib
DLL Kernel32.dll

См. также

ApplicationRecoveryCallback

ApplicationRecoveryInProgress

RegisterApplicationRestart

Отмена регистрацииApplicationRecoveryCallback