今度はVB.NETでWindowsサービスプログラムを作ろうとしていたりします。サービスとなると通常プログラムよりも表示や入力が制限される(基本的にやらない)ので、Visual Studio.NETのデバッガが利用できるのはかなり助かります。
Visual Studio.NETではサービスの作り方も楽になっていて、プロジェクトの種類にWindow applicationやDLLと並んでWindows Serviceなんてのが用意されているので、これを選びます。特集:初めて作る.NET Windowsサービス(ITmedia) なんかを参考にして、自動的に生成されるSystem.ServiceProcess.ServiceBaseのサブクラスのメソッドをコーディングするだけ。(まともに使えるサービスとなるといろいろ書く必要がありますが)
- まずexeをビルド
- installutilコマンドでサービスとして登録
- installutil.exeが通常パスの通ってないところにあります。スタートメニュー内のVisual Studioのツールフォルダにあるコマンドプロンプトを使うと、パスが通ってます
- 管理者権限である必要があります。私の開発ユーザーIDはVS Developer+制限ユーザなので、上のコマンドプロンプトをAdministratorとして起動してます。
- サービスの起動をUserに設定してた場合(Visual Studioプロジェクトのどこかで設定可能、忘れた;;)、ユーザーIDとパスワードを問われます。Windowsに登録してあるユーザーでいいのですが、ドメインを含めた[ドメイン]¥[ユーザー]で指定しないと登録に失敗します。ローカルマシンなら、.¥[ユーザー]で指定可能。
- コントロールパネルのサービスで、登録したサービスを起動
- これも管理者権限でサービスマネージャを起動する必要があります。全体を通して管理者でやったほうがはるかに楽^^;
- exeをビルドしたプロジェクトを開き、ツールのプロセスにアタッチで起動したサービスを選択
- これもVisual Studioを管理者権限で起動しておかないと、アタッチ後サービスへのアクセスが拒否されて、実質的にデバッグできません。結局管理者権限でやれということでしょうか? Visual StudioインストールするとVS Developerなんてユーザーグループ作るくらいだから、なんか別の方法がありそうですが・・・
これでデバッグ開始。ブレークポイントを設定しておけばそこで止まってくれます。デバッガーを止めるとサービスも止まってしまうので、またコントロールパネルで開始する必要があります。
Comments