検索
特集

初めて作る.NET WindowsサービスVisual Studio Magazine(2/7 ページ)

特にUIを持たずWindowsのバックグラウンドで動作する「Windowsサービス」。この特集では、実践的な開発手法レクチャーとして、.NETアプリケーションにモニタリング機能を提供するWindowsサービス作成方法を解説していく。

PC用表示 関連情報
Share
Tweet
LINE
Hatena

Windowsサービスを作る

 まずは、Windowsサービスプロジェクトの作成から始めよう。[ファイル]メニューから[新規作成]→[プロジェクト]を選択し、「Windowsサービス」のテンプレートを選ぶ。このサンプルでは、サービス名としてAppMonitorという名前を使うものとする。

 するとVisual Studio .NETによって、「AppMonitor.vb」というVB.NETのファイルを1つ含んだ新しいプロジェクトが作成される。このファイルをダブルクリックして、デザインビューを表示させる(画面1)。


画面1■Windowsサービスのプロジェクトを作成する。プロパティを設定することで、サービスがどのようなイベントに受け応えをするのかを定義する。AutoLogプロパティを有効にすることで、すべてのサービスイベントをWindowsのイベントログに記録するようにもできる

 この時、サービスプロジェクトに対していくつかのプロパティを設定できるという点に注目しよう。

 例えば、このサービスが[停止][一時停止][再開]、その他のイベントに応答するかどうかを設定できる。そして、AutoLogプロパティをTrueに設定すれば、[停止]や[開始]といったサービスイベントをWindowsのイベントログに記録することが可能だ。

 画面1は、AppMonitorサービスプロジェクトのプロパティページを示したものだ。

 さて、サービスのソースコードを見るために、“click here to switch to code view”というリンク(訳注:日本語版では「ここをクリックするとコードビューに切り替わります」)をクリックしよう。まず気づくのは、AppMonitorクラスは、System.ServiceProcess.ServiceBaseクラスから継承しているという点だ。この基底クラスは、サービスに対する定義やサービスとやりとりするのに必要となるすべてのイベントやプロパティを備えている。

 Visual Studio .NET 2003は、OSのブートプロセスによってサービスが最初に(実行ではなく)読み込まれた時に実行される、Mainサブルーチンのコードを生成する。

*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***

 ServicesToRunオブジェクトには、同じプロセス空間(つまりシステムリソースの消費を抑えられる)のもとで実行させたいサービスクラスの配列を入れておく。ただし同じプロセス空間で実行されても、管理についてはそれぞれ独立する。

 そしてこのサービスの配列をServiceBase.Runメソッドに引き渡す。ServiceBase.Runメソッドは、渡されたサービスを調べ、[スタートアップの種類]が[自動]に設定されているものすべてを開始する。

 最初に作成したサービスのクラスには、「Service1」という名前が自動的に付けられるという点に注意してほしい。もしサービスのクラス名を変更するならば、手作業でコードの行を次のように変更しなければならない(訳注:下記のコードは「Service1」というクラス名から「AppMonitorService」というクラス名に変更した場合)。

*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***

 Visual Studio .NET 2003では自動生成されないが、基底クラスにおけるいくつかのWindowsサービスのイベントをオーバーライドすることで、イベント処理をフックできる。AppMonitorサービスにおいて、サービスイベントをオーバーライドしたコードをリスト1に示す。プロシージャはオーバーライドとなるため、正しくコンパイルするためには、プロシージャ名や引数は厳密に合致させなければならない。

*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***

© Copyright 2001-2005 Fawcette Technical Publications

ページトップに戻る