我正在开发一个应用程序,通过Windows服务在后台实现工作。 我已经通过MSDN教程创建了该服务,然后我可以正确启动或停止它。
我的服务还需要执行自定义命令。因此,我在服务的类中实现了“ OnCustomCommand ”方法。
我可以发送自定义执行命令,命令ID在128到255之间,因此我在网上找到了所有内容。
我的问题是:
当服务停止时,我无法对服务执行命令。每次我在ExecuteCommand()
上调用System.InvalidOperationException
时serviceController
都会Cannot control <myservice> service on computer '.'
。
executeCommand
服务运行时不会发生这种情况。
MSDN说当你调用ExecuteCommand时, 服务的状态不会改变。 如果服务已启动,则为状态 仍在运行。如果服务是 停了,状态仍然是Stopped, 等等。
所以我认为这对于已停止的服务实际上可以serviceController
。
我的服务作为LocalSystem服务安装,{{1}}以管理员权限运行。
有谁知道如何解决这个问题?
答案 0 :(得分:3)
对于已停止的服务,ExecuteCommand是不可能的。我相信您正在阅读的文档告诉您的是,如果停止,调用ExecuteCommand将不会启动该服务。这并不是说您仍然可以调用该方法;基本上没有对象存在来执行该方法。我认为你最好的解决方案是找到一种方法来确定服务是否已经停止,如果有,重新启动它然后调用ExecuteCommand。否则,您可以使用某种“脏黑客”并尝试呼叫,如果失败,捕获异常并启动服务并再次尝试。绝不是首选,但可能。
编辑:
假设您使用ServiceController,可以使用Status属性来确定服务是否正在运行。
答案 1 :(得分:0)
针对已停止的服务无法执行ExecuteCommands。
如果它没有运行,那么它就不会“听到”你发送它的命令。