次の方法で共有


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

この記事は、.NET でホストされているサービスには適用されません。 Microsoft.Extensions.Hosting.BackgroundServiceと Worker Service テンプレートを使用した Windows サービスの最新のコンテンツについては、次を参照してください。

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

サービスの作成に関連する主なクラスは次のとおりです。

さらに、 ServiceController という名前のクラスを使用して、サービス自体を操作できます。 このクラスはサービスの作成には関係ありませんが、サービスの開始と停止、それにコマンドの渡し、一連の列挙を返すために使用できます。

サービスの動作の定義

サービス クラスでは、サービス コントロール マネージャーでサービスの状態が変更されたときに何が起こるかを決定する基底クラス関数をオーバーライドします。 ServiceBase クラスは、次のメソッドを公開します。これをオーバーライドしてカスタム動作を追加できます。

メソッド オーバーライドの対象
OnStart サービスの実行を開始するときに実行する必要があるアクションを指定します。 サービスが便利な作業を実行するには、この手順でコードを記述する必要があります。
OnPause サービスが一時停止したときに何が起こるかを示します。
OnStop サービスの実行が停止したときに何が起こるかを示します。
OnContinue 一時停止後にサービスが正常な機能を再開したときに何が起こるかを示します。
OnShutdown その時点でサービスが実行されている場合は、システムがシャットダウンする直前に何が起こるかを示します。
OnCustomCommand サービスがカスタム コマンドを受け取ったときに何が起こるかを示します。 カスタム コマンドの詳細については、MSDN オンラインを参照してください。
OnPowerEvent バッテリ残量の少ない操作や中断された操作など、電源管理イベントが受信されたときにサービスが応答する方法を示します。

これらのメソッドは、サービスがその有効期間中に移動する状態を表します。サービスは、ある状態から次の状態に移行します。 たとえば、OnStartが呼び出される前に、サービスが OnContinue コマンドに応答することはありません。

他にも、関心のあるプロパティとメソッドがいくつかあります。 これらには次のものが含まれます。

  • ServiceBase クラスのRun メソッド。 これは、サービスのメイン エントリ ポイントです。 Windows サービス テンプレートを使用してサービスを作成すると、アプリケーションの Main メソッドにコードが挿入され、サービスが実行されます。 このコードは次のようになります。

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

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

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

    サービスは、少なくとも OnStart をオーバーライドし、役に立つ OnStop する必要があります。

また、 ServiceController と呼ばれるコンポーネントを使用して、既存のサービスとの通信と動作の制御を行うこともできます。

こちらも参照ください