Partager via


Fonction RegisterApplicationRecoveryCallback (winbase.h)

Inscrit le instance actif d’une application pour la récupération.

Syntaxe

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

Paramètres

[in] pRecoveyCallback

Pointeur vers la fonction de rappel de récupération. Pour plus d’informations, consultez ApplicationRecoveryCallback.

[in, optional] pvParameter

Pointeur vers une variable à passer à la fonction de rappel. Peut être NULL.

[in] dwPingInterval

Intervalle ping de récupération, en millisecondes. Par défaut, l’intervalle est de 5 secondes (RECOVERY_DEFAULT_PING_INTERVAL). L’intervalle maximal est de 5 minutes. Si vous spécifiez zéro, l’intervalle par défaut est utilisé.

Vous devez appeler la fonction ApplicationRecoveryInProgress dans l’intervalle spécifié pour indiquer à ARR que vous êtes toujours en cours de récupération active ; sinon, WER met fin à la récupération. En règle générale, vous effectuez une récupération dans une boucle, chaque itération ne dure pas plus longtemps que l’intervalle ping. Chaque itération effectue un bloc de travail de récupération suivi d’un appel à ApplicationRecoveryInProgress. Étant donné que vous utilisez également ApplicationRecoveryInProgress pour déterminer si l’utilisateur souhaite annuler la récupération, vous devez envisager un intervalle plus petit, de sorte que vous n’effectuez pas beaucoup de travail inutilement.

[in] dwFlags

Réservé pour un usage futur. Définit la valeur zéro.

Valeur retournée

Cette fonction retourne S_OK sur la réussite ou l’un des codes d’erreur suivants.

Code de retour Description
E_FAIL
Erreur interne ; échec de l’inscription.
E_INVALIDARG
L’intervalle ping ne peut pas être supérieur à cinq minutes.

Remarques

Si l’application rencontre une exception non prise en charge ou ne répond plus, Rapport d'erreurs Windows (WER) appelle le rappel de récupération spécifié. Vous devez utiliser le rappel pour enregistrer les données et les informations d’état. Vous pouvez utiliser les informations si vous appelez également la fonction RegisterApplicationRestart pour demander que WER redémarre l’application.

WER n’appellera pas votre rappel de récupération si un programme d’installation souhaite mettre à jour un composant de votre application. Pour enregistrer les données et les informations d’état dans le cas de mise à jour, vous devez gérer les messages WM_QUERYENDSESSION et WM_ENDSESSION . Pour plus d’informations, consultez chaque message. Le délai d’attente pour répondre à ces messages est de cinq secondes. La plupart du temps de récupération disponible se trouve dans le message WM_CLOSE pour lequel vous disposez de 30 secondes.

Une application console qui peut être mise à jour utilise la notification CTRL_C_EVENT pour lancer la récupération (pour plus d’informations, consultez la fonction de rappel HandlerRoutine ). Le délai d’expiration du gestionnaire est de 30 secondes.

Les applications doivent envisager d’enregistrer des données et des informations d’état sur des bases périodiques afin de réduire la durée nécessaire à la récupération.

Configuration requise

   
Client minimal pris en charge Windows Vista [applications de bureau uniquement]
Serveur minimal pris en charge Windows Server 2008 [applications de bureau uniquement]
Plateforme cible Windows
En-tête winbase.h (inclure Windows.h)
Bibliothèque Kernel32.lib
DLL Kernel32.dll

Voir aussi

ApplicationRecoveryCallback

ApplicationRecoveryInProgress

RegisterApplicationRestart

UnregisterApplicationRecoveryCallback