2010-04-16 3 views

Répondre

34

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

Windows Les applications de service s'exécutent dans une station de fenêtre différente de la station interactive de l'utilisateur connecté. Une station de fenêtre 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 générées à partir d'une application de service Windows ne seront pas visibles et votre programme peut cesser de répondre. De même, les messages d'erreur doivent être consignés dans le journal des événements Windows plutôt que dans l'interface utilisateur.

Les classes de service Windows prises en charge par le .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 de Windows SDK. L'interaction du service Windows avec l'utilisateur ou d'autres stations doit être soigneusement conçue pour inclure des scénarios tels que l'absence d'utilisateur connecté ou l'utilisateur ayant 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 s'interfacer avec le service, car le service ne peut pas avoir directement une icône dans la barre d'état système.

How can I make a .NET Windows Forms application that only runs in the System Tray?

et

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

9

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

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

Questions connexes