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に感謝します:-)

Source: https://habr.com/ru/post/J69486/


All Articles