プロが教えるわが家の防犯対策術!

Windowsのサービスコントロールマネージャ(以下、SCM)へのサービスの登録の件です。

登録時に、「複数のプロセス」を「1つのサービス」として登録することはできますか?
たとえば、A.exe, B.exe, C.exeの3つのプログラムを依存関係(起動時の順序関係)を設定して
1つのサービスとして登録するイメージなのですが。

個人的にはサービス登録は難しいと思っています。
というのは、複数プロセスを1サービスとして登録すると
サービスの状態(起動してるか停止しているか)をうまく判定できない気がします。

A 回答 (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が順番に停止する。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!