• 締切済み

[Windows]SCMへのサービスの登録

Windowsのサービスコントロールマネージャ(以下、SCM)へのサービスの登録の件です。 登録時に、「複数のプロセス」を「1つのサービス」として登録することはできますか? たとえば、A.exe, B.exe, C.exeの3つのプログラムを依存関係(起動時の順序関係)を設定して 1つのサービスとして登録するイメージなのですが。 個人的にはサービス登録は難しいと思っています。 というのは、複数プロセスを1サービスとして登録すると サービスの状態(起動してるか停止しているか)をうまく判定できない気がします。

みんなの回答

  • anmochi
  • ベストアンサー率65% (1332/2045)
回答No.1

サービス一つでそれをやろうとすると、A、B、Cの起動順序や死活監視を制御するようなヘルパーサービスプログラムH.exeを用意して、scで登録するのはH.exeという事になろうて。この場合、AとBとCはサービスフレームワークではなく独自のデーモンとして開発する事になる。 質問内容からABCは既にサービスフレームワークで開発されているように見受けられるので、上の対応は難しいと推測される。 A、B、Cそれぞれをサービス化して、サービス間の依存関係を設定するという事でよければできる。 A.exeサービスを起動するには先にB.exeサービスが起動してなくちゃいけなくって、B.exeサービスを起動するにはC.exeサービスが起動してなくちゃいけない、C.exeサービスを停止する時は勝手にB.exeサービスも停止する、B.exeサービスを停止する時は勝手にA.exeサービスも停止するという奴。 つまり、3つのexeで1つのサービスではなく、3つのexeで3つのサービスになり、3つのサービスフレームワークが協調動作を行う事で(サービスフレームワークの管理機構においてのみではあるが)サービス間の整合性を保つことができる。 C:\>sc create c_service binpath= "C:\opt\C.exe" displayname= "C Service" start= auto C:\>sc create b_service binpath="C:\opt\B.exe" displayname= "B Service" start= auto depend= c_service C:\>sc create a_service binpath="C:\opt\A.exe" displayname= "A Service" start= auto depend= b_service コマンドライン引数のdependがミソで、こう指定する事により、ABC全部が停止している状態で C:\>net start a_service とすると、C、B、Aの順番にサービスが開始されるようになる。ABCが開始している状態で C:\>net stop c_service も同様にABCが順番に停止する。

関連するQ&A