次の方法で共有


サービス アプリケーションのプログラミング アーキテクチャ

Windows サービス アプリケーションは、System.ServiceProcess.ServiceBase クラスから継承するクラスに基づいています。 このクラスからメソッドをオーバーライドし、機能を定義してサービスの動作を決定します。

サービスの作成には、主に次のクラスを使用します。

また、ServiceController クラスを使用してサービス自体を操作することもできます。 このクラスはサービスの作成には使用しませんが、サービスの起動や停止を行うとき、サービスにコマンドを渡すとき、およびサービス一覧の取得を行うときに使用できます。

サービスの動作定義

サービス制御マネージャーでサービスの状態が変更されたときの動作は、基本クラスの関数によって定義されていますが、サービス クラスでは基本クラスの関数をオーバーライドして使用します。 ServiceBase クラスには次のメソッドがあり、このメソッドをオーバーライドして独自の動作を追加できます。

メソッド

オーバーライドの目的

OnStart

サービスの実行を開始したときのアクションを示します。 サービス本来の処理は、このプロシージャに記述する必要があります。

OnPause

サービスを一時停止したときの動作を示します。

OnStop

サービスの実行を停止したときの動作を示します。

OnContinue

一時停止したサービスを再開したときの動作を示します。

OnShutdown

実行中のサービスの、システムがシャットダウンする直前の動作を示します。

OnCustomCommand

サービスがカスタム コマンドを受信したときの動作を示します。 カスタム コマンドの詳細については、MSDN オンラインを参照してください。

OnPowerEvent

低電力モードやサスペンド モードなど、電源管理イベントを受信したときのサービスの応答を示します。

注意

上記のメソッドは、有効期間内に順次に移り変わるサービスの状態を表しています。 たとえば、OnStart が呼び出されていない状態では、サービスは OnContinue コマンドに応答できません。

上記以外にも関連するプロパティおよびメソッドがあります。 このようなメソッドを次に示します。

  • ServiceBase クラスの Run メソッド。 サービスのメイン エントリ ポイントです。 Windows サービスのテンプレートを使用してサービスを作成した場合は、アプリケーションの Main メソッドにサービスを実行するコードを挿入します。 コード例を次に示します。

    Dim ServicesToRun() As System.ServiceProcess.ServiceBase
    ServicesToRun = 
        New System.ServiceProcess.ServiceBase() {New Service1()}
    System.ServiceProcess.ServiceBase.Run(ServicesToRun)
    
            System.ServiceProcess.ServiceBase[] ServicesToRun;
            ServicesToRun = new System.ServiceProcess.ServiceBase[] 
              { new Service1() };
            System.ServiceProcess.ServiceBase.Run(ServicesToRun);
    

    注意

    上記の例では、ServiceBase 型の配列を使用しています。アプリケーションに含まれる各サービスをこの配列に追加して、すべてのサービスを同時に実行できます。 ただし、サービスを 1 つだけ作成する場合は、配列を使用せず、ServiceBase から継承する新しいオブジェクトを宣言して実行することもできます。 例については、「方法 : プログラムでサービスを作成する」を参照してください。

  • ServiceBase クラスの各プロパティ。 サービスに対して呼び出すことができるメソッドを決定します。 たとえば、CanStop プロパティに true が設定されている場合は、サービスの OnStop メソッドを呼び出すことができます。 CanPauseAndContinue プロパティに true が設定されている場合は、OnPause メソッドと OnContinue メソッドを呼び出すことができます。 これらのいずれかのプロパティに true を設定する場合は、該当するメソッドの処理のオーバーライドと定義を行う必要があります。

    注意

    サービスが有用であるためには、少なくとも OnStartOnStop をオーバーライドする必要があります。

ServiceController コンポーネントを使用して、既存のサービスと通信したり、既存のサービスの動作を制御したりできます。

参照

処理手順

方法 : Windows サービスを作成する

概念

Windows サービス アプリケーションの概要