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

Другие вопросы по тегам