4

Windows サービス アプリケーションを開発していて、異常な問題に気付きました。まず、Windows サービス ウィンドウからサービスを実行し、ステータスが "開始" になるのを待ちます。数分後、[停止] をクリックすると、20 秒ほど後にサービス ステータスが空白になり、サービスが停止したことが示されます。それでも、このサービスの背後にあるプロセスは実行を続けており、ステータスが更新されてから 10 ~ 30 秒間、タスク マネージャーで確認できます。私はWindows 7sp1で実行しています。イベント ビューアーも確認しましたが、サービスからのエラーは表示されません。(これについて言及する理由は、最初に「x サービスからのトランザクション応答を待っている間にタイムアウトに達しました」という形式のタイムアウト エラーを疑ったためです。)

プロセスの状態とサービスの状態の不一致を引き起こしている可能性のあるアイデアはありますか?

4

1 に答える 1

6

これは、サービスに関連するスレッドと関係のない (または関連付けが解除された) 実行を継続する他のスレッドがある場合に発生します。

プロセスはマルチテナントであり、複数のサービスをホストしている可能性があるため、停止コマンドは所有者プロセスを終了する必要があることを常に意味するわけではなく、そのプロセスでのサービスの実行を停止する必要があることに注意してください。

さらにデバッグするには、この不安定な状態が発生したときに、デバッガーをアタッチしてすべてのスレッドを停止し、各スレッドの呼び出しスタックを検査する必要があります。単一のサービス プロセスの場合、IO やその他の操作が完了するのを待っている間にスレッドがハングしたり、メッセージ ループ スレッドなどのアイドル状態のスレッドが発生することのないシグナルを待機している可能性があります。

于 2013-02-11T22:02:08.393 に答える