方法 : Windows サービス アプリケーションをデバッグする
更新 : 2007 年 11 月
サービスは、Visual Studio 内ではなく、サービス コントロール マネージャのコンテキスト内から実行される必要があります。このため、サービスのデバッグは、他の種類の Visual Studio アプリケーションのデバッグに比べて複雑です。サービスのデバッグを行うには、サービスを起動してから、サービスを実行しているプロセスにデバッガをアタッチします。これにより、Visual Studio のすべての標準デバッグ機能を使用して、アプリケーションをデバッグできるようになります。
注意 : |
---|
プロセスが強制終了される可能性もあるため、アタッチするプロセスの特性や、アタッチによる影響をよく理解している場合に限って、プロセスにデバッガをアタッチしてください。たとえば、システムは WinLogon プロセスがないと動作しないため、WinLogon プロセスにデバッガをアタッチした後でデバッグを中止すると、システムは停止します。 |
デバッガをアタッチできるのは、実行中のサービスだけです。アタッチのプロセスは、サービスが現在実行している処理に割り込みを掛けます。実際にサービスの処理の停止や一時停止を行うのではありません。つまり、実行中のサービスに対してデバッグを開始すると、デバッグの間、サービスは技術的には起動状態のままですが、処理は中断されます。
サービスのプロセスにデバッガをアタッチすることにより、サービスの大部分のコードをデバッグできますが、デバッグできないコードもあります。たとえば、サービスが既に起動しているため、サービスの OnStart メソッドのコードや、サービスを読み込むときに使用する Main メソッドのコードは、この方法ではデバッグできません。これに対処する方法の 1 つは、デバッグ専用の一時的な "ダミー" サービスを作成し、サービス アプリケーションに追加することです。サービスを両方ともインストールし、"ダミー" サービスを起動してサービス プロセスを読み込むことができます。"ダミー" サービスがプロセスを起動した後は、Visual Studio の [デバッグ] メニューで、サービス プロセスへのアタッチを行うことができます。
プロセスにデバッガをアタッチした後で、ブレークポイントを設定し、設定したブレークポイントを使用してコードをデバッグできます。プロセスへのアタッチに使用するダイアログ ボックスを閉じると、デバッグ モードが有効になります。サービス コントロール マネージャを使用して、サービスの開始、停止、一時停止、および再開を行うことができます。これによって、設定したブレークポイントにヒットします。デバッグが完了したら、"ダミー" サービスを削除します。
メモ : |
---|
Windows サービス マネージャでサービスの起動時間が 30 秒以内に制限されるため、OnStart メソッドのデバッグが困難な場合もあります。詳細については、「Windows サービスをデバッグする場合」を参照してください。 |
サービスをデバッグするには
サービスをインストールします。詳細については、「方法 : サービスをインストールおよびアンインストールする」を参照してください。
サービス コントロール マネージャ、サーバー エクスプローラ、またはコードで、サービスを起動します。詳細については、「方法 : サービスを開始する」を参照してください。
Visual Studio で、[デバッグ] メニューの [プロセス] をクリックします。
[プロセス] ダイアログ ボックスが表示されます。
[システム プロセスを表示] をクリックします。
[選択可能なプロセス] セクションでサービスのプロセスをクリックし、[アタッチ] をクリックします。
ヒント : プロセスの名前は、サービスの実行可能ファイルの名前と同じになります。
[プロセスにアタッチ] ダイアログ ボックスが表示されます。
適切なオプションを選択し、[OK] をクリックしてダイアログ ボックスを閉じます。
メモ : デバッグ モードになります。
コード内で使用する任意のブレークポイントを設定します。
サービス コントロール マネージャを起動し、停止、一時停止、再開の各コマンドを送信してサービスを操作して、ブレークポイントをヒットします。サービス コントロール マネージャの実行方法の詳細については、「方法 : サービスを開始する」を参照してください。