2

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

我需要的原因:

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

据我了解,服务管理器将在这两种情况下重新启动服务 - 在事件查看器中生成错误和服务停止时。

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

4

3 回答 3

1

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

于 2012-08-21T18:15:55.867 回答
1

您只需要在错误标志上重新启动来设置您的服务。什么是错误?阅读: http: //msdn.microsoft.com/en-us/library/ms685939.aspx 您退出应用程序并向操作系统报告干净退出。如果您不这样做,则 Service Manager 会假定您已崩溃并且无法做出正确的报告。无论是否正确报告服务应用程序,都由您决定。http://msdn.microsoft.com/en-us/library/ms685996.aspx

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


您提供两项服务。

一个是worker,另一个是monitor and restarter——比如过时的Interbase/Firebird方案,比如一些特洛伊木马病毒,等等。

或者一个是工人,第二个是后备工人,默默地跟踪变化,如果第一个崩溃,它承担主导角色并产生下一个后备工人。这就是影子数据库服务器的工作方式。

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

于 2012-08-20T10:18:46.877 回答
0

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

于 2012-08-20T10:04:50.870 回答