Wie bekomme ich das command-line-Argumente eines Windows-Dienstes?
Ich bin auf der Suche nach einem Weg, um herauszufinden, die Kommandozeilen-Argumente von alle Windows-Dienst.
Für ein nicht-service-Prozess, der Kommandozeilen-Argumente finden Sie in der Windows Task-Manager, oder programmgesteuert mithilfe von WMI, wie gezeigt, in dieser Beitrag.
Leider sind diese beiden Lösungen nicht für einen Windows-Dienst, der gestartet wird, indem die ServiceController.Start(String[] args) Methode. Beide zeigen nur die ausführbare Datei Pfad auf der Kommandozeile, auch wenn einige Argumente übergeben wurden.
- Was ist der Unterschied
zwischen zwei Szenarien (ein service vs.
eine nicht-service-Prozess)? - Gibt es eine
Weg, um herauszufinden, die Argumente der
Windows-Dienst?
Ich habe auch versucht, die Schaffung eines einfachen Dienst, der nur meldet eventuelle Befehlszeilen-Argumente, die es hat, um das Ereignisprotokoll. Ich begann es mit "sc.exe start <my service> <arg1>"
und verifiziert, dass <arg1>
wurde in das Ereignisprotokoll geschrieben.
Aber keine der Lösungen hat bei mir funktioniert. Ich sah nur noch den Pfad zu der ausführbaren Datei. Meine OS-version ist Windows Server 2008 R2 SP1 x64 Enterprise.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Gibt es zwei Arten von Argumenten für Dienstleistungen:
SC START \[Argumente\]
. Das hat nichts zu tun mit "Befehlszeile Argumente".Die zweite Art von Parametern ist wohl nur bekannt durch den Dienst selbst, wenn die Umsetzung macht jede Nutzung, die nicht der Fall für viele Dienste. Ich glaube nicht, dass Windows diese selbst verfolgen, wenn wir uns anschauen, low-level-Windows-Strukturen wie die PEB: Prozess-und Thread-Strukturen (MSDN), auch die undokumentierten Teile der Undokumentierte Funktionen von NTDLL.
Finden Sie die service-EXE-Datei, die Daten und Bearbeiten oder einfach nur sehen, das die Kommandozeilen-Optionen in der registry-Eintrag für den service. Sie werden feststellen, dass unter
Sicher sein, starten Sie den Dienstleistungen Fenster, wenn Sie sich entscheiden, dies zu ändern, da er nicht Lesen, es zu Leben.
Versuchen die Prozess - Explorer Anwendung von Sysinternals
Es ist wie Task-Manager, nur er listet alle Laufenden Prozesse. Wählen Sie Ihren service und dessen Eigenschaften.
Einen service-Prozess nicht gestartet, als eine gewöhnliche EXE-Datei. Noch mehr, ein service-Prozess könnte nur ein .dll Datei. Siehe: Windows-Dienst (Wikipedia).
Nur das überschreiben der
ServiceBase.OnStart(string[] args)
Methode. Sehen Sie mehr:ServiceBase.OnStart(String []) - Methode (MSDN)