Добавить новую зависимость к службе 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, но предполагаю, что вы знаете, что делаете.

Связанный контент