C# 为什么WMI不在ManagementObjectCollection中返回完整的结果集?

C# 为什么WMI不在ManagementObjectCollection中返回完整的结果集?,c#,wmi,dcom,C#,Wmi,Dcom,使用C.net运行WMI查询 您知道为什么在多次运行查询时,这不会总是返回时间范围内的所有相同事件,并且在执行此操作时也不会引发异常吗 ConnectionOptions opts = new ConnectionOptions(); if (EncryptConnections) { opts.Authentication = AuthenticationLevel.PacketPrivacy; } opts.Username = eventSource.user; opts.Se

使用C.net运行WMI查询

您知道为什么在多次运行查询时,这不会总是返回时间范围内的所有相同事件,并且在执行此操作时也不会引发异常吗

ConnectionOptions opts = new ConnectionOptions();

if (EncryptConnections)
{
    opts.Authentication = AuthenticationLevel.PacketPrivacy;
}

opts.Username = eventSource.user;
opts.SecurePassword = eventSource.password;
opts.Impersonation = ImpersonationLevel.Impersonate;

string location = string.Format("\\\\{0}\\root\\cimv2", eventSource.machine);
ManagementScope scope = new ManagementScope(location, opts);
scope.Connect();

EnumerationOptions enumOptions = new EnumerationOptions();
enumOptions.DirectRead = false;
enumOptions.EnumerateDeep = false;
enumOptions.ReturnImmediately = true;
enumOptions.Rewindable = false; 
enumOptions.Timeout = TimeSpan.MaxValue;
enumOptions.BlockSize = 10;

WqlObjectQuery query = new WqlObjectQuery("Select * from Win32_NTLogEvent Where Logfile = 'Security' AND TimeWritten >= '20110614025212.000000+000' AND TimeWritten <= '20110614030712.000000+000'");

ManagementObjectSearcher searcher = new ManagementObjectSearcher(scope, query, enumOptions);

foreach (ManagementBaseObject mbo in searcher.Get() ) {
   // do Stuff
}
在实际代码中,查询每次都会更改以获得不同的时间范围,但不显示不完整的结果

每次运行此操作时,searcher.Get返回的ManagementObjectCollection都会成功枚举列表-不会引发异常,但集合并不总是相同的

每次收集的顺序可能会有所不同,这是意料之中的。 集合在同一时间范围内并不总是包含相同的事件计数,这是不可预测的

集合似乎无法每几百次查询获得一次完整的WMI结果。它以静默方式运行,我还没有发现异常或错误消息


我们发现“逻辑”运算符遇到了相同的问题,从Win32_PerfFormattedData_PerfOS_处理器返回空结果。WBEM测试显示有2个入口

似乎在使用enumOptions时出现问题。Rewindable=false;在从不同线程使用的WMI连接上


删除enumOptions.Rewindable=false为我解决了这个问题。

测试此代码,同时在另一个线程中将事件添加到同一日志中。我打赌你会更频繁地看到遗漏的事件。修改枚举选项以寻找解决方案。我们有一些管理方法来避免读取事件日志的头部,因为它不稳定。然而,这个问题与事件日志的主体有关,否则它的内容相当稳定。当发生新的写入时,是否存在会中途取消读取的问题?我们正在每秒创建100或1000个事件的主机上进行测试,但没有看到这种情况经常发生。