Pregunta

En versiones anteriores de Windows anteriores a Vista, podía hacer que un servicio de Windows interactuara con el usuario de escritorio que había iniciado sesión actualmente para mostrar fácilmente la información en la pantalla desde el servicio.En Windows Vista, se agregó la sesión 0 por seguridad para aislar los servicios del escritorio.¿Cuál es una forma sencilla de comunicarse entre un servicio y una aplicación que se ejecuta fuera de la sesión 0?Hasta ahora he solucionado este problema usando TCP/IP para comunicarme entre los dos, pero parece una forma un tanto descuidada de hacerlo.

¿Fue útil?

Solución

También puede utilizar memoria compartida o canalización con nombre para facilitar IPC.Conceptualmente esto es similar a TCP/IP, pero no tiene que preocuparse por encontrar un puerto no utilizado.

Debe asegurarse de que los objetos con nombre que cree tengan el prefijo "Global\" para permitir que todas las sesiones puedan acceder a ellos como se describe. aquí.

AFAIK, ya no hay forma de que un servicio interactúe directamente con el escritorio.

Otros consejos

De hecho, por razones de seguridad ya no es posible comunicarse directamente con el "escritorio".De todos modos, ¿qué es exactamente el "escritorio" cuando vives en una máquina con múltiples usuarios activos + sesiones remotas?

La forma general de resolver el problema es utilizar aplicaciones de servicio que se comunican a través de algún mecanismo RPC (TCP/IP, IPC, canales remotos .Net sobre uno de ellos, etc.).Es un poco molesto, pero creo que los beneficios valen la pena el cambio.

Para que el servicio se comunique con el escritorio, prácticamente debe utilizar uno de los mecanismos RPC.El mecanismo de comunicación remota .NET (CanalServidorIpc) no es demasiado difícil de implementar para este propósito.

Además, con .NET, una aplicación de escritorio puede enviar mensajes directamente al servicio con la ServiceController.ExecuteCommand.Estos comandos son recibidos por el servicio a través de ServiceBase.OnCustomCommand.Esto es aún más fácil de hacer y sería todo lo que necesita si controlar el servicio es su único requisito.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top