Назад | Перейти на главную страницу

Добавить новую зависимость к службе Windows, которая уже имеет зависимости

Я хочу добавить через пакетный скрипт новую зависимость от существующей службы со старыми зависимостями, не удаляя эти зависимости.

Я знаю команду sc config ServiceA depend= ServiceB/ServiceC/ServiceD может добавить несколько зависимостей, но я не знаю, как это использовать, например, для добавления зависимости ServiceD к службе, которая зависит от ServiceB и ServiceC, с тем же результатом и без упоминания старых зависимостей (поскольку я не знаю их).

Как это сделать? И - как отменить изменение (также через пакетную службу)?

Кстати, у меня нет большого опыта работы с Batch.

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