初めて作る.NET Windowsサービス:Visual Studio Magazine(4/7 ページ)
特にUIを持たずWindowsのバックグラウンドで動作する「Windowsサービス」。この特集では、実践的な開発手法レクチャーとして、.NETアプリケーションにモニタリング機能を提供するWindowsサービス作成方法を解説していく。
サービスをインストールする
サービスを作成したら、該当サービスをインストールできるようにしなければならない。
AppMonitorプロジェクトにインストーラを追加するには、デザインビューに切り替え、プロパティタブにある[Add Installer]というリンク(訳注:日本語版では[インストーラの追加])をクリックする(画面1参照)。
このリンクをクリックすることで、プロジェクトにProjectInstaller.vbというモジュールが加わる。このモジュールをデザインビューで開くと、2つの新しいコンポーネント(ServiceProcessInstallerとServiceInstaller)が含まれていることを確認できる。ServiceProcessInstallerコンポーネントはWindowsサービスプロジェクトのためのものであり、サービスが実行される時のアカウント種別(LocalSystem、LocalUser、Userなど)と資格情報(クレデンシャル)を保持する。
ServiceInstallerコンポーネントは、レジストリ(HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services)に書かれるサービスに関する情報を保持する。この情報には、「サービス名」「表示名」「依存するサービス群」「スタートアップの種類([自動]、[手動]、[無効]――標準設定では[手動])」が含まれる。
プロジェクトに複数のサービスを含んでいるなら、それぞれのサービスに対するServiceInstallerコンポーネントを個別に用意すべきだ。なお、ServiceInstallerコンポーネントのInstallイベントやUninstallイベントを使うと、インストール時の追加処理を実装することもできる。
いちどこれらのコンポーネントがプロジェクトに追加され、コンパイルされると、RunInstaller属性がTrueに設定される。インストーラが実行される時には、RunInstaller属性がTrueであるクラスだけがインストールされる(自動生成されたコードとProjectInstaller.vbモジュールにおいてフック可能なイベントについてはリストAを参照)。
*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***
AppMonitorプロジェクトのディレクトリ直下にあるbinディレクトリに移動して、InstallUtilプログラムを実行すれば、サービスをインストールできる。
InstallUtilは.NET Frameworkのユーティリティで、インストールの対象となる実行環境上の.NETインストーラを実行するものだ(.NET Frameworkをインストールしたあとに、.NET Frameworkのディレクトリにパスが通してあるものと想定する)。また、AppMonitorサービスをインストールするには、次のコマンドを利用する。
*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***
同様にInstallUtilを使って次のように指定すれば、サービスをアンインストールできる。ただしサービスが停止している場合に限る。
*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***
.NET Frameworkの複数バージョンを使っている場合には、コンパイルした.NET Frameworkと同じバージョンのInstallUtilを使わなければならない。InstallUtil.exeは、.NET Frameworkのディレクトリにある(訳注:x.y.zzzzはバージョン番号)。
*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***
AppMonitorプロジェクトでInstallUtilを実行したら、そのコマンドウィンドウの結果を確認しよう。InstallUtilは、結果を「サービス名.InstallLog」というファイルにも記録する。
Windowsサービスをコンパイルおよびインストールする時の最後の注意点は、プロジェクトの\binディレクトリからサービスをインストールした場合、サービスが実行されている間は該当サービスのプロジェクトを再コンパイルできなくなるという点だ。これは、Windowsがサービスの実行ファイルをロックするためである。
*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***
© Copyright 2001-2005 Fawcette Technical Publications