我有一个我写的VB.NET Windows服务,它工作正常。在VB.NET中,有一个名为OnStop()的可重写方法,在服务停止时调用它。但是,如果某人实际从服务MMC控制台窗口停止服务,它似乎只会停止。
我的问题是,是否有一个事件或一个可覆盖的方法在服务停止时被调用,无论它是如何停止的(例如计算机重新启动,发生异常并关闭服务等等)?
答案 0 :(得分:5)
没有一个事件可以处理所有这些事件。您列出的大部分活动都可以单独处理。
请注意,您无法依赖这些事件100%的时间。在某些情况下,每个事件都将无法运行。例如,如果我走路并撕掉电源线,电源相关事件将不会触发。您的代码必须考虑到服务关闭,而不事先通知。
答案 1 :(得分:0)
您可以覆盖OnShutdown以捕获断电事件(重新启动),并覆盖OnStop以处理MMC关闭事件。
但是,没有一种方法可以处理异常。如果您的服务崩溃,您需要进行异常处理以处理这种情况。
答案 2 :(得分:0)
基于Inbar Gazit的Change in System.ServiceProcess shutdown is coming in 3.5 RTM帖子,在.NET 3.5之前,OnStop事件在计算机关闭期间未被调用,因此要处理此事件,您的服务需要覆盖OnShutdown方法(您还需要实现OnStop事件),但它应该在.NET 3.5中进行更改。根据Inbar的说法,.NET 3.5版本的ServiceBase会在关机期间调用Stop方法,但实现这两种方法可能更安全(请记住框架之间的差异)。
关于异常,它将取决于您的服务(或服务组件)如何处理它们。如果发生未处理的异常,服务不会停止,它会崩溃。所以处理这种情况完全取决于你:也许你确保所有方法都有异常处理,也许你在代码中添加一个未处理的异常处理程序等,但你必须在这里决定适当的策略。