検索
特集

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

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

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

サービスのラッパークラスを作る

 さてサービスを作成してインストールしたところで、デスクトップクライアントアプリケーションがAppMonitorサービスとやり取りできるようにする方法を考えていこう。

 これを実現するもっとも簡単な方法は、サービスにOnCustomCommandイベントを実装しておき、それぞれのアプリケーションがモニタリングのコマンドをサービスに向けて送信できるようにする方法だ(これについてはすぐ後に述べる)。Windowsサービスは整数値だけを受け取ることができ、戻り値を返すことはできない。

 ユーザーサービスコマンドの規約に関する不十分なドキュメントによれば、サービスのカスタムユーザーコマンドは、128〜255の範囲でなければならないことになっている。128より小さな値は、システムレベルのコマンドとしてWindowsによって予約されているためだ。もし、この範囲外のカスタムサービスコマンドを送ると、次のような分かりづらいWin32例外を受け取ることになってしまう。

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

 AppMonitorサービスとのインタフェースを実装するもっとも簡単な方法は、すべてのデスクトップアプリケーションから利用できるラッパークラスを作成することだ。

 ラッパークラスの目的は、どこでどのようにモニタリングサービスが実装されているのかという詳細を隠すことだ。ラッパークラスを利用することで、クライアントアプリケーションにいっさい影響を与えることなく、モニタリングサービスを容易に設計変更できるようにもなる。

 さまざまなモニタリングコマンドのコードをエミュレートするMonitorWrapperクラスを作ろう。このクラスには、外部アプリケーションがモニタリングコマンドを送信できるひとつのメソッド(MonitorThis)を実装しておく(リスト2)。

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

 Windowsサービスのクラス群を利用するには、ServiceProcess名前空間を参照する必要があるという点に注意しよう。

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

 そしてServiceProcess.dllコンポーネントを参照設定するため、ソリューションエクスプローラの[参照設定]フォルダの下で[参照の追加]を選ぶ(画面3)。


画面3■ServiceProcess.dllへの参照を追加する。System.ServiceProcess名前空間を利用するプロジェクトでは、Windowsサービスクラスのオブジェクトやプロパティとやりとりするために、ServiceProcess.dllコンポーネントを明示的に参照設定しなければならない

 ServiceProcessコンポーネントを参照設定することで、Windowsサービスに関する中心的な機能を担うServiceControllerクラスを利用できるようになる。ServiceControllerオブジェクトを使うことで、サービスに問い合わせを出したり、サービスの制御、ほかサービスに関するほぼすべてのプロパティを設定することができる。

 MonitorThisメソッドの実装から分かるように、最初にすべきことは、AppMonitorサービスに関連付けられたServiceContollerオブジェクトのインスタンスを得ることだ。インスタンスが存在したら、ExecuteCommandメソッドを使ってサービスにコマンドを送信する前に、サービスが開始されているかどうかを確認する。

 さてMonitorWrapperクラスを書いたところで、ほかのデスクトップアプリケーションから使えるような配置を考えなければならない。一般にはクラスをGACに配置することになるが、本稿では話を簡単にするため、サンプルのデスクトップアプリケーション(SecurityController)において、MonitorWrapperクラスをプロジェクトの参照設定することにする。

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

© Copyright 2001-2005 Fawcette Technical Publications

ページトップに戻る