私はC#のWindowsサービスを持っています。私はそれを停止しようとすると停止状態になり、私はonStopメソッドにブレークポイントを置いたとき、それはヒットしていません。問題をデバッグすることはできません。私はサービス全体の例外処理と未処理の例外処理を追加しましたが、エラーは発生しません。すべてのことは、それがcanStop trueに設定されservieでうまく、また、RequestAdditionalTime()を使用しています。C#ウィンドウサービスOnStopが呼び出されない
また、app.configでlegacyUnhandledExceptionPolicy enabled = "true"を設定しました。しかし、助けのない。 サービスコントロールマネージャがOnStopメソッドを呼び出さないようにするスレッド/リソースの問題のようです。または、サービスが既に破損した状態になっている可能性があり、サービス制御マネージャーがサービスを停止できません。それは、状態を停止から停止に変えるだけです。
サービスをexeにコードを添付してデバッグしようとすると、サービスを停止しようとしても何も起こりません。 onstopメソッドが呼び出されていません。
In Startメソッドは、30秒ごとに一種のポーリングを継続するスレッドを開始します。 onStopメソッドが呼び出されたとしたら、このスレッドを中止します。これがこのサービスがどのように開発されたかです。 誰かがこの問題をデバッグする方法についてアドバイスをいただけますか?
いくつかのスレッドの問題がある場合、またはOnStartメソッドのスレッドがサービスコントロールマネージャに利用可能なリソースを固定している場合、デバッグに使用できるツールがありますか? 緊急のことを親切に助けてください。
OnStopメソッド内のコード:
try
{
RequestAdditionalTime(10*60*1000);
IntPtr handle = this.ServiceHandle;
KServiceStatus.currentState = (int) State.SERVICE_START_PENDING;
SetServiceStatus(handle, ref KServiceStatus);
RequestAdditionalTime(30000);
if ((onStartThread == null) ||
((onStartThread.ThreadState &
(ThreadState.Unstarted | ThreadState.Stopped)) != 0))
{
onStartThread = new Thread(new ThreadStart(KWindowsServiceHandler.OnStart));
onStartThread.Start();
}
KServiceStatus.currentState = (int) State.SERVICE_RUNNING;
SetServiceStatus(handle, ref KServiceStatus);
}
OnStartThreadは、サービスが実行されるまで実行されているになります。ポーリングをする必要がありました。 onStopメソッドがコール(呼び出されていない)の場合、このOnStartThreadをアボートします。
おかげで、
カマル
サービススレッドにはどこにThread.Join()が含まれていますか?他の回避可能なハードロックブロッキング待っている?もしそうなら、それを遠ざける。 –
とThread.IsBackgroundは、例外的なクリーンアップが絶対的に必要なものを除くすべての非メインワークスレッドに対してtrueに設定されます。 OnStartメソッドの –
私はthread.joinを呼び出すことができません。 onStartThreadは30秒ごとにポーリングするために必要です。だから私の唯一の選択肢は、サービスが停止しているときにOnStartThreadを中止することです。 –