首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Windows服务恢复未重新启动服务

问Windows服务恢复未重新启动服务
EN

Stack Overflow用户
提问于 2009-11-19 15:41:27
回答 4查看 25.6K关注 0票数 22

我将Windows服务的恢复配置为故障后一分钟延迟重新启动。但我从来没有让它真正重新启动服务(即使是最明显的错误)。

我在EventViewer上确实收到了一条消息:

无法找到源( MyApp.exe )中事件ID (1)的描述。本地计算机可能没有显示来自远程计算机的消息所需的注册表信息或消息DLL文件。您可以使用/AUXSOURCE=标志检索此描述;有关详细信息,请参阅帮助和支持。以下信息是事件的一部分:模块'MyApp.exe‘中地址00429874的访问冲突。写地址00456704。

我还有别的事要做吗?我的代码(我使用Delphi)中是否有需要设置以启用此功能的东西?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2009-11-19 15:49:16

服务恢复用于处理服务崩溃的情况--因此,如果您转到taskmgr并右键单击服务流程上的"end process“,那么恢复逻辑就会启动。我不相信如果您的服务优雅地退出(即使服务退出时有错误),服务恢复逻辑就会起作用。

此外,eventvwr消息表明您的应用程序调用了指定事件ID 1的ReportEvent API,但是您还没有向事件查看器注册事件消息,因此它无法将事件ID 1转换为有意义的文本字符串。

票数 24
EN

Stack Overflow用户

发布于 2011-03-03 15:26:51

服务恢复仅适用于意外退出(退出(-1))调用。尽管我们以通常的方式停止服务的所有方式都不适用于恢复。如果您想要停止服务并仍然希望恢复工作,请调用exit(-1),您将看到错误消息为“服务因意外错误而停止”,然后您的服务将重新启动作为恢复设置。

票数 13
EN

Stack Overflow用户

发布于 2016-04-14 16:13:27

如果您将服务设置为由SCM重新启动,服务控制管理器将尝试重新启动服务。这是关于这里结构的文档中详细的SERVICE_FAILURE_ACTIONS。

当服务终止而不向服务控制器报告SERVICE_STOPPED状态时,该服务被视为失败。

可以通过设置SERVICE_FAILURE_ACTIONS_FLAG结构的fFailureActionsOnNonCrashFailures标志(请参阅这里 )对此进行精细调整。您可以通过检查恢复选项卡上的"Enable“复选框,从Services中设置此设置。

如果该成员为真,并且服务已配置了失败操作,则如果服务进程终止而没有报告SERVICE_STOPPED状态,或者它进入了SERVICE_STOPPED状态,但SERVICE_STATUS结构的dwWin32ExitCode成员不是ERROR_SUCCESS (0),则故障操作将排队。如果该成员为FALSE,并且服务已配置了失败操作,则只有当服务终止而不报告SERVICE_STOPPED状态时,故障操作才会排队。

因此,取决于您如何构造您的服务,如何配置您的失败操作,以及您在发生“致命错误”时所做的事情,调用ExitProcess()或exit()并返回一个非零值就足够了。但是,确保您的服务退出时不需要处理SCM的代码,这可能是最安全的,因为它告诉SCM您的服务已达到SERVICE_STOPPED状态。这确保了你的失败行为总是发生..。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1764187

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档