Fügen Sie einem Windows-Dienst, der bereits Abhängigkeiten hat, eine neue Abhängigkeit hinzu

Fügen Sie einem Windows-Dienst, der bereits Abhängigkeiten hat, eine neue Abhängigkeit hinzu

Ich möchte per Batch-Skript einem bestehenden Dienst mit alten Abhängigkeiten eine neue Dienstabhängigkeit hinzufügen, ohne diese Abhängigkeiten zu löschen.

Ich weiß, dass der Befehl sc config ServiceA depend= ServiceB/ServiceC/ServiceDmehrere Abhängigkeiten hinzufügen kann, aber ich weiß nicht, wie ich ihn verwenden kann, um beispielsweise einem Dienst, der von ServiceB und ServiceC abhängt, eine ServiceD-Abhängigkeit hinzuzufügen, mit demselben Ergebnis und ohne die alten Abhängigkeiten zu erwähnen (da ich sie nicht kenne).

Wie geht das? Und - wie kann ich die Änderung rückgängig machen (auch per Batch)?

Ich habe übrigens nicht viel Erfahrung mit Batch.

Antwort1

Ermitteln Sie die vorhandenen Abhängigkeiten, fügen Sie Ihre neue hinzu und schreiben Sie das Ganze zurück. Angenommen, Sie haben einen Dienst namens w3svc, können Sie Folgendes verwenden:

sc.exe  qc  w3svc

oder in PowerShell:

(get-service w3svc | Select ServicesDependedOn).ServicesDependedOn

wo Sie diese durchlaufen und einen neuen sc.exe-Befehl zur Ausführung erstellen können.

Beispiel:

 $serviceName = "w3svc"
 $cmd = "config $serviceName depend= "
 (gsv $serviceName | Select ServicesDependedOn).ServicesDependedOn | % {$cmd += $_.Name + "/"}
 $cmd += "myMasterService"
 invoke-expression "sc.exe $cmd"

Wir erstellen eine Befehlszeichenfolge aus den vorhandenen Diensten und fügen Ihre eigenen hinzu.

Um Ihren Dienst zu entfernen, gehen Sie genauso vor, schließen Sie ihn jedoch in der Schleife aus.

 $serviceName = "w3svc"
 $cmd = "config $serviceName depend= "
 (gsv $serviceName | Select ServicesDependedOn).ServicesDependedOn | % {
      if ($_.Name -ne "myMasterService")
      {
           $cmd += $_.Name + "/"
      }
 }
 # remove the last slash
 $cmd = $cmd -replace "/$", ""   
 invoke-expression "sc.exe $cmd"

Ich habe die eigentlichen sc.exe-Befehle nicht getestet, aber ich gehe davon aus, dass Sie wissen, was Sie tun.

verwandte Informationen