处理VB.NET Windows服务的停止

时间:2011-09-21 14:32:01

标签: vb.net windows-services

我在VB.NET(VS2010)中创建了一个Windows服务,每分钟执行一次任务。当用户手动停止服务或重新启动系统时,如何确保在服务实际终止之前正确完成任务?

1 个答案:

答案 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