我有一个 C# Windows 服务。当我尝试停止时,它进入停止状态,当我在 onStop 方法中放置断点时,它不会被击中。无法调试问题所在。我在整个服务中添加了异常处理以及未处理的异常处理,但我没有收到任何错误。将 canStop 设置为 true 并使用 RequestAdditionalTime() 的服务一切正常。
我还在 app.config 中设置了 legacyUnhandledExceptionPolicy enabled="true"。对我来说,它看起来像是一些线程/资源问题,阻止服务控制管理器调用 OnStop 方法。或者服务可能已经处于损坏状态并且服务控制管理器无法停止它。它只是将状态从停止更改为停止。
当我尝试通过将代码附加到服务 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。