0

首先是一些背景:

我目前正在使用 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 的性质,我是否必须在客户端/服务器之间来回切换以遍历查询返回的每条记录?

4

1 回答 1

0

这里的主要解决方案是不为此使用 DCOM,它的效率非常低,而且我已经将服务器置于相当数量的 CPU 压力下执行大量 DCOM 指令。

如果我想远程执行此操作,或者在本地执行 WinAPI,我正在研究 Windows RPC Java 实现。

于 2011-10-27T13:52:45.767 回答