2009-05-05 3 views
5

Ich habe ein paar in C# geschriebene Windows-Dienste, die die Ausführung über die Befehlszeile als Konsolenanwendung unterstützen, wenn ein bestimmter Parameter übergeben wird. Funktioniert großartig, aber ich würde gerne feststellen können, ob die App vom Service Control Manager oder von einer Befehlszeile ausgeführt wird.So ermitteln Sie, ob der Prozess vom Dienststeuerungs-Manager ausgeführt wird

Gibt es eine Möglichkeit zur Laufzeit festzustellen, ob meine App vom SCM gestartet wurde?

Antwort

2

Environment.UserInteractive wird false zurückgeben, wenn der Prozess unter dem SCM ausgeführt wird.

+3

Dies funktioniert einwandfrei, solange Sie die Option "Dienst mit dem Desktop interagieren" im SCM nicht aktivieren. Kein Problem für unsere Dienstleistungen. Danke Guardi! – BrettRobi

1

Der SCM ruft Ihre OnStart-Methode auf, sodass Sie dieses Ereignis markieren und sicherstellen können, dass Sie OnStart nicht aufrufen, wenn Sie über die Befehlszeile ausführen. Oder Sie können die Startparameter überprüfen, um zu sehen, wie die Anwendung gestartet wurde.

0

In C wird die Funktion StartServiceCtrlDispatcher() mit ERROR_FAILED_SERVICE_CONTROLLER_CONNECT fehlschlagen. Dies ist der beste Weg in C, fragen Sie sich, ob C# das alles aufdeckt?

ERROR_FAILED_SERVICE_CONTROLLER_CONNECT

Dieser Fehler wird zurückgegeben, wenn das Programm als Anwendung Konsole ausgeführt wird, anstatt als Dienstleistung an. Wenn das Programm als eine Konsolenanwendung zu Debugzwecken ausgeführt wird, strukturieren Sie es so, dass dienstspezifischer Code nicht aufgerufen wird, wenn dieser Fehler zurückgegeben wird.

Verwandte Themen