Pregunta

Tengo un servicio de Windows que quiero ejecutar periódicamente un programa externo. Actualmente estoy haciendo esto de la forma habitual

Process program = Process.Start(@"C:\mpewatch\db_parameters\DBParameters.exe");

Esto no parece estar funcionando. Estoy ejecutando esto desde un hilo separado que se inicia en el manejador de OnStart de mi servicio. ¿Hay algún problema conceptual con esto? ¿No es posible ejecutar programas externos de un servicio como éste?

¿Fue útil?

Solución

Su pregunta no indicaba el sistema operativo.

En Windows XP, puede configurar su servicio de Windows para interactuar con el escritorio, abra el panel de control de servicios, haga doble clic en el servicio, la selección de la ficha Iniciar sesión, configurar el servicio para ejecutarse como sistema local, y marcando la casilla . Es bastante sencillo. Usted puede tratar de la prueba con algo como el Bloc de notas para ver si se puede conseguir que funcione.

En Vista (y, presumiblemente, Windows 7), sin embargo, puede estar fuera de suerte. He leído que la capacidad de los servicios de Windows para interactuar con el escritorio se ha eliminado en Vista. Me olvido de lo que es la terminología, pero básicamente los servicios a correr en la "cáscara 0", mientras que los usuarios van a ocupar "cáscara 1". Las aplicaciones de usuario será capaz de comunicarse con los servicios y viceversa, usando tecnología como WCF, pero los servicios no serán capaces de comunicarse directamente con el escritorio. Por ejemplo, las casillas de error que aparecen tendrán que ser tratado mediante el canje de "Shell 0." Una vez más, esto se basa en algo que leí hace unos meses, y no he ido a buscar en él otra vez. Para mí, me ha estructurado mi servicio de Windows para configurar mediante WCF través de una aplicación front-end.

Lo siento, no tengo un vínculo para ti, pero si su servicio eventualmente tendrá que migrar a un nuevo sistema operativo (o que ya están allí), esto es algo a ver.

Otros consejos

puede ejecutar programas externos de un servicio, pero hay problemas de seguridad. Por ejemplo, el servicio se esté ejecutando bajo una cuenta que no tiene acceso de lectura a la carpeta donde reside el programa externo, incluso si su cuenta interactivo tiene ese acceso.

Para propósitos de prueba, trate de configurar el servicio para ejecutarse en su cuenta interactiva. Si el programa se invoca como se espera, entonces el problema con la cuenta original es que no tiene suficientes privilegios para ejecutar el programa.

Otra consideración crítica con los servicios de Windows es que no hay una interfaz gráfica de usuario. Técnicamente, hay una opción para permitir que el servicio interactúe con una interfaz gráfica de usuario local, pero que no lo verá. Esto es debido a los servicios que se ejecutan como el usuario del sistema local.

Dentro de un servicio, cualquier cuadro de diálogo modal (OK, Cancelar, etc.) se considera un error.

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