事件日志 API 缺少条目
Event log API missing entries
我正在尝试从事件日志中检索最近的事件。我找到了这个答案 Read Event Log From Newest to Oldest 但它涉及加载我希望避免的整个日志。
所以我试着先走到日志的末尾,喜欢这样:
var eventLog = EventLog.GetEventLogs().OfType<EventLog>().Single(el => el.Log == "Security");
int logSize = eventLog.Entries.Count;
var lastScanTime = DateTime.Now.AddDays(-1),
for (int i = logSize - 1; i >= 0; i--)
{
var entry = eventLog.Entries[i];
if (entry.TimeWritten <= lastScanTime)
{
break;
}
entry.Dump();
}
这工作了一段时间,但如果我保留 运行 它,我开始得到 IndexOutOfRangeExceptions
似乎eventLog.Entries.Count不再匹配条目数,您可以通过以下代码查看:
var eventLog = EventLog.GetEventLogs().OfType<EventLog>().Single(el => el.Log == "Security");
int size = eventLog.Entries.Count.Dump();
int size2 = eventLog.Entries.Cast<EventLogEntry>().ToList().Count.Dump();
两个尺寸值return不同的值。 Entries.Countkeeps 增加但列表中的条目数停止增加。该计数也与我在 Windows 事件日志查看器中看到的相符。
它就像 .net 中的某些东西 API 中断并且没有更多事件可用。
任何人以前见过这个或有任何修复来使这种方法起作用。
编辑:我也发现了这个 这似乎是一个类似的问题,但没有解决方案。我无法使用事件,因为我可能会在安装软件之前在计算机上查找 activity。
编辑:如果我捕获异常并将结果放入列表中,我会再次得到不同数量的事件:
var results = new List<EventLogEntry>();
for (int i = eventLog.Entries.Count; i >= 0; i--)
{
try
{
var entry = eventLog.Entries[i];
{
results.Add(entry);
}
}
catch (Exception ex) { }
}
它的计数比 Entries.Count 低,但比 Entries 更新的日志条目似乎刚刚在某个点停止。
如果其他人遇到同样的问题,这似乎是在读取文件后并不总是处理 EventLog 对象的结果。
一旦发生这种情况,它似乎会以某种方式破坏或损坏文件,除非您清除文件,否则您将无法获得更新的数据。
我正在尝试从事件日志中检索最近的事件。我找到了这个答案 Read Event Log From Newest to Oldest 但它涉及加载我希望避免的整个日志。
所以我试着先走到日志的末尾,喜欢这样:
var eventLog = EventLog.GetEventLogs().OfType<EventLog>().Single(el => el.Log == "Security");
int logSize = eventLog.Entries.Count;
var lastScanTime = DateTime.Now.AddDays(-1),
for (int i = logSize - 1; i >= 0; i--)
{
var entry = eventLog.Entries[i];
if (entry.TimeWritten <= lastScanTime)
{
break;
}
entry.Dump();
}
这工作了一段时间,但如果我保留 运行 它,我开始得到 IndexOutOfRangeExceptions
似乎eventLog.Entries.Count不再匹配条目数,您可以通过以下代码查看:
var eventLog = EventLog.GetEventLogs().OfType<EventLog>().Single(el => el.Log == "Security");
int size = eventLog.Entries.Count.Dump();
int size2 = eventLog.Entries.Cast<EventLogEntry>().ToList().Count.Dump();
两个尺寸值return不同的值。 Entries.Countkeeps 增加但列表中的条目数停止增加。该计数也与我在 Windows 事件日志查看器中看到的相符。
它就像 .net 中的某些东西 API 中断并且没有更多事件可用。
任何人以前见过这个或有任何修复来使这种方法起作用。
编辑:我也发现了这个
编辑:如果我捕获异常并将结果放入列表中,我会再次得到不同数量的事件:
var results = new List<EventLogEntry>();
for (int i = eventLog.Entries.Count; i >= 0; i--)
{
try
{
var entry = eventLog.Entries[i];
{
results.Add(entry);
}
}
catch (Exception ex) { }
}
它的计数比 Entries.Count 低,但比 Entries 更新的日志条目似乎刚刚在某个点停止。
如果其他人遇到同样的问题,这似乎是在读取文件后并不总是处理 EventLog 对象的结果。
一旦发生这种情况,它似乎会以某种方式破坏或损坏文件,除非您清除文件,否则您将无法获得更新的数据。