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 、またはApplications Andではなく、 Windows ログツリーで利用可能なその他のログ名でなければなりませんサービス ログツリー。

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

このスニペットコードは私にとってはうまくいきます。

昇格された特権でこれを実行することを忘れないでください。そうでない場合は、Unauthorized 例外がスローされます。

最初の答え

EventLog存在しないカテゴリでクラスを初期化しているためです。

典型的な有効なカテゴリは、ApplicationSystemなどです。

の単一パラメーター コンストラクターEventLogは、レジストリのログを参照します。[^]

于 2013-06-23T18:55:26.980 に答える