2009-05-05 15 views
5

Tengo algunos servicios de Windows escritos en C# que tengo configurados para admitir que se ejecuten desde la línea de comandos como una aplicación de consola si se pasa un parámetro específico. Funciona muy bien, pero me encantaría poder detectar si la aplicación está siendo ejecutada por el administrador de control de servicio o desde una línea de comando.Cómo saber si el administrador de control de servicios ejecuta el proceso

¿Hay alguna manera de saber en tiempo de ejecución si mi aplicación fue iniciada por SCM?

Respuesta

2

Environment.UserInteractive devolverá falso si el proceso se está ejecutando en el SCM.

+3

Esto funciona bien siempre que no habilite la opción 'Permitir que el servicio interactúe con el escritorio' en el SCM. No es un problema para nuestros servicios. Gracias Guardi! – BrettRobi

1

El SCM llamará a su método OnStart, por lo que podría marcar ese evento y asegurarse de que cuando se ejecuta desde la línea de comandos, no llame a OnStart. O bien, puede verificar los parámetros de inicio para ver cómo se inició la aplicación.

0

En C la función StartServiceCtrlDispatcher() fallará con ERROR_FAILED_SERVICE_CONTROLLER_CONNECT. Esta es la mejor manera en C, me pregunto si C# expone algo de esto?

ERROR_FAILED_SERVICE_CONTROLLER_CONNECT

Se devuelve este error si el programa se ejecuta como una aplicación de consola en lugar de como un servicio. Si el programa se ejecutará como una aplicación de consola para fines de depuración, estructurelo de modo que no se invoque el código específico del servicio cuando se devuelva este error.

Cuestiones relacionadas