2009-12-19 16 views
0

Je développe un service Windows en .NET 3.5 en C#. Ce service est utilisé pour invoquer périodiquement un formulaire Windows. Maintenant je voudrais accrocher un événement au service de sorte que lorsque l'utilisateur essaie d'arrêter le système, alors le formulaire de fenêtres apparaîtra, empêchant le processus d'arrêt. L'utilisateur peut alors uniquement arrêter le système via l'application Windows.Appeler une application Windows à partir d'un service Windows à l'arrêt du système

Existe-t-il un moyen de le faire dans un service Windows?

Modifier

Je veux que cela soit fait dans Win 2000 et Win XP.

Merci

Répondre

2

Les services ne doivent pas interagir avec la session utilisateur. Dans Vista et Win7, c'est en fait interdit. La bonne façon d'interagir avec la session utilisateur est d'avoir une application dans la session qui communique avec le service, de sorte que votre approche pour créer un service qui démarre périodiquement un formulaire est défectueuse. Prévenir l'arrêt du système semble tout aussi mauvais, et encore Win7 écrasera votre application avec un écran sombre suggérant à l'utilisateur de tuer le vandale (c'est l'appp se conduisant mal, le vôtre).

Les applications légitimes qui modifient l'expérience utilisateur comme vous le suggérez ont les API appropriées, comme les remplacements de shell, par exemple.

+0

Votre application faisant partie de la paire de services/applications peut répondre aux événements d'arrêt, http://msdn.microsoft.com/en-us/library/aa376890(VS.85).aspx. Pas le service. Considérez le cas où aucun utilisateur n'est connecté mais que le service est en cours d'exécution. Ou lorsqu'il y a plusieurs utilisateurs connectés sur des services de terminaux distants. –

+0

Et s'il est vrai qu'un service peut également recevoir des notifications d'arrêt, voir http://msdn.microsoft.com/en-us/library/ms685058(VS.85).aspx, il ne doit pas afficher de boîtes de dialogue pour l'utilisateur. –

+1

Vous pouvez également rencontrer des problèmes lors de l'exécution d'un nouveau programme lors de l'arrêt ... si vous avez déjà essayé d'exécuter un programme après avoir arrêté, vous obtenez le message "Impossible de terminer la requête: arrêt en cours". Donc, il peut y avoir certaines restrictions en place. –