Estoy escribiendo una aplicación en C# que necesita ejecutarse como un servicio pero también tiene interacción del usuario. Entiendo que los servicios no tienen UI, etc., así que he dividido mi programa en una aplicación de formulario de Windows y un servicio que puede comunicarse entre sí.C# Ejecutar Windows Form Application desde Service (y en Vista)
El problema que tengo es que necesito el servicio para asegurarme de que la aplicación de formularios de Windows esté siempre en ejecución y reiniciarla si no es así. Soy capaz de detectar si se está ejecutando, y reiniciarlo con el siguiente código en Windows 2000/XP:
System.Diagnostics.Process.Start("ExePath");
pero en Vista, se ejecuta el nuevo proceso como un proceso local/Sistema que es invisible a el usuario. ¿Alguien lo esquivo? ¿Hay alguna forma de detectar qué usuario está actualmente conectado y ejecutar el nuevo proceso como ese usuario? No necesito dar cuenta del cambio de usuario rápido en este punto. Algo, cualquier cosa, bastaría.
Le agradecería cualquier ayuda o consejo que tenga sobre el tema.
Necesito aclarar que estoy configurando la opción "Permitir que el servicio interactúe con el escritorio" cuando se instala el servicio. Esto es lo que le permite trabajar en 2000/XP. Sin embargo, Vista todavía tiene el problema antes mencionado.
¿Echo de menos algo? Si tiene un servicio que siempre se está ejecutando ... ¿por qué es importante si su aplicación de formulario de Windows se está ejecutando? – bobwienholt
Porque necesito una forma para que el servicio se comunique directamente con el usuario. Hay muchas razones para esto, pero el ejemplo más básico es para los avisos de actualización. –
Estoy con los demás aquí ... Sospecho que estás tomando el enfoque equivocado para cualquier problema que estés tratando de resolver. Si * debes * tener una UI, entonces probablemente no deberías estar usando un modelo de servicio. Tal vez algo que reside en la bandeja del sistema ...? –