我创建了一个C#windows服务(Serv.exe),它负责在正在运行的应用程序(A.exe)的请求下执行各种任务,其中一些可能需要很长时间并且我需要一种方法来从调用应用程序(A.exe)中了解我所请求的操作(在服务上运行)的状态。如何获取Windows服务自定义状态? [C++/C#]
目前我已经开始实现这个的方法是通过使用ControlService(句柄,命令,状态)向服务发送自定义命令来执行被请求的任务,我也使用QueryServiceStatus(句柄,状态)从SCM获得服务的状态 - 所以基本的管道工作就在那里并且正在工作。
现在我遇到的问题是,在发送我的ControlService命令(工作正常)后,调用应用程序(A.exe)继续运行,并且在某个点上,它需要知道它请求的服务任务是否完成 - 因此我正在寻找一种方法来查询服务来报告自定义状态,而不是实际服务的标准运行,停止,挂起,暂停状态,但是我使用ControlService()所做的请求的状态请求。
这是可能的吗? 任何帮助或暗示都会受到人们的赞赏。
感谢,
看看使用套接字,管道或RPC(或者像注册表这样的诡计)而不是使用Windows消息传递的原因,它将无法在Vista中运行,因为微软已经在使用会话的服务和应用程序之间实现了隔离。 – 2009-08-21 16:49:08
这将是更喜欢的方法?问题是我每隔23分钟只发送一次命令到服务器,所以打开端口和通道/管道似乎是过度杀伤性的 - 我认为Command很好,因为它非常简单,并确保交付,而不用担心安全,权限等等。 那么有没有办法让自定义状态回来? – Shaitan00 2009-08-21 16:50:30
我其实很喜欢Pipes(我喜欢的方法),特别是如果你使用C#。命名管道和匿名管道工作得非常好,开销相当低。如果您的客户端应用程序与服务在同一台计算机上运行,则它们特别容易。这种方法的另一个优点也是易于扩展。随着时间的推移,你总是可以添加更多的消息。管道可以是双向的,所以服务器可以直接通知客户端(不需要查询)等。 – 2009-08-21 16:57:38