Instructions pour les applications
Les applications s’exécutant sur Windows Vista et Windows Server 2008 doivent respecter ces instructions pour s’assurer que le Gestionnaire de redémarrage peut arrêter et redémarrer les applications si nécessaire pour installer les mises à jour. Les services peuvent utiliser les instructions décrites dans Recommandations pour les services.
Le Gestionnaire de redémarrage interroge les applications graphiques graphiques pour l’arrêt en envoyant une notification WM_QUERYENDSESSION dont le paramètre lParam est défini sur ENDSESSION_CLOSEAPP (0x1). Les applications ne doivent pas s’arrêter lorsqu’elles reçoivent un message WM_QUERYENDSESSION , car une autre application peut ne pas être prête à s’arrêter. Les applications gui doivent écouter le message WM_QUERYENDSESSION et retourner la valeur TRUE si l’application est prête à s’arrêter et à redémarrer. Si aucune application ne retourne la valeur FALSE, le Gestionnaire de redémarrage envoie un message WM_ENDSESSION avec le paramètre lParam défini sur ENDSESSION_CLOSEAPP (0x1) et le paramètre wparam défini sur TRUE. Les applications ne doivent s’arrêter que lorsqu’elles reçoivent le message WM_ENDSESSION . Le Gestionnaire de redémarrage envoie également un message WM_CLOSE pour les applications gui qui ne s’arrêtent pas lors de la réception de WM_ENDSESSION. Si une application gui répond à un message WM_QUERYENDSESSION en retournant la valeur FALSE, l’arrêt est annulé. Toutefois, si l’arrêt est forcé, l’application est arrêtée quoi qu’il en soit.
Lorsqu’une application gui reçoit un message WM_ENDSESSION , l’application doit se préparer à s’arrêter dans le délai spécifié. Au minimum, les applications doivent se préparer en enregistrant les données utilisateur et les informations d’état nécessaires après un redémarrage. Il est recommandé que les applications enregistrent régulièrement les données utilisateur et l’état.
Le Gestionnaire de redémarrage envoie une notification CTRL_C_EVENT aux applications console qui doivent être arrêtées et redémarrées. Lorsqu’une application console reçoit une notification CTRL_C_EVENT , l’application doit prendre les mesures nécessaires pour se préparer à un arrêt dans le délai spécifié. Au minimum, les applications console doivent définir une fonction HandlerRoutine pour gérer la notification CTRL_C_EVENT et enregistrer toutes les données utilisateur et informations d’état qui seront nécessaires après un redémarrage. Il est recommandé que les applications enregistrent régulièrement les données utilisateur et l’état.
Si des applications ne s’arrêtent pas en réponse aux messages d’arrêt, les programmes d’installation peuvent utiliser l’option RmForceShutdown de la fonction RmShutdown pour forcer l’arrêt des applications. Lorsque le programme d’installation spécifie un arrêt forcé, le Gestionnaire de redémarrage tente d’arrêter les applications proprement en envoyant les messages d’arrêt, mais les force à s’arrêter en cas d’échec. Les applications gui et les applications console peuvent être forcées de s’arrêter pour permettre l’installation d’une mise à jour de sécurité critique. Étant donné que cela peut entraîner une perte de données, les applications doivent gérer les messages d’arrêt et s’arrêter correctement si nécessaire.
Les applications doivent s’inscrire pour un redémarrage à l’aide de la fonction RegisterApplicationRestart . Le Gestionnaire de redémarrage ne peut redémarrer que les applications qui ont été inscrites pour le redémarrage. Il s’agit de la seule façon dont le Gestionnaire de redémarrage peut déterminer la commande de ligne de commande à utiliser lors du redémarrage de l’application. Si l’application doit rouvrir avec un état ou des données enregistrés, ces informations doivent être incluses dans la commande de ligne de commande inscrite pour l’application.
Notes
Si l’application redémarrée doit s’exécuter dans le même répertoire que celui dans lequel elle s’est exécutée avant d’être arrêtée, l’application doit enregistrer les informations du répertoire, puis passer au répertoire après le redémarrage.
Notes
La fonction RmRestart ne redémarre pas les applications qui ne s’exécutent pas en tant qu’utilisateur actuellement connecté. Par exemple, la fonction RmRestart ne redémarre pas les applications démarrées avec la commande d’identification qui ne s’exécutent pas en tant qu’utilisateur actuellement connecté. Ces applications doivent être redémarrées manuellement.
Lorsque le Gestionnaire de redémarrage détermine qu’un redémarrage du système est nécessaire pour installer une mise à jour, il n’arrête pas les applications et les services. Au lieu de cela, il laisse cela au programme d’installation de décider quand planifier un redémarrage du système et installer la mise à jour. Les programmes d’installation peuvent réduire l’interruption pour les utilisateurs causée par les mises à jour qui nécessitent un redémarrage du système à l’aide de la fonction ExitWindowsEx avec l’indicateur EWX_RESTARTAPPS ou de la fonction InitiateShutdown avec l’indicateur SHUTDOWN_RESTARTAPPS . L’utilisation de ces indicateurs garantit que les applications inscrites pour le redémarrage sont redémarrées après un redémarrage du système, ce qui réduit l’impact sur l’utilisateur.