1

InvalidOperationException当我运行此代码时,我得到:

static void Main(string[] args)
{
    var aLog = new EventLog("Microsoft-Windows-Diagnostics-Performance/Operational");
    EventLogEntry entry;
    var entries = aLog.Entries;
    var stack = new Stack<EventLogEntry>();
    for (var i = 0; i < entries.Count; i++)
    {
        entry = entries[i];
        stack.Push(entry);
    }
    entry = stack.Pop();// only display the last record
    Console.WriteLine("[Index]\t" + entry.Index +
                        "\n[EventID]\t" + entry.InstanceId +
                        "\n[TimeWritten]\t" + entry.TimeWritten +
                        "\n[MachineName]\t" + entry.MachineName +
                        "\n[Source]\t" + entry.Source +
                        "\n[UserName]\t" + entry.UserName +
                        "\n[Message]\t" + entry.Message +
                        "\n---------------------------------------------------\n");
}

例外说:

此计算机上不存在Microsoft-Windows-Diagnostics-Performance/Operational

为什么?

4

1 回答 1

2

更新

由于您使用的是EventLog类,因此您的构造函数的有效“类别”(确保这不是正确的名称......)必须是ApplicationSystem或Windows 日志树下可用的任何其他日志名称,而不是Applications 和服务日志树。

const string LogName = "Microsoft-Windows-Diagnostics-Performance/Operational";
var query = new EventLogQuery(LogName, PathType.LogName, "*[System/Level=2]");

using (var reader = new EventLogReader(query))
{
    var currentEvent = reader.ReadEvent();
    while (currentEvent != null)
    {
        // Do your stuff here...

        // Read next event.
        currentEvent = reader.ReadEvent();
    }
}

这个片段代码对我有用。

请记住在提升的权限下运行它。如果没有,您将收到未经授权的异常抛出。

第一个答案

因为您正在EventLog使用不存在的类别初始化您的类。

典型的有效类别是ApplicationSystem等。

单参数构造函数用于EventLog引用注册表的日志。[^]

于 2013-06-23T18:55:26.980 回答