J'ai une application console qui utilise SetConsoleCtrlHandler
pour définir un gestionnaire qui gère et CTRL_CLOSE_EVENT
. Le gestionnaire renvoie simplement TRUE
, ce qui provoque l'apparition d'une boîte de dialogue et invite l'utilisateur à poursuivre l'arrêt ou l'annulation.CtrlHandler n'est pas appelé sur l'événement CTRL_CLOSE_EVENT dans Windows Web Server 2008
Le logiciel fonctionne sous Windows XP SP3 et Windows Web Server 2008 SP2. Sur XP, lorsque l'on clique sur 'X' dans la fenêtre de la console, mon gestionnaire de contrôle est appelé et une invite apparaît comme prévu. Sur Server 2008, la fermeture de la fenêtre de la console n'appelle pas mon gestionnaire de contrôle et l'application se ferme sans invite.
Pour vérifier que le gestionnaire de contrôle est réglé correctement, j'ai ajouté un cas pour CTRL_C_EVENT
. Je peux voir que le code est appelé pour Ctrl-C.
Y a-t-il des différences dans la façon dont les événements de fermeture sont traités dans Server 2008? Il semble qu'ils ne passent pas par les gestionnaires de ctrl du tout.
EDIT: regardant la page MSDN pour SetConsoleCtrlHandler
Je ne trouve aucune information sur CTRL_CLOSE_EVENT
ne sont plus traitées dans Vista et versions ultérieures.
Si vous traitez avec Windows (HWND
) au lieu d'événements console ctrl, est-il possible d'obtenir les messages de fermeture envoyés à la fenêtre de la console et gérer cela?
Ouais, ce comportement a été changé dans Vista. Les programmes ne peuvent plus bloquer l'arrêt. –
Alors, n'y a-t-il plus de notification? Est-il possible que les processus effectuent un nettoyage lorsqu'ils sont fermés comme ça? –
Oui, cela a changé dans Vista (Server 2008); vous ne recevez plus d'événements de déconnexion. Pour ma propre application de console, j'ai créé une fenêtre cachée et elle reçoit à la fois des événements de fermeture et de fermeture de session. – bronekk