我在VB.NET(VS2010)中创建了一个Windows服务,每分钟执行一次任务。当用户手动停止服务或重新启动系统时,如何确保在服务实际终止之前正确完成任务?
答案 0 :(得分:3)
您应该覆盖Service's OnStop event。
' when stopping release the resources
Protected Overrides Sub OnStop()
ReleaseYourObjects()
End Sub
在这里,您应该完成任务并释放所有需要发布的资源。
重新启动时,不会再次调用服务的构造函数。因此,您不应该使用构造函数来执行启动处理,而是使用OnStart()
方法来处理服务的所有初始化,并使用OnStop()
来释放任何资源。
根据您的需要减少,停止计时器以便可以在OnStart
中重新启动它就足够了:
Me.ServiceTimer.Change(Timeout.Infinite, Timeout.Infinite)
如果您的任务是从它自己的线程启动的,那么您可以确保它能够正确完成。
当它在主线程中运行时......
...当Windows服务控制管理器(SCM)调用时 您是
OnStart()
,OnStop()
,OnPause()
或OnContinue()
方法 只有约60秒才能返回。如果你不回来 这次,SCM会将该服务标记为无响应。 过了一会儿,它可以直接杀死你正在运行的进程。 如果您需要更多时间来处理这些方法,可以 调用RequestAdditionalTime()方法并告诉SCM事情 正在谈论它预期的时间长一点。 (参见中的OnStop()方法 上面的例子。)
了解详情:http://www.codeproject.com/KB/system/LexnnWinService.aspx