Vb.net 引发异常时重新启动服务
我正在编写一个需要全天候运行的windows服务。这是一个非常简单的服务,它监视文件放入的目录并处理这些文件。如果引发未处理的异常,我需要重新启动服务Vb.net 引发异常时重新启动服务,vb.net,windows-services,Vb.net,Windows Services,我正在编写一个需要全天候运行的windows服务。这是一个非常简单的服务,它监视文件放入的目录并处理这些文件。如果引发未处理的异常,我需要重新启动服务 如果出现未经处理的异常,是否有办法让服务重新启动自身?您是否尝试过使用服务条目的“恢复”选项卡-您可以设置故障规则,包括“重新启动服务”-默认情况下,此选项为“无操作”将您的服务代码包装在一个运行程序中,该运行程序可以捕获任何错误并重新启动您的服务。最好的方法是将Try/catch块包装在服务中您可以允许抛出异常的方法周围 但是,可能会引发严重异
如果出现未经处理的异常,是否有办法让服务重新启动自身?您是否尝试过使用服务条目的“恢复”选项卡-您可以设置故障规则,包括“重新启动服务”-默认情况下,此选项为“无操作”将您的服务代码包装在一个运行程序中,该运行程序可以捕获任何错误并重新启动您的服务。最好的方法是将Try/catch块包装在服务中您可以允许抛出异常的方法周围 但是,可能会引发严重异常,导致服务立即停止。不要忽视这些!在这些情况下,处理异常、记录异常、通过电子邮件发送异常,然后重新发送异常。这样,您将被告知异常已发生,并将知道发生了什么错误。然后,您可以修复问题并手动重新启动服务
忽略它可能会在系统中导致您不知道的重大故障。如果服务停止,然后重新启动,然后无限期停止,则CPU/RAM的成本也可能非常高。服务小程序具有许多不同的恢复功能: 它可以对第一次、第二次和后续故障采取不同的操作:
- 在可配置的延迟后重新启动服务
- 运行程序(传递命令行参数,可能包括故障计数)
- 重新启动计算机(经过可配置的延迟,并发送特定消息)
我同意您可能不应该将“第三次和后续”配置为“重新启动服务”,否则您可能会陷入循环。如果您愿意,这可以通过编程完成,此代码不是我编写的。我正在发布包含源代码/二进制文件的Authors CodeProject页面的链接。在链接下面,我解释了如何实现作者代码
在初始化组件Sub中
更改
Me.serviceprocesinstaller1=新系统.ServiceProcess.serviceprocesinstaller
Me.ServiceInstaller1=新系统.ServiceProcess.ServiceInstaller
到
Me.serviceprocesinstaller1=新系统.ServiceProcess.serviceprocesinstaller
Me.ServiceInstaller1=New-Verifide.ServiceUtils.ServiceInstallerEx
更改
Friend WithEvents ServiceProcessInstaller1作为System.ServiceProcess.ServiceProcessInstaller
Friend WithEvents ServiceInstaller1作为System.ServiceProcess.ServiceInstaller
到
Friend WithEvents ServiceProcessInstaller1作为System.ServiceProcess.ServiceProcessInstaller
Friend WithEvents ServiceInstaller1 As Verifide.ServiceUtils.ServiceInstallerEx
Me.Installers.AddRange(新的System.Configuration.Install.Installer(){Me.ServiceProcessInstaller1,Me.ServiceInstaller1})
到
Me.Installers.AddRange(New System.Configuration.Install.Installer(){Me.ServiceInstaller1,Me.serviceprocesinstaller1})
添加
“设置重置时间计数-这是重置计数前的4天”
ServiceInstaller1.FailCountResetTime=60*60*24*4
'ServiceInstaller1.FailRebootMsg=“休斯顿!我们有问题”
'添加故障操作
ServiceInstaller1.FailureActions.Add(新的FailureAction(RecoverAction.Restart,60000))
ServiceInstaller1.FailureActions.Add(新的FailureAction(RecoverAction.Restart,60000))
ServiceInstaller1.FailureActions.Add(新的FailureAction(RecoverAction.None,3000))
ServiceInstaller1.StartOnInstall=True
祝你好运 我甚至没有意识到这是可用的。谢谢我会小心这样做。如果每次服务启动时都会引发严重异常,那么会发生什么?你怎么知道?我不是说这是一个好主意-我是说这是可以做到的…到那一点,真正的问题是为什么你会计划有未处理的异常,而不是捕获它们,如果这很关键,从代码中停止服务。你可以设置服务来计算失败的数量,对于第一次、第二次和第三次失败,您可以指定不同的操作。您还可以将失败计数附加到命令行,并在这么多天后重置失败计数。它在Vista之前可用吗?我似乎还记得,它是刚刚添加的