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