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