2009-05-05 8 views
5

Ho alcuni Servizi Windows scritti in C# che ho configurato per supportare l'esecuzione dalla riga di comando come app console se viene passato un parametro specifico. Funziona alla grande, ma mi piacerebbe essere in grado di rilevare se l'app è gestita dal controllo di servizio mananger o da una riga di comando.Come determinare se il processo è eseguito da Gestione controllo servizi

C'è un modo per dire in runtime se la mia app è stata avviata da SCM?

risposta

2

Environment.UserInteractive restituirà false se il processo è in esecuzione in SCM.

+3

Questo funziona bene fino a quando non si attiva l'opzione 'Consenti al servizio di interagire con il desktop' in SCM. Non è un problema per i nostri servizi. Grazie Guardi! – BrettRobi

1

L'SCM chiamerà il metodo OnStart, in modo da poter contrassegnare quell'evento e assicurarsi che quando si esegue dalla riga di comando, non chiamare OnStart. Oppure, è possibile controllare i parametri di avvio per vedere come è stata avviata l'applicazione.

0

In C la funzione StartServiceCtrlDispatcher() avrà esito negativo con ERROR_FAILED_SERVICE_CONTROLLER_CONNECT. Questo è il modo migliore in C, mi chiedo se C# espone nulla di tutto questo?

ERROR_FAILED_SERVICE_CONTROLLER_CONNECT

viene restituito questo errore se il programma viene eseguito come un'applicazione di console, piuttosto che come un servizio. Se il programma verrà eseguito come un'applicazione console per scopi di debug, strutturarlo in modo tale che il codice specifico del servizio non venga chiamato quando viene restituito questo errore.

Problemi correlati