サービス アプリケーションの一部として存在するサービスの基本クラスを提供します。 ServiceBase は、新しいサービス クラスの作成時に派生される必要があります。
この型のすべてのメンバの一覧については、ServiceBase メンバ を参照してください。
System.Object
System.MarshalByRefObject
System.ComponentModel.Component
System.ServiceProcess.ServiceBase
Public Class ServiceBase
Inherits Component
[C#]
public class ServiceBase : Component
[C++]
public __gc class ServiceBase : public Component
[JScript]
public class ServiceBase extends Component
スレッドセーフ
この型の public static (Visual Basicでは Shared) のすべてのメンバは、マルチスレッド操作で安全に使用できます。インスタンスのメンバの場合は、スレッドセーフであるとは限りません。
解説
サービス アプリケーションでサービス クラスを定義するときに、 ServiceBase から派生します。すべての有効なサービスが、 OnStart メソッドと OnStop メソッドをオーバーライドします。追加の機能については、サービス状態の変更に応じた特定の動作で OnPause と OnContinue をオーバーライドできます。
サービスは、ユーザー インターフェイスをサポートしない、長期間実行できる実行可能ファイルです。ログオンしたユーザー アカウントによってはサービスを実行できない場合があります。コンピュータにログオンしているユーザーがいない場合でも、サービスを実行できます。
既定では、サービスはシステム アカウントで実行されます。このシステム アカウントは、管理者アカウントとは異なります。システム アカウントの権限は変更できません。ただし、 ServiceProcessInstaller を使用して、サービスを実行するときに使用するユーザー アカウントを指定できます。
実行可能ファイルには、複数のサービスを格納できますが、サービスごとに個別の ServiceInstaller を格納する必要があります。 ServiceInstaller インスタンスは、システムにサービスを登録します。また、インストーラは、各サービスをサービス コマンドを記録するために使用できるイベント ログに関連付けます。実行可能ファイルの main()
関数は、実行するサービスを定義します。サービスの現在の作業ディレクトリは、実行可能ファイルが置かれているディレクトリではなくシステム ディレクトリです。
サービスを開始すると、実行可能ファイルが検索され、実行可能ファイル内にある該当サービスの OnStart メソッドが実行されます。ただし、実行可能ファイルを実行しても、サービスは実行されません。実行可能ファイルは、サービスを読み込むだけです。サービスには、サービス コントロール マネージャを使用してアクセス (開始、停止など) します。
実行可能ファイルは、サービスで最初に Start を呼び出すときに、 ServiceBase 派生クラスのコンストラクタを呼び出します。 OnStart コマンド処理メソッドは、コンストラクタが実行された直後に呼び出されます。コンストラクタは、サービスが読み込まれた初回にしか実行されません。このため、コンストラクタで実行される処理と OnStart で実行される処理を区別する必要があります。 OnStop によって解放できるリソースは、 OnStart で作成する必要があります。 OnStop がリソースを解放した後にサービスを再開すると、コンストラクタでリソースを作成しても適切に作成されません。
サービス コントロール マネージャ (SCM: Service Control Manager) を使用すると、サービスを対話形式で利用できます。SCM を使用して、Start、Stop、Pause、Continue の各コマンドまたはカスタム コマンドをサービスに渡すことができます。SCM は CanStop の値および CanPauseAndContinue の値を使用して、サービスが Stop、Pause、または Continue のいずれかのコマンドを受け入れるかどうかを判断します。Stop、Pause、および Continue は、対応するプロパティである CanStop または CanPauseAndContinue がサービス クラスで true である場合に限り、SCM のコンテキスト メニューで有効になります。有効な場合、コマンドはサービスに渡され、 OnStop 、 OnPause 、または OnContinue が呼び出されます。 CanStop 、 CanShutdown 、または CanPauseAndContinue が false の場合は、対応するコマンド処理メソッド (OnStop など) を実装している場合でも、そのメソッドは処理されません。
ServiceController クラスを使用すると、ユーザー インターフェイスから SCM が実行する処理をプログラムから実行できます。コンソールで実行するタスクを自動化できます。 CanStop 、 CanShutdown 、または CanPauseAndContinue が true で、 OnStop などの対応するコマンド処理メソッドを実装していない場合、システムは例外をスローし、コマンドを無視します。
OnStart 、 OnStop 、または ServiceBase の他のメソッドを実装する必要はありません。ただし、サービスの動作は OnStart に記述されているため、最低限、このメンバはオーバーライドされる必要があります。実行可能ファイルの main()
関数のサービス名を設定する必要があります。 main()
で設定したサービス名は、サービス インストーラの ServiceName プロパティと完全に一致する必要があります。
InstallUtil.exe を使用して、システムにサービスをインストールできます。
メモ アプリケーション イベント ログ以外のログはサービス呼び出しの通知を受け取るように指定できますが、 AutoLog プロパティと EventLog プロパティのいずれもカスタム ログへの書き込みができません。自動的にログを記録しない場合は、 AutoLog を false に設定します。
必要条件
名前空間: System.ServiceProcess
プラットフォーム: Windows NT Server 4.0, Windows NT Workstation 4.0, Windows 2000, Windows XP Home Edition, Windows XP Professional, Windows Server 2003 ファミリ
アセンブリ: System.Serviceprocess (System.Serviceprocess.dll 内)
参照
ServiceBase メンバ | System.ServiceProcess 名前空間 | ServiceProcessInstaller | ServiceInstaller