如何让 Windows 服务请求重新启动?我了解 Environment.Exit(1)
与恢复选项服务设置的结合,但如果该服务确实出现错误怎么办?
背景:
我们有很多 Windows 服务,它们使用自治组件作为我们 SOA 架构的一部分。我们希望在自治组件更新时重新启动服务,但我们不希望被限制为每天两次重新启动(发布),并且我们不希望服务在出现真正错误时无限期地重新启动。
最佳答案
我已经创建了许多使用这种技术的 self 更新服务。我发现依赖恢复选项并不理想,因为它经常让系统管理员感觉您的服务在他们的计算机上崩溃了(写入事件日志,表明服务恢复由于意外的服务停止而发生)。
在我的例子中,我所做的是在服务安装过程中创建的帐户下启动专门设计的可执行文件,这无疑是黑客行为但有效。该帐户被拒绝登录权限,并且只能控制我们的特定服务(使用 icacals 或等效工具授予服务控制权限)。启动可执行文件,它使用许多预定义的 OnCustomCommand
service commands 与服务进行通信。告诉服务它已经更新,它需要完成它正在做的事情,并尽快关闭。可执行文件等待给定时间,一旦服务停止,它就会在二进制文件中移动,并执行许多其他自定义步骤,然后启动服务备份,然后退出。
我确信有更干净的方法可以做到这一点,但是在寻找了几个小时后未能想出任何更干净的方法后,我决定这适用于我们的情况。多年来,它在大量计算机上使用,我没有遇到任何问题,除了由于管理员弄乱可执行文件运行所用的用户帐户而导致的偶尔的权限问题。
关于.net - 如何获取请求重新启动的服务?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15215325/