Windowsサービスプログラムの概要

Windowsサービスプログラムは、Windows OS(NT/2000/2003/2008/2012など)上で バックグラウンドで動作するプログラムです。インターネットサーバー(IIS)、データベースサーバー(SQL Server、Oracle)なども Windowsサービスとして実装されています。Windowsサービスは Windows NTと共に登場したバックグラウンドで動作するプログラムです。従来は、動作可能 OSが Windows NTのみであったため「NTサービス」あるいは「システムサービス」と呼ばれていましたが、Windows NTのアーキテクチャを踏襲している Windows 2000やWindows XP、Windows Server 2003/2008/2012でも動作するため「Windowsサービス」と呼ばれるようになりました。厳密な定義では、システムサービスにはハードウェア制御をおこなう「デバイスドライバ」と、システムサービスを提供する「Win32サービス」がありますが、Win32サービスは Windowsサービスとして実装されています。Windowsサービスは、UNIXのデーモンのようにバックグラウンドで長時間動作し、ユーザーインターフェイスを持たないアプリケーションプログラムです。通常のデスクトップアプリケーションと異なりバッググランドで動作するため、コンピュータが起動後、Windowsにユーザーがログオンする前に自動的に起動することができます。

バックグラウンド動作

バックグラウンドで、ログオンユーザーの有無にかかわらず動作します。また、コンピュータ起動時に自動的に開始することもでき、一時停止・再開などもできます。

長時間動作

通常Windowsサービスは、ユーザーやデスクトップアプリケーションの要求に応じて動作を開始・停止し、長時間システムに常駐します。

ユーザーインターフェイス無し

Windowsサービスは、バックグラウンドで基本的なサービスを提供するため、ユーザーインターフェイスを持ちません。サーバーで使用するときや、コンピュータを利用する他のログオンユーザーの邪魔をせずに、バックグラウンドで長時間稼動させる必要のあるときに最適です。

特定のログオン アカウント

Windowsサービスは、ログオンユーザーや既定のコンピュータアカウントとは異なる、特定のユーザーアカウントのセキュリティコンテキストで実行されます。

管理ツール

Windowsサービスがパラメータなどを必要とする場合は、Windowsサービス専用の管理ツール(MMCアプレット、コントロールパネルアプレット)などを経由して設定します。

Windows OS標準のWindowsサービスプログラム

Windows OS(NT/2000/2003/2008/2012など)では、OSとともに標準で提供される Windowsサービスがあり、OSの基本的な機能やネットワークプロトコルごとの機能などが実現されています。また、SQL Serverなどのサーバー製品やVisual Studio .NETなどの開発製品の多くでは、Windowsサービスを使用しています。

システム基本機能

Alerter
COM+ Event System
Event Log
Logical Disk Manager
Messenger
Net Logon
NT LM Security Support Provider
Performance Logs and Alerts
Plag and Play
Print Spooler
Protected Storage
Removable Storage
RunAs Service
Server
Smart Card
Task Scheduler
Windows Time
Workstation

ネットワーク機能

Computer Browser
DHCP Client
DNS Client
FAX Service
FTP Publishing Service
IIS Admin Service
IPSEC Policy Agent
Network DDE
QoS RSVP
Routing and Remote Access
SMTP
Telephony
Telnet
World Wide Web Publishing Service

Windowsサービスプログラムの制御

Windowsサービスプログラムは「サービス制御マネージャ」により管理され、Windowsサービスで何らかの問題が発生した場合などには、「イベントログ」にイベントを書き出すことで、システム管理者に情報を提供します。サービス制御マネージャ(サービスコントロールマネージャ、SCM)は、Windowsサービス管理の中核となる Windows 標準のユーティリティです。サービス制御マネージャには、コントロールパネルの管理ツールのサービスアプレットからアクセスできます。サービス制御マネージャは、Windowsサービスに関する各種の処理をおこないます。サービス制御マネージャの実体は、「SERVICES.EXE」という名前で、Windowsシステム起動時に自動的に起動され、各種Windowsサービスの自動開始をおこないます。また、Windowsサービスをインストールする際も、サービス制御マネージャが介在し、Windowsサービスに関する情報を、レジストリ(HKEY_LOCALMACHINE¥SYSTEM¥CurrentControlSet¥Services 以下)に保存します。

