Comment simuler l'arrêt de Windows pour le débogage?
J'ai un problème avec mon application lorsque Windows s'arrête - mon application n'est pas en sortant de bien, entraînant la Fin de la Tâche de la fenêtre affichée. Comment puis-je utiliser le débogueur pour voir ce qu'il se passe?
Est-il un moyen d'envoyer l'arrêt de Windows, ou les message(s) pour mon application, de sorte qu'il pense que Windows est en cours d'arrêt, afin que je puisse voir exactement comment il se comporte?
Vous devez vous connecter pour publier un commentaire.
Il existe un outil nommé Gestionnaire de Redémarrage (rmtool.exe) dans le Logo de Microsoft Outils de Test pour Windows, qui peut être utilisé pour envoyer l'arrêt et le redémarrage des messages à un processus. Logo des outils de test peut être téléchargé ici:
http://download.microsoft.com/download/d/2/5/d2522ce4-a441-459d-8302-be8f3321823c/LogoToolsv1.0.msi
Ensuite, vous pouvez simuler l'arrêt de votre processus:
où [PID] est l'ID de processus. Selon la Vista Logo de Certification des Cas de Test document,
rmtool.exe
, seulementrmlogotest.exe
. J'ai écrit un peu plus surrmlogotest.exe
ailleurs; à lire ce que j'ai écrit, suivre ce lien.rmlogotest.exe
ne envoyer des messages à votre application, et je soupçonne qu'ils sont les mêmes messages quermtool.exe
utilisé pour envoyer, mais je n'ai pas vérifié pour être sûr.Je crois que lorsque Windows est en cours d'arrêt, il envoie un "WM_QueryEndSession" pour toutes les applications. Pour simuler un arrêt de Windows, vous pouvez créer une petite application qui ne fonctionne tout simplement un PostMessage avec ce message à votre demande et de voir ce qui se passe. Windows peut envoyer plus de messages que qu'effectivement la fermeture de votre application (comme WM_CLOSE), mais à chaque fois que votre application reçoit le "WM_QueryEndSession" message cela signifie que votre application est sur le tapis sorti de sous lui.
\n
/équivalents compatibles avec les éditeurs de code.Vous pouvez utiliser le SystemEvents.SessionEnding événement, qui est déclenché lorsqu'un utilisateur se déconnecte ou s'arrête. Soyez prudent lorsque vous utilisez cependant, certaines ressources ne sont pas garantis d'être disponibles. Par exemple, ma candidature besoin de frapper un serveur lorsqu'il était l'arrêt de l'horloge d'un utilisateur (une pointeuse de l'application), mais la carte réseau est parfois déjà désactivé lorsque cet événement se produit. Puisque vous êtes en train de faire le nettoyage, cela devrait fonctionner correctement.
SendMessage peut être utilisé pour envoyer des messages de fenêtre avec des paramètres à une fenêtre.
Envoyer le message
WM_QUERYENDSESSION
avecLPARAM
=ENDSESSION_CLOSEAPP
.L'application doit renvoie 1 (VRAI) pour indiquer qu'il est prêt à arrêter et redémarrer.
Envoyer le message
WM_ENDSESSION
avec LPARAM =ENDSESSION_CLOSEAPP
L'application doit fermer à l'intérieur de la période de temps spécifiée.