web-dev-qa-db-ja.com

すでに依存関係があるWindowsサービスに新しい依存関係を追加する

これらの依存関係を削除せずに、バッチスクリプトを介して、古い依存関係を持つ既存のサービスに新しいサービス依存関係を追加したいと思います。

私はコマンドを知っていますsc config ServiceA depend= ServiceB/ServiceC/ServiceD複数の依存関係を追加できますが、それを使用して、たとえば、ServiceBとServiceCに依存するサービスにServiceD依存関係を追加する方法がわかりません。同じ結果で、古い依存関係については言及しません(それらを知っている)。

それを行う方法は何ですか?そして-変更を元に戻す方法(バッチ経由でも)?

ちなみに、私はバッチの経験があまりありません。

2
Reflection

既存の依存関係を見つけ、新しい依存関係を追加して、すべてを書き戻します。たとえば、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コマンドをテストしていませんが、あなたが何をしているのか知っていると思います。

2
Peter Hahndorf