使用退出代码使 Windows 服务失败

Failing a Windows Service with an exit code

我希望我的服务能够远程重启(通过不属于此问题的 TCP 客户端)。我在服务的“恢复”选项卡上将服务配置为在失败时重新启动。在我的代码中,我设置了 ServiceBase.ExitCode to a non-zero number, say 1. I did not use Environment.Exit 来停止服务,因为没有必要终止进程。当我测试我的服务时,它正确停止并且 Windows 系统日志报告我的服务因错误而停止。它还命名错误。但是我的服务没有重启!当我改为使用 Environment.Exit(1) 时,Windows 系统日志报告我的服务意外停止,但没有指出错误。然后它会重新启动服务,就好像它失败了一样(就像它应该的那样)。

我的问题是,为什么服务不以非零退出代码重新启动?服务因错误而停止,但这并没有失败? Environment.Exit 是在失败时正确触发服务重启的唯一方法吗?我更喜欢使用 ExitCode,因为这样系统日志更清晰、更准确。

您是否选中“恢复”选项卡上的“为出现错误的停止启用操作”复选框?

technical documentation 开始,只有选中该选项时才会查询服务的退出代码。