机器联机时的WMI事件

问题描述:

当远程机器启动并联机或脱机时,是否有可以订阅的WMI事件?机器联机时的WMI事件

我的应用程序需要能够监视机器的可用性,理想情况下,我希望能通过事件工作而不是连续轮询。

+0

您不会说这是否适用于网络中的任何机器,或者您是否对特定的已知机器感兴趣? – Tim 2008-12-02 19:36:31

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

事件日志服务已停止。

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

引导事件带有一个更麻烦的Catch 22s。想想WMI事件如何运作一会儿。要获取事件,您必须通过DCOM打开与远程WMI服务器的连接,并发出WQL查询以指示您想要的事件。为了接收引导事件,您必须“神奇地”知道在事件被触发之前打开所述连接并发出所述查询。

几年前,我编写了一项服务,用于从网络监视应用程序的远程服务器收集事件日志条目。只是逻辑,以检测到DCOM连接到远程已经丢失,需要重建是一个主要的痛苦的脖子。正如它发生的那样,这是一个大型系统中的一个组件,无论如何都会攻击远程主机,所以我们最终依靠这些信息来知道何时重建我们的DCOM连接。

在微软和其他网站上仔细阅读并不会产生有关WMI中“启动”事件的任何信息。但是,此thread建议在要监视的服务器上的启动文件夹中安装某些内容。

这些系统在DHCP上吗?监视DHCP续订可能会更容易,以查看系统何时恢复联机。

通常从我的经验,这是做得最好活跃(轮询/查验/无论你怎么称呼它)

怎么样的投票,你不喜欢? (一般来说,我和大多数用户分享你对轮询的不喜欢,但这可能是一个很好的解决方案)

至少你可以做一些小的轻量级轮询过程,然后将事件触发到一组订户在机器状态发生变化时。

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