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 分です。 0 を指定すると、既定の間隔が使用されます。
指定した間隔で ApplicationRecoveryInProgress 関数を呼び出して、まだアクティブに回復していることを ARR に示す必要があります。それ以外の場合、WER は復旧を終了します。 通常、ループ内で復旧を実行し、各イテレーションが ping 間隔を超えなくなります。 各イテレーションでは、復旧作業ブロックの後に ApplicationRecoveryInProgress の呼び出しが実行されます。 また、ApplicationRecoveryInProgress を使用してユーザーが回復を取り消すかどうかを判断するため、より少ない間隔を考慮する必要があるため、多くの作業を不必要に実行しないようにしてください。
[in] dwFlags
将来利用するために予約されています。 0 に設定します。
戻り値
この関数は、成功 したS_OK 、または次のいずれかのエラー コードを返します。
リターン コード | 説明 |
---|---|
|
内部エラー。登録に失敗しました。 |
|
ping 間隔は 5 分を超えることはできません。 |
解説
アプリケーションで未処理の例外が発生した場合、または応答しなくなる場合は、Windows エラー報告 (WER) によって指定された回復コールバックが呼び出されます。 コールバックを使用して、データと状態の情報を保存する必要があります。 この情報は、 RegisterApplicationRestart 関数を呼び出して、WER によるアプリケーションの再起動を要求する場合にも使用できます。
インストーラーがアプリケーションのコンポーネントを更新する場合、WER は回復コールバックを呼び出しません。 更新ケースでデータと状態情報を保存するには、 WM_QUERYENDSESSION メッセージと WM_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 |