2010-04-16 41 views

Respuesta

34

Los servicios se ejecutan en una estación de ventana diferente que el usuario que ha iniciado sesión, por lo que no puede tener un icono de bandeja de sistema para ellos. De https://docs.microsoft.com/en-us/dotnet/framework/windows-services/introduction-to-windows-service-applications:

Las aplicaciones de servicio de Windows se ejecutan en una estación de ventana diferente de la estación interactiva del usuario que ha iniciado sesión. Una estación de ventana es un objeto seguro que contiene un Portapapeles, un conjunto de átomos globales y un grupo de objetos de escritorio. Debido a que la estación del servicio de Windows no es una estación interactiva, los cuadros de diálogo generados desde una aplicación de servicio de Windows no se verán y pueden hacer que su programa deje de responder. Del mismo modo, los mensajes de error deben registrarse en el registro de eventos de Windows en lugar de aparecer en la interfaz de usuario.

Las clases de servicio de Windows compatibles con .NET Framework no admiten la interacción con estaciones interactivas, es decir, el usuario que ha iniciado sesión. .NET Framework tampoco incluye clases que representan estaciones y escritorios. Si su servicio de Windows debe interactuar con otras estaciones, necesitará acceder a la API de Windows no administrada. Para obtener más información, consulte la documentación de Windows SDK.

La interacción del servicio de Windows con el usuario u otras estaciones debe diseñarse cuidadosamente para incluir escenarios como que no haya ningún usuario conectado o que el usuario tenga un conjunto inesperado de objetos de escritorio. En algunos casos, puede ser más apropiado escribir una aplicación de Windows que se ejecute bajo el control del usuario.

Aquí hay un par de enlaces sobre cómo escribir en la bandeja del sistema. Necesitará otra aplicación para interactuar con el servicio, ya que el servicio no puede tener un ícono directamente en la bandeja del sistema.

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

y

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

9

No puede, no directamente, porque el servicio de Windows necesariamente se iniciará cuando la máquina lo haga, no cuando un usuario inicie sesión. El servicio también se ejecutará en un contexto diferente, probablemente como un usuario diferente.

Lo que puede hacer es escribir un "controlador" basado en la bandeja del sistema que interactúa con el servicio.

Cuestiones relacionadas