防止 Windows 服务管理器停止 C# 服务

6

我有一个自定义的Windows服务,具有自己的注册处理程序,如何防止它在接收到服务管理器的停止命令时停止?我在服务和GUI之间建立了管道通信,并且我只想从GUI停止它,当我向Windows服务发送消息“stop”时,而不是在尝试从Windows服务管理器停止它时。我正在使用C#。


2
当机器关闭时怎么办?停止服务的命令不是来自服务管理器吗? - paparazzo
1
这不是有悖于使用Windows服务的目的吗? - Joel Etherton
4
我不关心目的,我只是想去做。 - AlexandruC
事实是,我不希望用户停止它,即使是管理员。我该怎么做? - AlexandruC
这不应该是可能的。作为用户,我想能够停止任何服务。 - MrFox
显示剩余2条评论
2个回答

13

这个回答是否解答了您的问题?

http://bytes.com/topic/c-sharp/answers/444965-prevent-service-stopping

将CanStop属性设置为false。然后,您需要一个应用程序,用户可以使用它来请求停止。然后,此应用程序将通过远程方式与您的服务进行通信(可能是通过远程对象调用),如果情况允许,则停止自身。您应该能够通过动态设置“CanStop”为true,然后使用ServiceController类连接自己并发出“Stop”命令来实现此操作。


同意您的评论,无法阻止OnStop中的停止命令。我已删除我的答案。 - paparazzo
太完美了,正是我在寻找的东西。 - AlexandruC

0

作为替代方案,您可以简单地保护服务设置(修改服务 DACL),以便只有特殊用户帐户(可能还包括 SYSTEM)具有停止服务和在安装期间安装此特殊本地用户帐户的权限。

然后,您的控制应用程序可以使用此特殊用户的安全令牌使用标准的服务控制管理器功能,一切都将按预期工作,而无需执行任何异常操作。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接