サービス制御マネージャの主な役割は、以下のとおりです。
・Windowsサービスのインストール/アンインストール
・サービスアプレットなどから要求を受け付け、該当のWindowsサービスに送信
・スタートアップの種類が自動開始のWindowsサービスを、OS起動時に開始
・インストール済みのWindowsサービスをレジストリで管理
・動作中のWindowsサービスの状態をレジストリで管理

Windowsサービス・サービス動作

Windowsサービスは、サービス制御マネージャからの開始・停止・一時停止・再開などの要求により動作します。Windowsサービスの状態としては、停止状態・実行状態・一時停止状態があります。また、通常のデスクトップアプリケーションと異なり、Windowsサービスの実行可能ファイルは、開始前にインストールしておく必要があります。基本的な処理だけをおこなうWindowsサービスであれば、開始と停止だけをサポートしていれば問題はありません。一時停止・再開については、処理の中断と再開が可能でなければ、サポートすべきではありません。例えば、通信をおこなうWindowsサービスが実行状態の時にサービス制御マネージャからの一時停止の要求に対して、Windowsサービスがどのように動作するかを考えてみてください。この場合、通信中のパケットやコネクションを破棄するか、一時停止の要求を遅らせるか、一時停止を受け付けた後はクライアントからの要求を受け付けないなどの様々な方法が考えられますが、それらに応じた例外処理などを組み込み・テストする必要があります。

スタートアップ

Windowsサービスは、Windowsシステム起動時に自動的に開始するか、手動で開始するか、あるいは無効とするかの3種類が選択できます。スタートアップの種類は、コントロールパネルのサービスアプレットで確認・変更ができます。

依存関係

Windowsシステム起動時に、Windowsサービスは自動的に開始することができますが、Windowsサービスの起動順序は通常、Windowsシステム(OS)によって決定されます。Windowsシステムでは、他Windowsサービスの起動完了を待たずに、次々とWindowsサービスが起動されます。
複数のWindowsサービスを、ある一定の順序で起動したい場合は、Windowsサービスの依存関係を設定します。Windowsサービスの依存関係はレジストリで設定します。例として、Service1 -> Service2 の順にWindowsサービスを起動したい場合、Service2のレジストリに、依存関係を設定します。

ハイブ

HKEY_LOCAL_MACHINE¥SYSTEM¥CurrentControlSet¥Services¥Service2

キー

DependOnServices

タイプ

REG_MULTI_SZ

Service1

先に起動させたいWindowsサービスが複数ある場合、サービス名を各行に1つずつ入力します。依存関係は、コントロールパネルのサービスアプレットで、各Windowsサービスのプロパティを表示して、確認できます。Windowsサービスは NETコマンドで開始・停止できます。Windowsサービス開始/停止をバッチファイルで自動化すると、システム管理作業負荷が軽減されます。

Windowsサービスプログラムの開発方法

Windowsサービスプログラムの開発方法は、C++を使った従来の開発方法と、Visual Studio .NETを使った新しい開発方法の2種類があります。

従来の開発方法

Visual Studio .NETリリース以前では、Windowsサービスは C++(またはC言語)でしか開発できず、Windowsサービス固有のWIN32APIを呼び出すなど、開発はとても困難な状況でした。また、Visual Studio 6.0の ATL(Active Template Library)で、ある程度のスケルトン(枠組み)は作成できましたが、インストーラは別に開発する必要があり、イベントログへの書き込みなども貧弱なもので、開発効率はよくありませんでした。

Visual Studio .NETでの開発方法

Visual Studio .NET では、Windowsサービスは、Visual Studio .NET のプロジェクトとして作成でき、Visual Basic .NET(以下、VB.NET)をはじめ 様々なプログラミング言語で開発できるようになりました。Windowsサービスには、サービス制御マネージャから受け付ける要求(コマンド)をプロパティに設定し、Windowsサービスが受け付けた要求に対する処理をプログラミングします。サービス制御マネージャからの開始・停止・一時停止・再開などの要求に応じたコードをプログラミングすれば、簡単なWindowsサービスプログラムであれば開発可能です。また、インストーラクラスを使用して、Windowsサービスのインストーラを作成することもできます。



風水吉凶方位 風水吉凶方位 |  奇門遁甲 奇門遁甲 |  金運神社 金運神社 |  仏像 仏像 |  論語 論語 |  般若心経 般若心経 |  二十四節気 二十四節気 |  菜根譚 菜根譚 |  SharePoint活用 SharePoint |  OneNote活用 OneNote |  ICT活用 ICT