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

Posted

技术标签:

【中文标题】“找不到源 Y 中事件 ID X 的描述。”【英文标题】:"The description for Event ID X in Source Y cannot be found." 【发布时间】:2013-06-13 13:13:44 【问题描述】:

我正在尝试将自定义事件从我的 Web 应用程序写入 Windows 事件日志。我没有让消息字符串正常工作,我不断收到“无法找到源 Y 中事件 ID X 的描述。”

为了缩小范围,我决定将一个事件写入我机器上已经存在的源。我只是看了一个已经写出来的事件,特别是 SceCli 事件 1704。

我执行以下代码:

var log = new EventLog("Application");
log.Source = "SceCli";

var ev = new EventInstance(1704, 0, EventLogEntryType.Information);
log.WriteEvent(ev);

但是,这仍然会在事件查看器中为我提供以下信息:

在源 (SceCli) 中找不到事件 ID (1704) 的描述。本地计算机可能没有必要的注册表信息或消息 DLL 文件来显示来自远程计算机的消息。您可以使用 /AUXSOURCE= 标志来检索此描述;有关详细信息,请参阅帮助和支持。以下信息是事件的一部分:事件日志文件已损坏..

我不确定我在这里缺少什么。我正在写出已经存在的完全相同的事件,但它仍然找不到消息字符串。

【问题讨论】:

Description for event id from source cannot be found的可能重复 【参考方案1】:

我也遇到了类似的问题。经过大量研究后,我按照本文http://www.codeproject.com/Articles/4166/Using-MC-exe-message-resources-and-the-NT-event-lo验证了步骤,一切似乎都已到位。除了一件事..当我偶然发现这个 msdn http://msdn.microsoft.com/en-us/library/windows/desktop/aa363661(v=vs.85).aspx时我意识到了这一点

正如最后一段所说..'如果应用程序调用 RegisterEventSource 并传递在注册表中找不到的源名称,则事件记录服务默认使用应用程序日志。但是,由于没有消息文件,事件查看器无法将任何事件标识符或事件类别映射到描述字符串,并且会显示错误。出于这个原因,您应该为您的应用程序添加一个唯一的事件源到注册表并指定一个消息文件。所以我在 RegisterEventSource 中的应用程序名称与注册表中的应用程序名称不匹配。我修复了这个问题,现在它可以工作了......所以如果你遇到这个问题,请仔细检查你的注册表项。

【讨论】:

我的应用程序通常会安装密钥,然后在我启动它时添加一个事件日志条目。我启动了我的应用程序并收到此错误。安装过程中出现问题,未创建密钥。基本上这个答案告诉我,“去注册表看看你的密钥是否在那里!”谢谢 - 发现它不是并且能够从那里继续。【参考方案2】:

你能正确看到其他事件吗?很可能您无法使用该特定源和事件 ID (SceCli/1704),因为 C# 事件类没有提供正确数量的参数来匹配事件消息文件中的事件模板。我认为它只适用于事件消息文件中只有“%1”的源(有关详细信息,请参阅http://www.eventid.net/show-DocId-22.htm)。

无论如何,我认为您需要为您的自定义应用程序创建一个源(如果它不存在),然后记录日志条目。在记录事件之前检查源是否存在,如果不存在则创建它:

if (!EventLog.SourceExists("MyWebApp"))
         EventLog.CreateEventSource("MyWebApp", "Application");
EventLog.WriteEntry("MyWebApp", "Some message", EventLogEntryType.Information, 1704);

【讨论】:

以上是关于“找不到源 Y 中事件 ID X 的描述。”的主要内容,如果未能解决你的问题,请参考以下文章

java为啥每次都是找不到文件。找不到文件?

java 枚举 找不到符号

bat系统找不到指定文件怎么办?

java package找不到符号

SpringBoot报找不到 dao 问题

ubuntu20.04找不到start命令