2

是否有您可以订阅的 WMI 事件,当远程计算机启动并联机或脱机时会触发该事件?

我的应用程序需要能够监控机器的可用性,理想情况下,我想要一些可以通过事件而不是连续轮询工作的东西。

4

4 回答 4

1

订阅关闭事件在理论上是可能的。您可以订阅以获取“系统”事件日志的更新。您将从 Source = "EventLog" 和 EventID = 6006 中查找事件。此事件包含以下消息:

事件日志服务已停止。

这通常是关机时写入的最后一条消息。可是等等!通过 WMI 接收此信息可能会有问题。为什么?可能是 WMI 服务本身在 EventLog 之前关闭,因此它可能是 Catch 22。您可能会在您正在监视的服务器上查找关闭期间较早发生的另一条消息,并注意这一点。

启动事件伴随着一组更麻烦的 Catch 22s。想一想 WMI 事件是如何工作的。要获取事件,您必须通过 DCOM 打开与远程 WMI 服务器的连接,并发出 WQL 查询以指示您想要什么事件。为了接收启动事件,您必须“神奇地”知道在事件被触发之前打开所述连接并发出所述查询。

几年前,我编写了一项服务,该服务从远程服务器收集事件日志条目,用于网络监控应用程序。只是检测到遥控器的 DCOM 连接何时丢失并需要重建的逻辑是一个主要的痛苦。碰巧这是一个更大系统中的一个组件,它无论如何都会 ping 远程主机,所以我们最终依靠该信息来知道何时重建我们的 DCOM 连接。

于 2008-12-02T19:05:05.530 回答
1

这些系统是否使用 DHCP?监视 DHCP 续订以查看系统何时重新联机可能更容易。

于 2008-12-02T19:23:31.700 回答
0

对 Microsoft 和其他站点的细读不会产生有关 WMI 中“启动”事件的任何信息。但是,此线程建议在您要监视的服务器上的启动文件夹中安装一些东西。

于 2008-11-14T21:00:54.710 回答
0

通常,根据我的经验,最好使用 active (polling/pinging/whatever you want to call it)

你不喜欢投票怎么办?(总的来说,我和你一样不喜欢大多数用途的轮询,但在这种情况下,它可能是一个很好的解决方案)

至少您可以创建一些小型轻量级轮询过程,然后在机器状态发生变化时向一组订阅者触发事件。

然后,如果您找到更好的解决方案,您已经有了事件接口。

于 2008-12-02T19:39:19.843 回答