我正在编写一个需要显示多个Windows服务状态的监控应用程序。在当前版本中,我可以知道服务是运行,已停止,已暂停还是处于其中一个待处理状态。这很好,但我想知道是否有办法测试服务是否实际响应?我想它可能处于运行状态但根本没有响应!
我正在使用ServiceController
中的System.ServiceProcess
课程。您认为如果服务没有响应,ServiceController.Status
会返回异常吗?
你会如何处理这个问题?
由于
修改
似乎:ServiceController.Status
可以返回两种类型的异常:
System.ComponentModel.Win32Exception: An error occurred when accessing a system API.
System.InvalidOperationException: The service does not exist as an installed service.
没有关于反应性的信息。
答案 0 :(得分:2)
服务控制器类型和API只能根据服务对这些API的响应提供信息。
E.g。您可以创建一个正确响应这些API的服务,但在偶数小时内不提供任何功能。
最后,您需要根据服务功能定义“响应”(例如批处理器正在处理批处理)并提供一种机制(A2A API,WMI,性能计数器)来表示这一点。
答案 1 :(得分:2)
这可能很明显,但您是否尝试与服务交谈?
没有通用的方式与服务通信,因此Windows无法询问服务是否仍在正常响应。服务进入完全睡眠状态等待外部I / O发生是完全正常的,因此当服务实际处于活动状态并且功能完全符合设计时,Windows将无法获得响应。
唯一的方法是实际向其发送请求,并等待响应,为此您需要一些进程间通信通道,如:
基本上,如果您需要确定服务是否能够响应,您需要检查它是否正在响应。