当我运行此代码时,我得到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 doesn't exist on this computer
为什么?
最佳答案
已更新
由于您使用的是 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
的单参数构造函数引用注册表的日志。 [^]
关于c# - 获取操作日志EventLog失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17264129/