2009-08-28 18 views
5

私はvb.net 2008で開発された非常に単純なWindowsサービスを持っています。サービスにはアクセスできますが、ツール - >アタッチを行ってデバッグしようとすると、管理対象のタイプで、プロセスを選択できません。Windowsサービスプロセスを添付できません

サービスをデバッグするにはどうすればよいですか?

おかげ

+0

あなたの質問に基づいて回答を更新しました。 –

答えて

10

サービスに添付するになるはずですが、どうしてできないのか分かりません。その代わりに、Windowsサービス(またはOnStart()メソッド)のアプリケーションエントリポイントに次の行を挿入し、デバッグモードでコンパイルしてサービスを開始します。

System.Diagnostics.Debugger.Break(); 

サービスを開始すると、プロセスのデバッグを求めるメッセージが表示されます。 Visual Studio 2008デバッガを選択すると、プロセスがプログラムブレークポイントで読み込まれ、停止します。 F5キーを押して再度実行を開始します。

EDIT:

のは、あなたがサービス(リリースモードまたはデバッグモード - それは重要ではありません)を構築したとしましょうやサービスをインストールします。installutil使用していますが、まだそれを開始していません。サービスがでなければ、が実行されていない限り、引き続きコードを変更して再コンパイルできます。サービスを開始すると、サービスに最新のコード変更が反映されます。サービスの場合、exe/dllは使用中で置き換えられないため、サービスを完全にコンパイルできません。明らかに、単にサービスを停止し、サービスを再コンパイルして再起動します。要点は次のとおりです。コードを変更するためにサービスをアンインストールする必要はありません。ちょうどそれを停止し、コードを変更して、再コンパイルして、再起動してください。

デバッグモードとリリースモードのデバッグについては、プロセスにアタッチできない理由がわかりません。リリースのバージョンをデバッグすることは可能ですが、最適化が有効になっていると、コードをトラバースする問題が発生する可能性があるため、これをお勧めしません。最後の手段としてリリースモードのデバッグだけを使用しました。

デフォルトでは、Visual Studioアプリケーションをデバッグモードでビルドすると、プロジェクトのbin \ Debugサブディレクトリに配置されます。リリースモードでビルドすると、実行ファイルはbin \ Releaseサブディレクトリに置かれます。 installutilを使用してサービスをインストールする場合、重要なのはサービスが存在する場所だけです。あなたの場合は、サービスのリリースモードバージョン(installutil /u c:\myapp\myapp\bin\release\myapp.exe)をアンインストールし、プログラムのブレークポイントを入れ、デバッグバージョンをビルドしてから、installutilを使用してデバッグバージョンをインストールすることをお勧めします(bin \ Debugディレクトリから) 。

申し訳ありませんが、これは長らく残念です。私はそれがはっきりしていることを望む

+0

ありがとうございました。一つの質問があります。ここに私がしたことがあります。私はリリースモードでアプリケーションをビルドします。 utilをインストールしてinstallutil c:¥myapp¥myapp¥bin¥release¥myapp.exeのようなものでインストールしました デバッグモードでビルドしてから installutil c:\ myapp \ myapp \ bin \ debug \ myapp.exeを実行して、プロセスにアタッチしてみますか? –

+0

はい、デバッグモードでビルドし、bin \ debugフォルダからインストールする必要があります。 –

0

サービスあなたがいる限り、それがデバッグモードでコンパイルされたように、コマンドラインからexeファイルを実行することができますので、コンソールアプリケーション以外の何ものでもありません。プロセスがコマンドラインから実行されると、Debug => Visual Studioのプロセスにアタッチし、コマンドラインから起動したexeにアタッチします。 F5を使用してVisual Studio IDE内で直接実行することもできます。

サービスが特別なユーザーアカウントで実行されている場合、ビジュアルスタジオでデバッグする場合はvisual studioを起動するか、コマンドから実行する場合はコマンドラインからrunas/userコマンドを使用する必要がありますライン。

これが機能しない場合は....私に教えてください。

よろしく、 マイケル

3

あなたはあなたの実際のサービスのプロセスを見ていますか?サービス名を確認してください - servicename.vshost.exeのようなものですか?もしそうなら、それはあなたのサービスではなく、F5デバッグ(他のものの中でも)に使用されるビジュアルスタジオホスティングプロセスです。

サービスをデバッグするには、[すべてのユーザーからプロセスを表示する]チェックボックスをオンにします。実際のサービスプロセスservicename.exeがプロセスリストに表示されます。表示されている場合は、そのプロセスにアタッチしてください。

+0

はいTuzo私はservicename.vshost.exeのみ表示され、vshost.exeは表示されません。どこに問題があると思いますか –

+0

それらをデバッグすることができないので、vshost.exeを含むプロセスは無視してください。 「すべてのユーザーからのプロセスを表示する」にチェックを入れましたか?そうした場合、サービスプロセスはservicename.exeと表示されます。あなたがそこにそれを見ないなら、あなたのサービスが始まっていないことを意味するでしょう。サービスを開始してみてください。 –

15

MSDNの基本的なWindowsサービス作成の「チュートリアル」に従うと、これが実行されます。 [プロセスにアタッチ]ダイアログボックスにMyNewService.vshost.exeが表示されますが、無効になります。サービスを確認するには、サービスを表示するには、[すべてのユーザーからのプロセスの表示]と[すべてのセッションでのプロセスの表示]の両方をチェックする必要があります。このチュートリアルの指示に従っていれば、サービスは「SYSTEM」ユーザー名で実行されており、サービスは通常、別のセッションで実行されます。

これらのボックスの両方をチェックして(MyNewService.vshost.exeを無視すると)、MyNewService.exeが表示されます。これを選択してデバッグできます。

もちろん、サービスがブレークポイントにヒットするまでは何も起こりません。 OnPause(OnContinueのような)ハンドラを作成できますが、サービスを一時停止できるようにするには、サービス(AutoLogフラグと同じオブジェクト)にCanPauseAndContinueフラグを設定する必要があります。

私の64ビットマシンでのテストでは、プロジェクトを再コンパイルしても正常にデバッグできませんでした。コンパイルして再インストールしても動作しませんでした。私は、プロジェクトを再コンパイルし、セットアッププロジェクトを再コンパイルして、サービスをデバッグできるようにセットアップを再インストールする必要がありました。

最後に、イベントログは、コントロールパネルの[管理ツール]の[イベントビューア]で表示できます。 「MyNewLog」は、MSDNチュートリアルの説明に従って、アプリケーションとサービスログの下にあります。

+0

"これらのボックスの両方をチェックして(そしてMyNewService.vshost.exeを無視すると)、MyNewService.exe"が表示されます。 – user979189

1

show processes from all usersshow processes in all sessionsのチェックボックスを選択するだけでなく、 SelectボタンをクリックしてからManagedコードを選択する必要がありました。

enter image description here

関連する問題