Windows サービス アプリケーションの概要Introduction to Windows Service Applications

Microsoft Windows サービス (旧 NT サービス) を使用すると、Microsoft Windows サービス自体の Windows セッションで長時間にわたって実行されるアプリケーションを作成できます。Microsoft Windows services, formerly known as NT services, enable you to create long-running executable applications that run in their own Windows sessions. 作成したサービスは、コンピューターのブート時に自動的に起動させることができます。また、サービスを一時停止したり、再起動したりすることもできます。このサービスはユーザー インターフェイスを表示しません。These services can be automatically started when the computer boots, can be paused and restarted, and do not show any user interface. このような特徴があるため、サービスはサーバー上で使用するのに適しており、コンピューターを共用する他のユーザーの邪魔をせずに長時間稼動させる機能を実現するのに最適です。These features make services ideal for use on a server or whenever you need long-running functionality that does not interfere with other users who are working on the same computer. また、ログオン ユーザーや既定のコンピューター アカウントとは異なる、特定のユーザー アカウントのセキュリティ コンテキストでサービスを実行することもできます。You can also run services in the security context of a specific user account that is different from the logged-on user or the default computer account. サービスと Windows セッションの詳細については、Windows SDK ドキュメントを参照してください。For more information about services and Windows sessions, see the Windows SDK documentation.

サービスは、サービスとしてインストールするアプリケーションを作成することで簡単に作成できます。You can easily create services by creating an application that is installed as a service. たとえば、パフォーマンス カウンターのデータを監視し、しきい値を基準にした処理を行うとします。For example, suppose you want to monitor performance counter data and react to threshold values. この場合、パフォーマンス カウンターのデータを取得する Windows サービス アプリケーションを作成し配置して、データの収集と分析を行うことができます。You could write a Windows Service application that listens to the performance counter data, deploy the application, and begin collecting and analyzing data.

サービスは、Microsoft Visual Studio のプロジェクトとして作成します。サービスには、サービスに送信できるコマンドと、コマンド受信時に行うアクションとを制御するコードを定義します。You create your service as a Microsoft Visual Studio project, defining code within it that controls what commands can be sent to the service and what actions should be taken when those commands are received. サービスに送信できるコマンドには、サービスの起動コマンド、一時停止コマンド、再開コマンド、および停止コマンドがあります。また、カスタム コマンドも実行できます。Commands that can be sent to a service include starting, pausing, resuming, and stopping the service; you can also execute custom commands.

アプリケーションを作成してビルドした後に、コマンド ライン ユーティリティの InstallUtil.exe を実行してサービスの実行可能ファイルのパスを指定することで、アプリケーションをインストールできます。After you create and build the application, you can install it by running the command-line utility InstallUtil.exe and passing the path to the service's executable file. アプリケーションをインストールすると、サービス コントロール マネージャーを使用して、サービスを起動、停止、一時停止、再開、および設定できるようになります。You can then use the Services Control Manager to start, stop, pause, resume, and configure your service. サーバー エクスプローラー[サービス] ノード、または ServiceController クラスを使用して、これらの作業を行うこともできます。You can also accomplish many of these same tasks in the Services node in Server Explorer or by using the ServiceController class.

サービス アプリケーションと他の Visual Studio アプリケーションService Applications vs. Other Visual Studio Applications

