在源Y中,事件ID X的描述无法找到。

4

我正在尝试将我的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= 标志检索此描述;有关详细信息,请参阅帮助和支持。以下信息是事件的一部分:事件日志文件已损坏。
我不确定我错过了什么。我正在写出已经存在的完全相同的事件,但它仍然无法找到消息字符串。

1
可能是重复的问题:源中事件ID的描述找不到的说明 - Ken White
2个回答

2
我也遇到了类似的问题。经过大量研究,我按照这篇文章中的步骤进行了验证: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并传递无法在注册表中找到的源名称,则事件记录服务默认使用Application日志。但是,由于没有消息文件,事件查看器无法将任何事件标识符或事件类别映射到说明字符串,并显示错误。因此,您应该为您的应用程序添加一个唯一的事件源到注册表中,并指定一个消息文件。”因此,我的RegisterEventSource中的应用程序名称与注册表中的应用程序名称不匹配。我解决了这个问题,现在它可以工作了...因此,如果您遇到此问题,请仔细检查您的注册表条目。

我遇到了一个问题,我的应用程序通常会安装密钥,然后在我启动它时添加事件日志条目。但是当我启动我的应用程序时,出现了这个错误。安装过程中出了些问题,密钥没有被创建。基本上,这个答案告诉我:“去注册表里看看你的密钥是否存在!”谢谢 - 发现它不存在,然后就能从那里继续进行了。 - vapcguy

0

你能正常看到其他事件吗?很可能是因为C#事件类没有提供足够的参数来匹配事件消息文件中的事件模板,所以你无法使用特定的源和事件ID(SceCli/1704)。我认为它只能与在其事件消息文件中仅有“%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);

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