為已有相依性的 Windows 服務新增新的依賴項

為已有相依性的 Windows 服務新增新的依賴項

我想透過批次腳本向具有舊依賴項的現有服務添加新的服務依賴項,而不刪除這些依賴項。

我知道該命令sc config ServiceA depend= ServiceB/ServiceC/ServiceD可以添加多個依賴項,但我不知道如何使用它- 例如- 將ServiceD 依賴項添加到依賴ServiceB 和ServiceC 的服務,具有相同的結果,並且不提及舊的依賴項(因為我不認識他們)。

有什麼方法可以做到這一點?並且 - 如何恢復更改(也通過批次)?

順便說一句,我對 Batch 沒有太多經驗。

答案1

找出現有的依賴項,新增新的依賴項並將整個內容寫回,假設您有一項名為 的服務w3svc,您可以使用:

sc.exe  qc  w3svc

或在 PowerShell 中:

(get-service w3svc | Select ServicesDependedOn).ServicesDependedOn

您可以在其中循環這些並建立新的 sc.exe 命令來執行。

例子:

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

我們正在從現有服務建立命令字串並添加您自己的命令字串。

若要刪除您的服務,請執行相同的操作,但在循環中排除您的服務。

 $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"

我還沒有測試實際的 sc.exe 命令,但我假設您知道自己在做什麼。

相關內容