首先是一些背景:
我目前正在使用 j-interop 从 Linux 机器查询对 Windows 机器的 WMI 调用,我正在对 WMI 运行此查询:
SELECT * FROM __InstanceCreationEvent WHERE TargetInstance ISA 'Win32_NTLogEvent'
并将其作为通知查询执行,这样我就可以在创建数据后立即取回数据。然而,这在(很少)时候证明是一个问题。
比如说,当用户更改根文件夹的权限时,我可能会被成千上万的日志淹没,系统可以很好地处理这个问题,java 和互操作代码很高兴,但是 WMI 周期似乎是这样的:
Hook into event
while(forever)
{
Query server for next event.
Do work with event.
}
显然这对我不起作用,因为我会在服务器上来回跳转数千次,程序不会阻塞,但它肯定需要很长时间,我找不到让事件返回所有的方法未决事件(我认为)。
下一个选择是跟踪 WMI 返回的最后一个记录 ID,并对其记录 ID 大于最后一个的所有事件进行直接查询,我假设这会更好,但是我不熟悉与 DCOM。
所以我的问题:
如果我运行 ExecQuery 而不是通知查询,由于分布式 COM 的性质,我是否必须在客户端/服务器之间来回切换以遍历查询返回的每条记录?