我有一個C#的Windows服務。當我試圖阻止它進入停止狀態,並且當我將斷點放入onStop方法中時,它不會被擊中。無法調試什麼是問題。我已經在整個服務中添加了異常處理,並且還處理了未處理的異常處理,但是我沒有收到任何錯誤。它的canStop設置爲true並且使用RequestAdditionalTime()的服務都可以。C#窗口服務OnStop沒有被調用
我也在app.config中設置了legacyUnhandledExceptionPolicy enabled =「true」。但沒有幫助。 對我來說,它看起來像一些線程/資源問題,阻止服務控制管理器調用OnStop方法。或者服務可能處於已經損壞的狀態,並且服務控制管理器無法停止它。它只是將狀態從「停止」更改爲「停止」。
當我嘗試通過將代碼附加到service 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。
感謝,
卡邁勒
服務線程是否在任何地方包含Thread.Join()?任何其他可避免的硬鎖阻塞等待?如果是這樣,讓它消失。 – 2012-04-16 09:46:02
..並確保所有非主要工作線程的Thread.IsBackground設置爲true,除非那些絕對需要清除清理的線程。 OnStart方法中的 – 2012-04-16 10:04:32
我無法調用thread.join。 onStartThread應該保持運行,每30秒輪詢一次。所以我唯一的選擇是在服務停止時放棄OnStartThread。 – 2012-04-16 10:13:54