検索
特集

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

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

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

モニタリング対象となるサンプルアプリケーションを作成する

 SecurityControllerプロジェクトは、.NETのWindowsフォームとして構成した単純なデスクトップアプリケーションで、AppMonitorモニタリングサービスの動作を確かめるために用いるものだ。

 この架空のセキュリティコントロールアプリケーションでは、先に作成したMonitorWrapperクラスを参照設定することで、セキュリティイベントに関連付けられたコマンドをサービスに向けて送信する。さらにServiceControllerオブジェクトを使ってWindowsサービスをどのように制御するのかを示すため、アプリケーションにはAppMonitorサービスを開始したり停止したりするボタンも用意した(リスト3)。

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

 上のコードを見ると分かるように、コマンドは(MonitorWrapperクラスに備わる)MonitorThisメソッドを通じて、AppMonitorサービスに送られる。[start]や[stop]のボタンを設けて、AppMonitorサービスを開始したり停止したりするコードを加えることもできる。先に説明したように、サービスはServiceControllerオブジェクトを通じて制御できるのだ。

 サービスにコマンドを送信することと、サービスの状態を変更することとの唯一の違いは、サービスの開始や停止は非同期にしなければならないという点だけだ。

 また、ServiceControllerオブジェクトのStartメソッドを呼び出すだけでも、サービスを開始できる。しかしそれでは、サービスが開始されたということが保証されない。そこでStartメソッドを呼び出した後に、WaitForStatusメソッドを呼び出して、望んだ状態にステータスが変化するまで、指定した時間(時間を省略した場合は永遠に)待つ必要がある。

 WaitForStatusメソッドがタイムアウトになったときには例外が発生する。この例外はcatchする必要がある。

 開始と同様にして、停止、一時停止、再開も処理できるのだ。Windowsサービスのデバッグは、外部プロセスのデバッグとよく似ている。

 統合開発環境の[ツール]メニューの[デバッグプロセス]コマンドから、実行中のWindowsサービスにアタッチ可能だ。統合開発環境のコードビューでブレークポイントを設定し、普通のアプリケーションと同じようにデバッグができる。

 また、Windowsサービスをデバッグする時には、「生存する」プロセスをデバッグしているという点に留意してほしい。ブレークポイントに到達した場合には、マシン上のサービスは停止し、ほかのいかなるイベントにも応答を返さなくなる。そのため、プロセスを再開することなく統合開発環境のデバッガを終了してしまうとサービスが停止状態に戻り、不安定な状態に陥る。さて簡単なモニタリングサービスを配置したところで、このモデルをどのようにして拡張できるかを少し考えてみたい。

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

© Copyright 2001-2005 Fawcette Technical Publications

ページトップに戻る