サービス アプリケーションの動作は、次に示すように、他のプロジェクトと異なります。Service applications function differently from many other project types in several ways:

  • サービス アプリケーション プロジェクトが作成するコンパイル済み実行可能ファイルは、プロジェクトの使用開始前にサーバーにインストールしておく必要があります。The compiled executable file that a service application project creates must be installed on the server before the project can function in a meaningful way. F5 キーまたは F11 キーを押してサービス アプリケーションをデバッグまたは実行することはできません。サービスを即時に実行したり、サービスのコードにステップ インすることはできません。You cannot debug or run a service application by pressing F5 or F11; you cannot immediately run a service or step into its code. サービスのインストールと起動を行ってから、デバッガーをサービスのプロセスにアタッチする必要があります。Instead, you must install and start your service, and then attach a debugger to the service's process. 詳細については、「方法 :Windows サービス アプリケーションをデバッグするFor more information, see How to: Debug Windows Service Applications.

  • 一部のプロジェクトの場合とは異なり、サービス アプリケーションのインストール コンポーネントは必ず作成する必要があります。Unlike some types of projects, you must create installation components for service applications. インストール コンポーネントは、サーバーへのサービスのインストールと登録を行い、Windows サービス コントロール マネージャーでサービスのエントリを作成します。The installation components install and register the service on the server and create an entry for your service with the Windows Services Control Manager. 詳細については、「方法 :サービス アプリケーションにインストーラーを追加する」を参照してください。For more information, see How to: Add Installers to Your Service Application.

  • サービス アプリケーションの Main メソッドは、プロジェクトに含まれているサービスの Run コマンドを実行する必要があります。The Main method for your service application must issue the Run command for the services your project contains. Run メソッドによって、適切なサーバーのサービス コントロール マネージャーにサービスが読み込まれます。The Run method loads the services into the Services Control Manager on the appropriate server. Windows サービスのプロジェクト テンプレートを使用すると、このメソッドは自動的に作成されます。If you use the Windows Services project template, this method is written for you automatically. サービスの読み込みとサービスの起動は異なります。Note that loading a service is not the same thing as starting the service. 詳細については、後述の「サービスの有効期間」を参照してください。See "Service Lifetime" below for more information.

  • Windows サービス アプリケーションは、ログオン ユーザーの対話型ステーションとは異なるウィンドウ ステーションで実行されます。Windows Service applications run in a different window station than the interactive station of the logged-on user. ウィンドウ ステーションは、クリップボード、グローバルなアトムのセット、およびデスクトップ オブジェクトのグループを含む安全なオブジェクトです。A window station is a secure object that contains a Clipboard, a set of global atoms, and a group of desktop objects. Windows サービスのステーションは対話型ステーションではないので、Windows サービス アプリケーションから出力されたダイアログ ボックスは表示されず、プログラムの応答が停止することがあります。Because the station of the Windows service is not an interactive station, dialog boxes raised from within a Windows service application will not be seen and may cause your program to stop responding. 同様に、エラー メッセージもユーザー インターフェイスに出力されるのではなく、Windows イベント ログに記録されます。Similarly, error messages should be logged in the Windows event log rather than raised in the user interface.

    .NET Framework でサポートされている Windows サービスのクラスは、対話型ステーション、つまりログオン ユーザーとの対話をサポートしていません。The Windows service classes supported by the .NET Framework do not support interaction with interactive stations, that is, the logged-on user. また、.NET Framework には、ステーションおよびデスクトップを表すクラスが含まれていません。The .NET Framework also does not include classes that represent stations and desktops. Windows サービスが他のステーションと対話する必要がある場合は、アンマネージ Windows API にアクセスする必要があります。If your Windows service must interact with other stations, you will need to access the unmanaged Windows API. 詳細については、Windows SDK ドキュメントを参照してください。For more information, see the Windows SDK documentation.

    Windows サービスとユーザーまたは他のステーションとの対話は、ログオン ユーザーがいない場合やユーザーが予期しないデスクトップ オブジェクトのセットを持っている場合などのシナリオにも対応できるように注意してデザインする必要があります。The interaction of the Windows service with the user or other stations must be carefully designed to include scenarios such as there being no logged on user, or the user having an unexpected set of desktop objects. 場合によっては、ユーザーの制御下で実行される Windows アプリケーションを書いた方がより適切であることもあります。In some cases, it may be more appropriate to write a Windows application that runs under the control of the user.

  • Windows サービス アプリケーションは、独自のセキュリティ コンテキストで実行され、Windows サービス アプリケーションがインストールされている Windows コンピューターにユーザーがログインする前に起動されます。Windows service applications run in their own security context and are started before the user logs into the Windows computer on which they are installed. サービスを実行するユーザー アカウントは慎重に検討する必要があります。システム アカウントで実行されるサービスには、ユーザー アカウントで実行される場合より多くのアクセス許可とアクセス特権が認められます。You should plan carefully what user account to run the service within; a service running under the system account has more permissions and privileges than a user account.

サービスの有効期間Service Lifetime

サービスの内部状態は、有効期間内でさまざまに変化します。A service goes through several internal states in its lifetime. まず初めに、サービスを実行するシステムにインストールされます。First, the service is installed onto the system on which it will run. このプロセスでは、サービス プロジェクトのインストーラーが実行され、ターゲット コンピューターのサービス コントロール マネージャーにサービスが読み込まれます。This process executes the installers for the service project and loads the service into the Services Control Manager for that computer. サービス コントロール マネージャーは、サービス管理の中核となる Windows 標準ユーティリティです。The Services Control Manager is the central utility provided by Windows to administer services.

サービスが読み込まれた後で、サービスを起動します。After the service has been loaded, it must be started. サービスを起動すると、サービスが動作できるようになります。Starting the service allows it to begin functioning. サービスは、サービス コントロール マネージャーから起動することも、サーバー エクスプローラーから起動することも、コードから Start メソッドを呼び出して起動することもできます。You can start a service from the Services Control Manager, from Server Explorer, or from code by calling the Start method. Start メソッドは、処理をアプリケーションの OnStart メソッドに渡し、このメソッドに定義されている処理を実行します。The Start method passes processing to the application's OnStart method and processes any code you have defined there.

