我有一个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