サービス アプリケーションのプログラミング アーキテクチャ
Windows サービス アプリケーションは、System.ServiceProcess.ServiceBase クラスから継承するクラスに基づいています。 このクラスからメソッドをオーバーライドし、機能を定義してサービスの動作を決定します。
サービスの作成には、主に次のクラスを使用します。
System.ServiceProcess.ServiceBase クラス。サービス作成時に ServiceBase クラスのメソッドをオーバーライドし、サービスの機能をこの継承クラスに定義します。
System.ServiceProcess.ServiceProcessInstaller クラスおよび System.ServiceProcess.ServiceInstaller クラス。サービスのインストールとアンインストールを行うときに使用します。
また、ServiceController クラスを使用してサービス自体を操作することもできます。 このクラスはサービスの作成には使用しませんが、サービスの起動や停止を行うとき、サービスにコマンドを渡すとき、およびサービス一覧の取得を行うときに使用できます。
サービスの動作定義
サービス制御マネージャーでサービスの状態が変更されたときの動作は、基本クラスの関数によって定義されていますが、サービス クラスでは基本クラスの関数をオーバーライドして使用します。 ServiceBase クラスには次のメソッドがあり、このメソッドをオーバーライドして独自の動作を追加できます。
メソッド |
オーバーライドの目的 |
---|---|
サービスの実行を開始したときのアクションを示します。 サービス本来の処理は、このプロシージャに記述する必要があります。 |
|
サービスを一時停止したときの動作を示します。 |
|
サービスの実行を停止したときの動作を示します。 |
|
一時停止したサービスを再開したときの動作を示します。 |
|
実行中のサービスの、システムがシャットダウンする直前の動作を示します。 |
|
サービスがカスタム コマンドを受信したときの動作を示します。 カスタム コマンドの詳細については、MSDN オンラインを参照してください。 |
|
低電力モードやサスペンド モードなど、電源管理イベントを受信したときのサービスの応答を示します。 |
注意
上記のメソッドは、有効期間内に順次に移り変わるサービスの状態を表しています。 たとえば、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 を設定する場合は、該当するメソッドの処理のオーバーライドと定義を行う必要があります。
ServiceController コンポーネントを使用して、既存のサービスと通信したり、既存のサービスの動作を制御したりできます。