我有一个自定义的Windows服务,具有自己的注册处理程序,如何防止它在接收到服务管理器的停止命令时停止?我在服务和GUI之间建立了管道通信,并且我只想从GUI停止它,当我向Windows服务发送消息“stop”时,而不是在尝试从Windows服务管理器停止它时。我正在使用C#。
我有一个自定义的Windows服务,具有自己的注册处理程序,如何防止它在接收到服务管理器的停止命令时停止?我在服务和GUI之间建立了管道通信,并且我只想从GUI停止它,当我向Windows服务发送消息“stop”时,而不是在尝试从Windows服务管理器停止它时。我正在使用C#。
这个回答是否解答了您的问题?
http://bytes.com/topic/c-sharp/answers/444965-prevent-service-stopping
将CanStop属性设置为false。然后,您需要一个应用程序,用户可以使用它来请求停止。然后,此应用程序将通过远程方式与您的服务进行通信(可能是通过远程对象调用),如果情况允许,则停止自身。您应该能够通过动态设置“CanStop”为true,然后使用ServiceController类连接自己并发出“Stop”命令来实现此操作。
作为替代方案,您可以简单地保护服务设置(修改服务 DACL),以便只有特殊用户帐户(可能还包括 SYSTEM)具有停止服务和在安装期间安装此特殊本地用户帐户的权限。
然后,您的控制应用程序可以使用此特殊用户的安全令牌使用标准的服务控制管理器功能,一切都将按预期工作,而无需执行任何异常操作。