自动重启服务(不要问系统)

时间:2012-08-20 09:52:39

标签: delphi windows-services

我需要重启我正在开发的服务。我不会在出现错误时要求服务经理这样做。我需要以某种方式在我的代码中执行此操作。有没有可能解决我的问题?

我需要的原因:

如果出现某些特殊异常,我需要重新启动。如果出现异常情况并将服务管理器设置为恢复服务,我可以关闭我的应用程序。

据我所知,服务管理器将在两种情况下重新启动服务 - 在事件查看器中生成错误时以及服务被弯曲时。

如果在事件查看器中出现错误,我的服务将重新启动是不利的,因为我的应用程序在事件查看器中生成了一些我仍然无法理解的错误。这些错误对服务工作质量没有影响。我需要重新启动服务停止矿石,以防我需要处理的例外情况。

3 个答案:

答案 0 :(得分:1)

您只需要在错误标志重启时设置服务。 什么是错误?阅读:http://msdn.microsoft.com/en-us/library/ms685939.aspx 退出应用程序并报告干净退出到操作系统。 如果不这样做,那么Service Manager会假定您崩溃并且无法生成正确的报告。您可以在有或没有正确报告的情况下暂停您的服务应用程序。 http://msdn.microsoft.com/en-us/library/ms685996.aspx

以下是第一个答案版本,假设主题入门者需要“热门升级”功能。它仍然可以使用,但在崩溃时自动重启是多余的。


您提供两项服务。

一个是工作者,另一个是监视器和重新启动器 - 就像过时的Interbase / Firebird方案,就像一些木马病毒一样,等等。

或者一个是工作人员,第二个是备用工作人员静默跟踪更改,如果第一个崩溃则承担主导角色并产生下一个备用工作人员。这就是影子数据库服务器的作用。

后者只需要在崩溃和恢复工作之间接近零延迟,否则它太昂贵了。前者是脆弱的方案,被标准的win32服务属性淘汰。

答案 1 :(得分:1)

将您的服务工作转移到一个主题中。然后,服务可以在需要时简单地终止并重新创建线程,而无需重新启动服务本身。

答案 2 :(得分:0)

Windows已经提供了“重新启动服务”。无需在您的服务中也这样做。