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

Windows サービス アプリケーションは、System.ServiceProcess.ServiceBase クラスから継承するクラスが基になっています。Windows Service applications are based on a class that inherits from the System.ServiceProcess.ServiceBase class. このクラスのメソッドをオーバーライドして機能を定義し、サービスの動作を決定します。You override methods from this class and define functionality for them to determine how your service behaves.

サービスの作成に関連する主要なクラスは次のとおりです。The main classes involved in service creation are:

さらに、ServiceController という名前のクラスを使って、サービス自体を操作できます。In addition, a class named ServiceController can be used to manipulate the service itself. このクラスは、サービスの作成には含まれませんが、サービスを開始および停止し、サービスにコマンドを渡し、サービスから一連の列挙値を戻すために使用できます。This class is not involved in the creation of a service, but can be used to start and stop the service, pass commands to it, and return a series of enumerations.

サービスの動作の定義Defining Your Service's Behavior

サービス クラスにおいて、サービス コントロール マネージャー内でサービスの状態が変更されたときの動作を決定する基底クラスの関数をオーバーライドします。In your service class, you override base class functions that determine what happens when the state of your service is changed in the Services Control Manager. ServiceBase クラスで公開されている以下のメソッドをオーバーライドして、カスタム動作を追加できます。The ServiceBase class exposes the following methods, which you can override to add custom behavior.

メソッドMethod オーバーライドの目的Override to
OnStart サービスが実行を開始するときに行う必要のあるアクションを示します。Indicate what actions should be taken when your service starts running. サービスが意味のある処理を実行するには、このプロシージャにコードを記述する必要があります。You must write code in this procedure for your service to perform useful work.
OnPause サービスが一時停止されるときに行う必要があることを示します。Indicate what should happen when your service is paused.
OnStop サービスが実行を停止するときに行う必要があることを示します。Indicate what should happen when your service stops running.
OnContinue サービスが一時停止後に正常な機能を再開するときに行う必要があることを示します。Indicate what should happen when your service resumes normal functioning after being paused.
OnShutdown システムがシャットダウンする時点でサービスが実行している場合に、シャットダウンの直前に行う必要があることを示します。Indicate what should happen just prior to your system shutting down, if your service is running at that time.
OnCustomCommand サービスがカスタム コマンドを受け取ったときに行う必要があることを示します。Indicate what should happen when your service receives a custom command. カスタム コマンドについて詳しくは、MSDN オンラインをご覧ください。For more information on custom commands, see MSDN online.
OnPowerEvent バッテリ低下や中断操作など、電源管理イベントを受信したときのサービスの応答方法を示します。Indicate how the service should respond when a power management event is received, such as a low battery or suspended operation.

注意

これらのメソッドは、サービスがその有効期間内に通過する状態を表しています。サービスは、ある状態から次の状態に遷移します。These methods represent states that the service moves through in its lifetime; the service transitions from one state to the next. たとえば、OnStart が呼び出される前の OnContinue コマンドにサービスが応答することはありません。For example, you will never get the service to respond to an OnContinue command before OnStart has been called.

他にも、注目する必要のあるプロパティとメソッドがいくつかあります。There are several other properties and methods that are of interest. 次の設定があります。These include:

  • ServiceBase クラスの Run メソッド。The Run method on the ServiceBase class. このメソッドは、サービスのメイン エントリ ポイントです。This is the main entry point for the service. Windows サービス テンプレートを使ってサービスを作成するときは、アプリケーションの Main メソッドに、サービスを実行するコードを挿入します。When you create a service using the Windows Service template, code is inserted in your application's Main method to run the service. このコードは次のようになります。This code looks like this:

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

    注意

    これらの例では、アプリケーションに含まれる各サービスを追加できる ServiceBase 型の配列を使用しており、すべてのサービスを一緒に実行できます。These examples use an array of type ServiceBase, into which each service your application contains can be added, and then all of the services can be run together. 一方、作成するサービスが 1 つのみの場合は、配列は使わず、ServiceBase から継承する新しいオブジェクトを単純に宣言して、それを実行します。If you are only creating a single service, however, you might choose not to use the array and simply declare a new object inheriting from ServiceBase and then run it. 例については、「方法: プログラムでサービスを作成する」を参照してください。For an example, see How to: Write Services Programmatically.

  • ServiceBase クラスの一連のプロパティ。A series of properties on the ServiceBase class. これらは、サービスで呼び出すことができるメソッドを決定します。These determine what methods can be called on your service. たとえば、CanStop プロパティを true に設定すると、サービスで OnStop メソッドを呼び出すことができます。For example, when the CanStop property is set to true, the OnStop method on your service can be called. CanPauseAndContinue プロパティが true に設定されていると、OnPause および OnContinue メソッドを呼び出すことができます。When the CanPauseAndContinue property is set to true, the OnPause and OnContinue methods can be called. これらのプロパティのいずれかを true に設定するときは、関連するメソッドをオーバーライドして処理を定義する必要があります。When you set one of these properties to true, you should then override and define processing for the associated methods.

    注意

    サービスが役に立つためには、少なくとも OnStartOnStop をオーバーライドする必要があります。Your service must override at least OnStart and OnStop to be useful.

また、ServiceController コンポーネントを使うと、既存のサービスと通信して、その動作を制御できます。You can also use a component called the ServiceController to communicate with and control the behavior of an existing service.

関連項目See also