patryk.beza
patryk.beza

Reputation: 5136

Get Operational log EventLog fails

I get InvalidOperationException when I run this code:

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");
}

Exception says that:

Microsoft-Windows-Diagnostics-Performance/Operational doesn't exist on this computer

Why?

Upvotes: 2

Views: 1197

Answers (1)

HuorSwords
HuorSwords

Reputation: 2245

Updated

Since you are using EventLog class, the valid "categories" (for sure this is not the correct word to name it...) for your constructor must be Application, System or any other Log Name available under Windows Log tree, not under Applications And Services Log tree.

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();
    }
}

This snippet code works for me.

Remember to run this under elevated privileges. If not, you'll receive an Unauthorized exception throw.

First Answer

Because you are initializing your EventLog class with a category that doesn't exists.

Typical valid categories would be Application, System, etc.

The single parameter constructor for EventLog refers to a log of the registry. [^]

Upvotes: 3

Related Questions