如何让Windows服务请求重新启动?我知道Environment.Exit(1)与恢复选项服务设置有关,但是如果服务真的出错了怎么办?
背景:
我们有许多Windows服务,它们使用自治组件作为SOA体系结构的一部分。我们希望在自治组件更新时重新启动服务,但我们不希望每天只重新启动两个(发行版),如果出现真正的错误,我们也不希望服务无限期地重新启动。
发布于 2013-03-05 21:47:33
我们绕过它做了这个:
using System.Diagnostics;
Process.Start("cmd", "/c net stop \"Service1\" && net start \"Service1\"");似乎Process.Start()没有创建子进程,或者当父进程死亡时子进程没有被终止。
注意,进程运行的用户必须拥有启动和停止进程的权限。
发布于 2013-03-05 05:02:16
我已经创建了一些使用这种技术的自更新服务。我发现依赖恢复选项并不理想,因为它通常会让sysadmins感到您的服务正在他们的机器上爆炸(写信给事件日志,认为服务恢复是由于意外的服务停止而发生的)。
在我的例子中,我所做的是启动一个精心编制的可执行文件,这个帐户是在服务安装过程中创建的。该帐户被拒绝登录权限,并且仅控制我们的特定服务(使用icacals或等效于授予服务控制权限)。可执行文件被启动,它使用许多预定义的OnCustomCommand 服务命令与服务进行通信,这些服务命令告诉服务它已经更新,它需要完成它的操作,并尽快关闭。可执行文件在给定的时间内等待,一旦服务停止,它就在二进制文件周围移动,并执行许多其他自定义步骤,然后启动服务,然后退出。
我相信有更干净的方法来做这件事,但是在找了几个小时之后没有想出更干净的方法,我决定这在我们的情况下是可行的。这些年来,我在大量计算机上都没有遇到任何问题,除了由于管理员干扰了运行可执行文件的用户帐户而偶尔出现的权限问题。
https://stackoverflow.com/questions/15215325
复制相似问题