C# 为什么WMI不在ManagementObjectCollection中返回完整的结果集?
使用C.net运行WMI查询 您知道为什么在多次运行查询时,这不会总是返回时间范围内的所有相同事件,并且在执行此操作时也不会引发异常吗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
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个事件的主机上进行测试,但没有看到这种情况经常发生。