Ich habe einen Windows-Dienst, den ich mit InstallUtil.exe installiere. Obwohl ich die Startmethode auf Automatisch eingestellt habe, wird der Dienst bei der Installation nicht gestartet. Ich muss die Dienste manuell öffnen und auf Start klicken. Gibt es eine Möglichkeit, es entweder über die Befehlszeile oder über den Code des Dienstes zu starten?
c#
windows-services
mickyjtwin
quelle
quelle
ServiceController
in eine using-Anweisung zu packen .ServiceInstaller
Variable in Ihrer Klasse sein. Diese Klasse muss implementierenSystem.Configuration.Install.Installer
. Weitere Informationen finden Sie in diesem MSDN-Handbuch .serviceInstaller
ist dies dasServiceInstaller
Objekt, auf dassender
im Ereignishandler verwiesen wird , das normalerweise imServiceInstaller()
Konstruktor instanziiert wird . Daher können SieServiceInstaller serviceInstaller = (ServiceInstaller)sender;
vor derusing
Anweisung hinzufügen .Nach einigem Refactoring ist dies ein Beispiel für ein vollständiges Windows Service-Installationsprogramm mit automatischem Start:
quelle
Wie wäre es mit folgenden Befehlen?
quelle
Programmatische Optionen zur Steuerung von Diensten:
StartService
Methode. Dies ist gut für Fälle, in denen Sie in der Lage sein müssen, eine andere Verarbeitung durchzuführen (z. B. um den Dienst auszuwählen).Start-Service
überRunspaceInvoke
oder durch Erstellen einer eigenenRunspace
und Verwendung derCreatePipeline
Methode zur Ausführung. Dies ist gut für Fälle, in denen Sie in der Lage sein müssen, eine andere Verarbeitung (z. B. zur Auswahl des Dienstes) mit einem viel einfacheren Codierungsmodell als WMI durchzuführen, dies hängt jedoch von der installierten PSH ab.ServiceController
quelle
Sie können die folgende Befehlszeile verwenden, um den Dienst zu starten:
quelle
Verwenden Sie ServiceController , um Ihren Dienst mit Code zu starten.
Update: Der korrektere Weg, um den Dienst über die Befehlszeile zu starten, ist die Verwendung des Befehls "sc" ( Service Controller ) anstelle von "net".
quelle
Trotz nach der akzeptierten Antwort genau, war ich noch nicht in der Lage , den Dienst erreiche ich start-- stattdessen eine Fehlermeldung bei der Installation angegeben wurde die besagt , dass der Dienst, der gerade installiert wurde kann nicht gestartet werden, da es nicht gäbe, trotz Verwendung von
this.serviceInstaller.ServiceName
eher als ein wörtliches ...Ich habe schließlich eine alternative Lösung gefunden, die die Befehlszeile verwendet:
quelle
Automatischer Start bedeutet, dass der Dienst beim Start von Windows automatisch gestartet wird. Wie bereits erwähnt, sollten Sie zum Starten über die Konsole den ServiceController verwenden.
quelle
Sie können die
GetServices
Methode der ServiceController- Klasse verwenden, um ein Array aller Dienste abzurufen. Suchen Sie dann Ihren Dienst, indem Sie dieServiceName
Eigenschaft jedes Dienstes überprüfen . Wenn Sie Ihren Dienst gefunden haben, rufen Sie dieStart
Methode auf, um ihn zu starten.Sie sollten die
Status
Eigenschaft auch überprüfen, um festzustellen, in welchem Zustand sie sich bereits befindet, bevor Sie start aufrufen (sie wird möglicherweise ausgeführt, angehalten, gestoppt usw.).quelle
Sie haben Ihren Designer beschädigt. Fügen Sie Ihre Installer-Komponente erneut hinzu. Es sollte einen serviceInstaller und einen serviceProcessInstaller haben. Der serviceInstaller mit der Eigenschaft Startmethode auf Automatisch wird bei der Installation und nach jedem Neustart gestartet.
quelle
Nur ein Hinweis: Möglicherweise haben Sie Ihren Dienst über die Formularschnittstelle anders eingerichtet, um ein Dienstinstallationsprogramm und ein Projektinstallationsprogramm hinzuzufügen. Ersetzen Sie in diesem Fall serviceInstaller.ServiceName durch "name from designer" .ServiceName.
Sie brauchen in diesem Fall auch keine privaten Mitglieder.
Danke für die Hilfe.
quelle