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

恢复 ping 间隔(以毫秒为单位)。 默认情况下,间隔为 5 秒 (RECOVERY_DEFAULT_PING_INTERVAL) 。 最大间隔为 5 分钟。 如果指定零,则使用默认间隔。

必须在指定的时间间隔内调用 ApplicationRecoveryInProgress 函数,以向 ARR 指示你仍在主动恢复;否则,WER 将终止恢复。 通常,在循环中执行恢复,每次迭代的持续时间不超过 ping 间隔。 每次迭代执行一个恢复工作块,然后调用 ApplicationRecoveryInProgress。 由于还使用 ApplicationRecoveryInProgress 来确定用户是否要取消恢复,因此应考虑较小的间隔,这样就不会不必要地执行大量工作。

[in] dwFlags

保留供将来使用。 设置为零。

返回值

此函数返回 成功时S_OK 或以下错误代码之一。

返回代码 说明
E_FAIL
内部错误;注册失败。
E_INVALIDARG
ping 间隔不能超过五分钟。

注解

如果应用程序遇到未经处理的异常或变得无响应,Windows 错误报告 (WER) 调用指定的恢复回调。 应使用回调来保存数据和状态信息。 如果还调用 RegisterApplicationRestart 函数来请求 WER 重启应用程序,则可以使用该信息。

如果安装程序想要更新应用程序的组件,WER 不会调用恢复回调。 若要在更新案例中保存数据和状态信息,应处理 WM_QUERYENDSESSIONWM_ENDSESSION 消息。 有关详细信息,请参阅每条消息。 响应这些消息的超时为 5 秒。 大部分可用恢复时间都位于有 30 秒 的WM_CLOSE 消息中。

可更新的控制台应用程序使用CTRL_C_EVENT通知启动恢复 (有关详细信息,请参阅 HandlerRoutine 回调函数) 。 处理程序完成的超时为 30 秒。

应用程序应考虑定期保存数据和状态信息,以缩短恢复所需的时间。

要求

   
最低受支持的客户端 Windows Vista [仅限桌面应用]
最低受支持的服务器 Windows Server 2008 [仅限桌面应用]
目标平台 Windows
标头 winbase.h (包括 Windows.h)
Library Kernel32.lib
DLL Kernel32.dll

另请参阅

ApplicationRecoveryCallback

ApplicationRecoveryInProgress

RegisterApplicationRestart

UnregisterApplicationRecoveryCallback