이러한 종속성을 삭제하지 않고 이전 종속성이 있는 기존 서비스에 배치 스크립트를 통해 새로운 서비스 종속성을 추가하고 싶습니다.
이 명령이 여러 종속성을 추가할 수 있다는 것은 알고 있지만 sc config ServiceA depend= ServiceB/ServiceC/ServiceD
이를 사용하여 ServiceB 및 ServiceC에 의존하는 서비스에 ServiceD 종속성을 추가하는 방법을 모르겠습니다. 결과는 동일하고 이전 종속성을 언급하지 않습니다. 그들을 모른다).
그렇게 하는 방법은 무엇입니까? 그리고 - 변경 사항을 되돌리는 방법(Batch를 통해서도)은 무엇입니까?
그런데 저는 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 명령을 테스트하지는 않았지만 여러분이 무엇을 하고 있는지 알고 있다고 가정합니다.