在C#的eventvwr中读取“System”事件日志时,无法找到源为“y”的事件ID“x”的描述。

3
我有一小段代码用于从事件查看器中读取“系统”事件。
        EventLog eventLog = new EventLog("System");

        foreach (EventLogEntry log in eventLog.Entries)
        {
            Console.WriteLine("{0}\n", log.Message);
        }

这个可以正常工作,但有些事件日志会出现如下信息:
"The description for Event ID '109' in Source 'Microsoft-Windows-Kernel-Power' cannot be found.  The local computer may not have the necessary registry information or message DLL files to display the message, or you may not have permission to access them.  The following information is part of the event:'6', '0', '5'"

当我打开事件查看器时,我可以看到那里的描述。

The kernel power manager has initiated a shutdown transition.
Shutdown Reason: Kernel API

我正在以管理员身份运行此代码。

有人可以帮我弄清楚为什么会收到这样的消息吗?提前感谢。

有类似的帖子,但没有引起这个问题。例如这个:

“在源Y中事件ID X的描述找不到。”

2个回答

1
您可能无法访问消息文件或其位置不在当前路径上,作为管理员。
事件日志消息文件的位置在注册表中定义,例如,如果您查看
HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ Services \ EventLog \ System \ Microsoft-Windows-Kernel-Power 您应该找到一个值EventMessageFile,其中包含数据% systemroot%\ system32 \ microsoft-windows-kernel-power-events.dll或类似内容 - 这是来自我的计算机。
请检查此文件是否在您的路径上以及您具有什么权限,作为管理员。

是的,路径是存在的,但作为管理员,我只有有限的权限(SeChangeNotifyPrivilege、SeImpersonatePrivilege、SeCreateGlobalPrivilege),其他权限都被禁用了。 - Tarun Kumar
你能具体说明一下,我可能缺少哪些权限吗?但是我仍然可以在事件查看器中查看事件日志描述,而不是通过上面的代码。 - Tarun Kumar
我指的是对Dll文件的访问权限,比如“读取”。然而,我刚刚尝试了你的代码,但是我遇到了同样的问题。恐怕我不知道为什么会这样。 - spodger
你们有没有关于这个问题的任何更新/见解?我遇到了同样的问题,感到很困惑。 - carlaharris

0

虽然这不是关于C#的话题,但如果你在PowerShell中遇到了这个错误,只需切换到使用Get-WinEvent而不是Get-EventLog,一切都会没问题。


来源: Boe Prox在此的回答:

使用Get-WinEvent代替[...] Get-EventLog更适用于旧操作系统。


谢谢你指出来,Brade。这就是当一个人只看标题时会发生的事情! - ndemou

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接