.net - 如何获取请求重新启动的服务?

标签 .net windows service

如何让 Windows 服务请求重新启动?我了解 Environment.Exit(1) 与恢复选项服务设置的结合,但如果该服务确实出现错误怎么办?

背景:

我们有很多 Windows 服务,它们使用自治组件作为我们 SOA 架构的一部分。我们希望在自治组件更新时重新启动服务,但我们不希望被限制为每天两次重新启动(发布),并且我们不希望服务在出现真正错误时无限期地重新启动。

最佳答案

我已经创建了许多使用这种技术的 self 更新服务。我发现依赖恢复选项并不理想,因为它经常让系统管理员感觉您的服务在他们的计算机上崩溃了(写入事件日志,表明服务恢复由于意外的服务停止而发生)。

在我的例子中,我所做的是在服务安装过程中创建的帐户下启动专门设计的可执行文件,这无疑是黑客行为但有效。该帐户被拒绝登录权限,并且只能控制我们的特定服务(使用 icacals 或等效工具授予服务控制权限)。启动可执行文件,它使用许多预定义的 OnCustomCommand service commands 与服务进行通信。告诉服务它已经更新,它需要完成它正在做的事情,并尽快关闭。可执行文件等待给定时间,一旦服务停止,它就会在二进制文件中移动,并执行许多其他自定义步骤,然后启动服务备份,然后退出。

我确信有更干净的方法可以做到这一点,但是在寻找了几个小时后未能想出任何更干净的方法后,我决定这适用于我们的情况。多年来,它在大量计算机上使用,我没有遇到任何问题,除了由于管理员弄乱可执行文件运行所用的用户帐户而导致的偶尔的权限问题。

关于.net - 如何获取请求重新启动的服务?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15215325/

相关文章:

linux - Docker 客户端卡住

powershell - 使用 PowerShell 向服务添加凭据

android - 如何从android中的后台服务获取 View ?

windows - 如何从 Windows 任务计划程序在 ( ubuntu bash windows 10 ) 上运行程序

windows - 如何创建自己的 URL 协议(protocol)? (例如 ://. ..)

c# - 两个日期之间的月差

c# - 如何计算一组日期之间的间隔?

windows - 来自多个进程的线程是否实际上同时运行

c# - 在 C#.NET 的方法签名中传递 'this' 的 VB.NET 等价物是什么?

c# - .NET CLR 运行时方法替换