繁体   English   中英

如何获得Windows服务自定义状态? [C ++ / C#]

[英]How to get a Windows Service custom Status? [C++/C#]

我创建了一个C#Windows服务(Serv.exe),该服务负责应正在运行的应用程序(A.exe)的请求执行各种任务,其中一些可能会花费很长时间,因此我需要一种方法来了解我从调用应用程序(A.exe)请求的操作(在服务上运行)的状态。

目前,我开始实现此目的的方式是使用ControlService(句柄,命令,状态)向服务发送自定义命令以执行所请求的任务,我也使用QueryServiceStatus(句柄,状态)来获取状态来自SCM的服务-因此,基本的管道就在那里并且可以正常工作。

现在我遇到的问题是,在发送我的ControlService命令(可以正常工作)之后,调用应用程序(A.exe)保持运行,并且在某个时候它需要知道它所请求的服务任务是否完成-因此,我正在寻找一种查询服务以报告自定义状态的方法,而不是实际服务的标准运行,停止,挂起,暂停状态,而是我使用ControlService()请求发出的请求状态。

这是可能吗? 任何帮助或提示将不胜感激。

谢谢,

过去,当我不得不处理更复杂的通信时,通常会从QueryServiceStatus切换到让该服务实际提供通过IPC进行通信的方式。

套接字管道都可以很好地完成此任务。 就这种方式传达的信息而言,客户和服务几乎可以享有无限的自由。

对我来说,很好的方法是设置一个外部队列,例如MSMQ或数据库表。 这些代码易于编写,支持应用程序和服务之间的双向通信,甚至允许多个应用程序甚至通过网络与一个服务进行通信,并允许您关闭应用程序,并在消息完整的情况下启动它。 另外,调试起来更容易,因为您可以检查流量,尤其是在使用数据库并将消息标记为已读而不是删除消息的情况下。 当您不想使用重量级数据库或不想担心是否已安装MSMQ或正在运行MSMQ时,通过System.Data.Sqlite包装器使用SQLite十分适合。

另一个选择是将逻辑放入WCF服务中,并通过HTTP或TCP与之通信。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM