从源找不到事件ID的说明

当我在Windows事件日志中写入日志时,我收到以下事件,此消息的根本原因是什么,如何解决? 非常感谢

无法find源RRWS中事件ID 51001的说明。 引发此事件的组件未在本地计算机上安装,或者安装已损坏。 您可以在本地计算机上安装或修复组件。

如果事件发生在另一台计算机上,显示信息必须与事件一起保存。

活动中包含以下信息:

testing日志messge

消息资源存在但消息未在string/消息表中find

在使用“EventCreate”从命令行创build应用程序日志下的事件源后,出现此错误。 此命令将在下创build一个新的项: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Eventlog\Application

如果您查看已创build的密钥(例如SourceTest),将会有一个名为EventMessageFile的string值,对于我来说,它被设置为%SystemRoot%\System32\EventCreate.exe

将其更改为c:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\EventLogMessages.dll

删除CustomSourceTypesSupported值。

这应该停止“事件ID ….的描述”消息。

您需要为其创build事件源和消息文件。 代码看起来像这样:

 var data = new EventSourceCreationData("yourApp", "Application"); data.MessageResourceFile = pathToYourMessageFile; EventLog.CreateEventSource(data); 

那么你将需要创build一个消息文件 。 这篇文章也解释了一些事情(我没有看完但是看起来相当完整)。

我的一个朋友有完全相同的问题。 他尝试了所有描述的选项,但似乎没有任何工作。 经过很多研究, 也是对微软的描述 ,他总结说要重启系统。

似乎操作系统无法刷新已注册事件源的列表。 只有重新启动后,事件源才能正确注册。

结论: 重新启动您的系统!

我也面临类似的问题。 经过大量的研究,我做了下面的工作,根据这篇文章validation了这些步骤http://www.codeproject.com/Articles/4166/Using-MC-exe-message-resources-and-the-NT-event-lo Everything似乎到位了。 除了一件事..我意识到,当我偶然发现这个msdn http://msdn.microsoft.com/en-us/library/windows/desktop/aa363661(v=vs.85).aspx

如最后一段所述.. 如果应用程序调用RegisterEventSource并传递在registry中找不到的源名称,则事件logging服务默认使用应用程序日志。 但是,由于没有消息文件,事件查看器无法将任何事件标识符或事件类别映射到描述string,并会显示错误。 因此,应该为registry添加一个唯一的事件源,并指定一个消息文件。 所以我在RegisterEventSource中的应用程序名称与registry中的应用程序名称不匹配。 我解决了这个问题,现在它工作…所以,如果你面对这个问题,请仔细检查你的registry项。

使用PowerShell创build事件日志和来源:

 New-EventLog -LogName MyApplicationLog ` -Source MySource ` -MessageResourceFile C:\windows\Microsoft.NET\Framework\v4.0.30319\EventLogMessages.dll 

你需要消息DLL来避免你所看到的问题。

对我来说,问题是我偶然的目标configuration文件被设置为“.Net Framework 4客户端configuration文件”。 当我使用“.Net Framework 4”重build有问题的服务时,问题就消失了!

我也偶然发现了这个问题 – 尽pipe是由另一种可能性引起的:事件标识符(在#define被“模糊化”)将严重性设置为错误 ( 事件标识符中所述的两个高位)。 当事件查看器显示事件标识符(低位16位)时,可能无法匹配…

作为参考,我在自己的研究中编写了一套提示,同时进行故障排除和修复:

  1. 如果您的日志条目没有以“ 消息资源存在但消息在string/消息表中找不到 ”(与原始问题相反)结束:

    • 意味着你缺lessregistry信息
    • 仔细检查事件源名称和registry项
  2. 如果您需要添加/编辑registry信息,请记住:

    • 重新启动事件查看器 (如KB166902的第 6 项以及@JotaBe所述)
    • 如果没有帮助,重新启动Windows事件日志 / 事件日志服务(或重新启动系统,由@BrunoBieri暗示)。
  3. 如果您希望创build自定义DLL资源,请注意常用的事件消息文件有一些注意事项:

    • 他们拥有大量的标识符,试图覆盖大多数情况
      • .NET的EventLogMessages.dll (由@Matt暗示)上升到0xFFFF
      • Windows EventCreate.exe “唯一”上升到0x3E9
    • 每个条目都包含%1
      • 这意味着只会显示 第一个string
      • 所有传递给ReportEventstring仍然可以通过查看事件详细信息进行检查(select所需的事件,转到“ 详细信息”选项卡并展开EventData
  4. 如果您在logging的事件中仍然无法find ”(原始问题):

    • 仔细检查正在使用的事件标识符 (在我的情况下,它是事件标识符的限定符部分)
    • 比较事件的详细信息(select所需的事件,去详细信息选项卡,并展开系统 )与一个工作的例子

如何真正的世界的解决scheme。

如果你所需要的只是一种“快速和肮脏”的方式来写一些东西到事件日志而不注册“自定义源”(需要pipe理员权限),或提供“消息文件”(需要工作和头痛),只需要这样做:

 EventLog.WriteEntry( ".NET Runtime", //magic "Your error message goes here!!", EventLogEntryType.Warning, 1000); //magic 

通过这种方式,您将写入现有的“应用程序”日志,而不会感到烦恼“无法find事件ID 0的说明”

如果你想“魔术”部分解释我在这里博客

这通常是由写入事件日志的程序引起的,然后被卸载或移动。

如果您在创build事件源之前打开“事件日志”查看器,例如安装服务时,您将看到该错误消息。 您不需要重新启动操作系统:只需closures并打开事件查看器即可。

注:我不提供自定义消息文件。 事件源的创build使用默认configuration, 如Matt的答案所示 。