运行此代码时,我得到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
为什么?
答案 0 :(得分:2)
由于您使用的是EventLog
类,因此构造函数的有效“类别”(确定这不是正确的单词...)必须为 Application , 系统 或 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();
}
}
此代码段对我有用。
请记住在提升权限下运行此功能。如果没有,您将收到一个未经授权的例外投掷。
因为您正在使用不存在的类别初始化EventLog
类。
典型的有效类别为应用,系统等。
EventLog
的单个参数构造函数是指注册表的日志。 [^]