GetEventLogs()返回No Setup事件日志?

时间:2012-09-30 18:09:19

标签: c# .net windows

采用以下C#代码:

EventLog[] eventLogs;
eventLogs = EventLog.GetEventLogs(computername);
foreach (EventLog evt in eventLogs)
{
    statusMessagesListBox.Items.Add("evt.Log.ToString(): " + evt.Log.ToString() + "\t\tevt.LogDisplayName: " + evt.LogDisplayName);
}

当我运行时,我的输出如下:

evt.Log.ToString(): Application      evt.LogDisplayName: Application
evt.Log.ToString(): HardwareEvents   evt.LogDisplayName: Hardware Events
evt.Log.ToString(): Security         evt.LogDisplayName: Security
等等,就这样。但为什么没有安装日志?此外,当我尝试运行此代码时:

var eventLog = new EventLog("Setup", computer);
eventLog.Clear();
eventLog.Dispose();

我收到一条错误消息,即该计算机上不存在日志“设置”,即使它确实存在。上述代码适用于除安装日志之外的所有其他事件日志。

如何访问安装事件日志?

作为参考,正在尝试的.NET框架是4.0和4.5,目标计算机是Windows 7和2008 R2。

1 个答案:

答案 0 :(得分:4)

EventLog类仅处理管理事件日志。 SetUp事件日志是一个操作日志(您可以在事件查看器中看到这一点),因此该类无法处理。

要访问SetUp事件日志,必须使用System.Diagnostics.Eventing.Reader命名空间中的类。您可以使用以下方法迭代事件:

EventLogQuery query = new EventLogQuery("SetUp", PathType.LogName);
query.ReverseDirection = true; // this tells it to start with newest first
EventLogReader reader = new EventLogReader(query);

EventRecord eventRecord;

while ((eventRecord = reader.ReadEvent()) != null)
{
    // each eventRecord is an item from the event log
}

请查看this MDSN文章以获取更详细的示例。