サービス アプリケーションをデバッグするための最適な方法の選択
サービス アプリケーションをデバッグするには、いくつかの方法があります。 適切な方法を選択するには、まず、サービス アプリケーションにデバッガーをアタッチする時刻と、使用するデバッグ構成の 2 つを選択する必要があります。
デバッガーをサービス アプリケーションにアタッチできる段階は 3 つあります。
サービス起動の初期段階。 デバッガーは、サービスの開始時に自動的に起動されます。 サービスの初期化コードをデバッグする場合は、このオプションを選択します。
サービスが初めて例外を検出した場合。 デバッガーは、例外またはクラッシュが発生したとき、またはサービス アプリケーションが DebugBreak 関数を呼び出すと自動的に起動されます。 問題が発生したときにデバッガーを表示させ、それ以前には表示させない場合は、このオプションを選択してください。
サービスが正常に実行された後。 デバッガーは、既に実行されているサービスにいつでも手動でアタッチできます。 デバッグの事前準備を行わない場合は、このオプションを選択します。
選択できるデバッグ構成は 3 つあります。
ローカル デバッグ。 サービスと同じコンピューター上で実行されている 1 つのデバッガー。
リモート デバッグ。 サービスと同じコンピューター上で実行されているデバッグ サーバー。2 台目のコンピューターで実行されているデバッグ クライアントから制御されます。
カーネル制御のユーザー モード デバッグ。 サービスと同じコンピューター上で実行され、2 台目のコンピューター上のカーネル デバッガーから制御されるユーザー モード デバッガー。
サービスが Windows Vista 以降のバージョンの Windows で実行されている場合、これらの選択肢を組み合わせる方法には 1 つの制限があります。 サービスの起動時または例外が発生した時点からデバッグする場合は、リモート デバッグまたはカーネル制御のユーザー モード デバッグを使用する必要があります。
つまり、サービスが既に実行されている後にデバッガーを手動でアタッチする予定がない限り、ローカル デバッグを使用することはできません。 この制限は、これらのバージョンの Windows では、サービスがセッション 0 で実行され、サービスに自動的に起動され、サービスにアタッチされるすべてのデバッガーもセッション 0 にあり、サービスが実行されているコンピューター上にユーザー インターフェイスがないためです。