実行中のサービスは、サービスの停止や一時停止が指示されたり、コンピューターがシャットダウンされるまで、実行中の状態を維持できます。A running service can exist in this state indefinitely until it is either stopped or paused or until the computer shuts down. サービスの基本的な状態は、RunningPaused、または Stopped です。A service can exist in one of three basic states: Running, Paused, or Stopped. サービスは保留中のコマンドの状態 (ContinuePendingPausePendingStartPending、または StopPending) も報告できます。The service can also report the state of a pending command: ContinuePending, PausePending, StartPending, or StopPending. これらの状態は、実行中のサービスを一時停止するコマンドなどが実行されたが、まだ完了していない状態を表します。These statuses indicate that a command has been issued, such as a command to pause a running service, but has not been carried out yet. Status を問い合わせるとサービスがどの状態にあるかを判別でき、WaitForStatus を使用するとこのいずれかの状態になったときに処理を実行できます。You can query the Status to determine what state a service is in, or use the WaitForStatus to carry out an action when any of these states occurs.

サービスの一時停止、停止、および再開は、サービス コントロール マネージャーまたはサーバー エクスプローラーで実行できます。また、コードでメソッドを呼び出して実行することもできます。You can pause, stop, or resume a service from the Services Control Manager, from Server Explorer, or by calling methods in code. これらのアクションは、サービスの中でそれぞれ対応するプロシージャ (OnStopOnPause、または OnContinue) を呼び出すことができます。これらのプロシージャには、サービスの状態が変化したときに実行する追加処理を定義できます。Each of these actions can call an associated procedure in the service (OnStop, OnPause, or OnContinue), in which you can define additional processing to be performed when the service changes state.

サービスの種類Types of Services

Visual Studio で .NET Framework を使用して作成できるサービスには 2 種類あります。There are two types of services you can create in Visual Studio using the .NET Framework. プロセスを占有するサービスには、Win32OwnProcess 型が割り当てられます。Services that are the only service in a process are assigned the type Win32OwnProcess. 他のサービスとプロセスを共有するサービスには、Win32ShareProcess 型が割り当てられます。Services that share a process with another service are assigned the type Win32ShareProcess. サービスの種類は、ServiceType プロパティを問い合わせて取得できます。You can retrieve the service type by querying the ServiceType property.

Visual Studio 以外で作成された既存のサービスを問い合わせた場合は、これ以外のサービスの種類が割り当てられていることもあります。You might occasionally see other service types if you query existing services that were not created in Visual Studio. それらの詳細については、「ServiceType」を参照してください。For more information on these, see the ServiceType.

サービスと ServiceController コンポーネントServices and the ServiceController Component

ServiceController コンポーネントは、インストール済みのサービスに接続し、サービスの状態を操作するときに使用します。ServiceController コンポーネントを使用すると、サービスの起動と停止、およびサービスの一時停止と継続を実行できます。また、カスタム コマンドをサービスに送信することもできます。The ServiceController component is used to connect to an installed service and manipulate its state; using a ServiceController component, you can start and stop a service, pause and continue its functioning, and send custom commands to a service. ただし、サービス アプリケーションを作成する場合は、ServiceController コンポーネントを使用する必要はありません。However, you do not need to use a ServiceController component when you create a service application. ほとんどの場合は、サービスを定義している Windows サービス アプリケーションとは別のアプリケーションに ServiceController コンポーネントが含まれています。In fact, in most cases your ServiceController component should exist in a separate application from the Windows service application that defines your service.

詳細については、「 ServiceController 」を参照してください。For more information, see ServiceController.


  • サービスは、Windows サービス アプリケーション プロジェクトなどの .NET Framework 対応プロジェクト内で作成する必要があります。 .NET Framework 対応プロジェクトは、ビルド時に .exe ファイルを作成し、ServiceBase クラスから継承を行います。Services must be created in a Windows Service application project or another .NET Framework–enabled project that creates an .exe file when built and inherits from the ServiceBase class.

  • Windows サービスを含むプロジェクトには、プロジェクトのインストール コンポーネントと、プロジェクトのサービスのインストール コンポーネントが必要です。Projects containing Windows services must have installation components for the project and its services. これは [プロパティ] ウィンドウで簡単に設定できます。This can be easily accomplished from the Properties window. 詳細については、「方法 :サービス アプリケーションにインストーラーを追加する」を参照してください。For more information, see How to: Add Installers to Your Service Application.

関連項目See also