Windowsサービスのデバッグ

こんにちはハブラ Windowsサービスを作成したことがないが、突然必要になった場合、これは あなたのための小さな投稿。



なぜこれだけなのですか?



サービスの作成を開始した場合、サービスのデバッグに関して疑問が生じます。 インターネットでは、ほとんどの場合、デバッガーを既に実行中のサービスプロセス接続する方法に関する記事を書いています 。 なぜなら サービスは通常のWindowsプロセスではありません。VisualStudioから開始することはできません。



サービスのインストール



開始しようとすると、おそらくサービスを開始できないというメッセージが表示され、 installutil.exe



を使用してインストールする必要があります。

Windowsサービス開始エラーメッセージ

サービスをインストールするには、パスに沿ってあるVisual Studioコンソールが必要です。

→ → Visual Studio 2008 → Visual Studio Tools → Visual Studio 2008 Command Prompt



(VSによってインストールされたバージョンによって、パスは異なる場合があります)

コンソールを起動した後、サービスがDebug



モードになっているディレクトリに移動してインストールします。

installutil.exe /i < >



installutil.exe



不要になります。 便宜上、Windowsサービス管理コンソールを起動します。

services.msc



これで、Visual Studioコンソールを閉じることができます。

最も興味深いものに渡します:-)



サービスのデバッグ



メソッド番号1(デバッガーの接続)



  1. Windowsサービス管理コンソールを使用してサービスを開始します。
  2. Visual Studioで、選択します
    Tools → Connect To Process



    表示されるダイアログで、サービスプロセス名を選択し、[ Attach



    ]ボタンをクリックします
その後、ブレークポイントを設定して、サービスをデバッグできます。

この方法には欠点があります。追加のトリックがなければ、 OnStart



ハンドラーにあるコードをデバッグすることはできません。



メソッド番号2(ソースコードからデバッガーを接続する)



program.cs



モジュールprogram.cs



で、 Main()



メソッドの開始直後に、以下を追加します。

#if DEBUG

System.Diagnostics. Debugger .Launch();

#endif






このコードは、デバッガーをプロセスに接続し、 DEBUG



モードでのみコンパイルします。 ここで、サービスをデバッグするには、Visual Studioからではなく、サービスコントロールコンソール(またはnet start



コマンド)を使用してサービスを開始する必要があります。 起動直後に、デバッガを選択するためのダイアログボックスが表示されます。



Visual Studioの実行中のインスタンスを選択し、[ Yes



]をクリックしてデバッグをお楽しみください!



メソッド番号3(コマンドラインパラメーターで開始)



gwynbleiddにより提案



別の方法があります-コンソールアプリケーションとしてサービスを開始する機能を提供する。 たとえば、コマンドラインで/ consoleを渡し、このフラグが設定されている場合は、アプリケーションをコンソールとして起動し、そうでない場合はサービスとして起動します。



このアプローチの利点:

実際、通常のコンソールアプリケーションのようにデバッグするのは非常に簡単です。 デバッグ情報をコンソールに出力できます



テキストのデバッグを手伝ってくれたkomrに感謝します:-)



All Articles