Pouvez-vous afficher une boîte de message (ou toute forme de notification) à partir d'un service Windows? Je ne peux pas le faire fonctionner. J'ai utilisé:
global::System.Windows.Forms.MessageBox.Show("A fatal error occurred. " +
ServiceName + " is now terminating.");
mais cela n'a pas fonctionné et a simplement produit une erreur.
Non, vous ne pouvez pas afficher de boîte de message à partir d'un service. Si vous souhaitez signaler des erreurs, la méthode standard consiste à utiliser le journal des événements .
Pour les types d'interface utilisateur plus "avancés" (pas seulement les rapports d'erreur), cela se fait généralement via une application Windows classique que vous placez dans le dossier de démarrage de l'utilisateur (ou la clé Run dans le registre) et qui communique avec le service via une sorte de mécanisme IPC (.NET remoting, WCF, sockets classiques, canaux nommés, etc.).
Vous pouvez afficher un message d'un service doté de la fonction " WTSSendMessage (...)" (disponible depuis Windows Vista
et Windows Server 2008
), voici un bon article: http://msdn.Microsoft.com/en-us/library/ms683502 (VS.85) .aspx
De Wikipedia :
Bien que les services ne disposent généralement pas d'interface utilisateur, les développeurs peuvent ajouter des formulaires et d'autres composants d'interface utilisateur. Dans ce cas, la case à cocher "Autoriser le service à interagir avec le bureau" doit être cochée dans l'onglet Connexion de la boîte de dialogue Propriétés du service (il convient toutefois de prendre soin de cette approche car cela peut entraîner un risque de sécurité, car tout utilisateur connecté serait en mesure d'interagir avec le service).
Lorsque cette option est activée, vous devriez pouvoir afficher des boîtes de message à partir d’un service.
Autoriser le service à interagir avec le bureau vous aidera à cela à partir de la console Services.msc.
MAIS, c'est une très mauvaise idée. Surtout si vous oubliez de supprimer cette boîte de message ultérieurement. Le service sera suspendu car vous aurez une boîte de message sur laquelle personne ne peut cliquer.