이미 종속성이 있는 Windows 서비스에 새 종속성을 추가합니다.

이미 종속성이 있는 Windows 서비스에 새 종속성을 추가합니다.

이러한 종속성을 삭제하지 않고 이전 종속성이 있는 기존 서비스에 배치 스크립트를 통해 새로운 서비스 종속성을 추가하고 싶습니다.

이 명령이 여러 종속성을 추가할 수 있다는 것은 알고 있지만 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 명령을 테스트하지는 않았지만 여러분이 무엇을 하고 있는지 알고 있다고 가정합니다.

관련 정보