C# Windows サービスがあります。停止しようとすると停止状態になり、ブレークポイントを onStop メソッドに配置するとヒットしません。問題をデバッグできません。サービス全体に例外処理を追加し、未処理の例外処理も追加しましたが、エラーは発生しません。canStop が true に設定され、RequestAdditionalTime() も使用されているサービスでは、すべて問題ありません。
また、app.config で legacyUnhandledExceptionPolicy enabled="true" を設定しました。私にとっては、サービス コントロール マネージャーが OnStop メソッドを呼び出すのを妨げるスレッド/リソースの問題のように見えます。または、サービスがすでに破損している可能性があり、サービス コントロール マネージャーがサービスを停止できません。状態を Stop から Stopping に変更するだけです。
サービスexeにコードを添付してデバッグしようとすると、サービスを停止しようとしても何も起こりません。onstop メソッドが呼び出されていません。
Onstart メソッドでは、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 が中止されます。