web-dev-qa-db-fra.com

Comment puis-je afficher une icône de la barre d'état système pour le service de fenêtre C #.?

Comment puis-je afficher une icône de la barre d'état système pour le service de fenêtre C #.?

38
Ashish Ashu

Les services s'exécutent dans une station Windows différente de celle de l'utilisateur connecté, vous ne pouvez donc pas avoir d'icône de barre d'état système pour eux. De https://docs.Microsoft.com/en-us/dotnet/framework/windows-services/introduction-to-windows-service-applications :

Les applications de service Windows s'exécutent dans une station Windows différente de la station interactive de l'utilisateur connecté. Une station Windows est un objet sécurisé qui contient un Presse-papiers, un ensemble d'atomes globaux et un groupe d'objets de bureau. Étant donné que la station du service Windows n'est pas une station interactive, les boîtes de dialogue déclenchées à partir d'une application de service Windows ne seront pas visibles et peuvent provoquer votre programme à cesser de répondre. De même, les messages d'erreur doivent être enregistrés dans le journal des événements Windows plutôt que déclenchés dans l'interface utilisateur.

Les classes de service Windows prises en charge par .NET Framework ne prennent pas en charge l'interaction avec les stations interactives, c'est-à-dire l'utilisateur connecté. Le .NET Framework n'inclut pas non plus les classes qui représentent les stations et les bureaux. Si votre service Windows doit interagir avec d'autres stations, vous devrez accéder à l'API Windows non gérée. Pour plus d'informations, consultez la documentation du SDK Windows.

L'interaction du service Windows avec l'utilisateur ou d'autres stations doit être soigneusement conçue pour inclure des scénarios tels qu'il n'y a aucun utilisateur connecté ou que l'utilisateur ait un ensemble inattendu d'objets de bureau. Dans certains cas, il peut être plus approprié d'écrire une application Windows qui s'exécute sous le contrôle de l'utilisateur.

Voici quelques liens sur la façon d'écrire dans la barre d'état système. Vous aurez besoin d'une autre application pour interfacer avec le service, car le service ne peut pas avoir directement d'icône dans la barre d'état système.

Comment puis-je créer une application Windows Forms .NET qui ne s'exécute que dans la barre d'état système?

et

http://msdotnetsupport.blogspot.com/2008/02/cnet-application-windows-system-tray.html

35
kemiller2002

Vous ne pouvez pas, pas directement, car le service Windows démarre nécessairement lorsque la machine démarre, pas lorsqu'un utilisateur se connecte. Le service s'exécutera également dans un contexte différent, probablement en tant qu'utilisateur différent.

Ce que vous pouvez faire est d'écrire un "contrôleur" basé sur la barre d'état système qui interagit avec le service.

12
Bevan