¿Hay consideraciones especiales para que un servicio de Windows envíe mensajes a las ventanas de los usuarios?

StackOverflow https://stackoverflow.com/questions/615195

Pregunta

Tengo que escribir una aplicación de servicio de Windows (sin GUI) que monitoreará un evento, y si ocurre, enviará un mensaje estándar de Windows a una aplicación. El identificador de la aplicación se le dará al servicio mediante una DLL que luego se descargará, por lo que un mensaje de Windows es la forma en que deseamos usar.

Sin embargo, la pregunta es si el servicio necesita hacer algo especial para usar SendMessage en el identificador de la ventana, dado que podría estar en una pantalla diferente o algo en Vista. ¿Es esto posible? De ser así, ¿qué debo hacer, por favor?

¿Fue útil?

Solución

Aislamiento de privilegios de interfaz de usuario (UIPI):

  

Microsoft Windows Vista y posterior.   El envío de mensajes está sujeto al usuario   Aislamiento de privilegios de interfaz (UIPI).   El hilo de un proceso puede enviar   mensajes solo a colas de mensajes de   hilos en procesos de menor o   nivel de integridad igual.

Fuente

Puede leer sobre Aislamiento de privilegios de interfaz de usuario (UIPI) aquí .

Para evitar esto, puede establecer uiAccess en verdadero en su archivo de manifiesto. También debe asegurarse de que su aplicación esté firmada mediante Authenticode con un certificado de una autoridad de firma como VeriSign. Esto puede ser bastante costoso.


Aislamiento de sesión 0:

También creo que no se puede llamar a SendMessage entre sesiones. Entonces, si tiene un servicio ejecutándose en la sesión 0, necesita encontrar otro medio para comunicarse con su proceso que se ejecute en una sesión > 0. Ejemplo: a través de la tubería.

En Windows Vista, Windows 2008 Server y posterior todos los servicios se ejecutan en la sesión 0, y todas las aplicaciones que inicias se ejecutan en la sesión > 0. Esto se llama aislamiento de la sesión 0. Aquí hay un buen documento que tiene información sobre el aislamiento de la sesión 0 .

Si no tiene acceso a la fuente del programa al que desea enviar mensajes, puede solucionarlo creando una aplicación que se comunique con su servicio y actúe como un proxy para transmitir el mensaje a la aplicación en Es la misma sesión.


En general :

Si desarrolla su aplicación en versiones anteriores a Vista y funciona bien. Hay una posibilidad muy alta de que se rompa en Vista.

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