.net 找不到源中事件id的说明
当我将日志写入windows事件日志时,我会得到下面的事件,此消息的根本原因是什么,如何修复它?非常感谢 事件ID 51001的说明 找不到来自源的RRW。 引发此问题的组件 事件未安装在本地服务器上 计算机或安装正在运行 腐败。您可以安装或修复 本地计算机上的组件 如果事件起源于另一个 计算机上,显示的信息已被删除 要与事件一起保存 包括以下信息 在活动中: 测试日志消息 消息资源存在,但是 在中找不到该消息 字符串/消息表.net 找不到源中事件id的说明,.net,windows,event-log,.net,Windows,Event Log,当我将日志写入windows事件日志时,我会得到下面的事件,此消息的根本原因是什么,如何修复它?非常感谢 事件ID 51001的说明 找不到来自源的RRW。 引发此问题的组件 事件未安装在本地服务器上 计算机或安装正在运行 腐败。您可以安装或修复 本地计算机上的组件 如果事件起源于另一个 计算机上,显示的信息已被删除 要与事件一起保存 包括以下信息 在活动中: 测试日志消息 消息资源存在,但是 在中找不到该消息 字符串/消息表 这通常是由写入事件日志的程序引起的,然后卸载或移动该程序。您需要为其
这通常是由写入事件日志的程序引起的,然后卸载或移动该程序。您需要为其创建事件源和消息文件。代码如下所示:
var data = new EventSourceCreationData("yourApp", "Application");
data.MessageResourceFile = pathToYourMessageFile;
EventLog.CreateEventSource(data);
然后您需要创建一个。还有一点可以解释(我没有全部阅读,但它似乎相当完整)。在使用“EventCreate”命令行在应用程序日志下创建事件源后,我出现了此错误。 此命令在以下位置创建一个新密钥:
HKEY\U LOCAL\U MACHINE\SYSTEM\CurrentControlSet\Services\Eventlog\Application
如果查看已创建的密钥(例如SourceTest),将有一个名为EventMessageFile
的字符串值,对我来说,该值设置为%SystemRoot%\System32\EventCreate.exe
将此更改为c:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\EventLogMessages.dll
删除CustomSource
和类型支持的值
这将停止“事件ID的描述…”消息。我也遇到了类似的问题。在做了大量的研究之后,我做了以下几点
我根据本文验证了这些步骤
一切似乎都准备就绪。除了一件事……当我偶然发现这个msdn时,我意识到了这一点
正如最后一段所说。。
'如果应用程序调用RegisterEventSource并传递在注册表中找不到的源名称,则默认情况下,事件日志记录服务使用应用程序日志。但是,由于没有消息文件,事件查看器无法将任何事件标识符或事件类别映射到描述字符串,并将显示错误。因此,您应该为应用程序的注册表添加一个唯一的事件源,并指定一个消息文件。“
因此,我在RegisterEventSource中的应用程序名称与注册表中的应用程序名称不匹配。我修复了这个,现在它工作了。。。
因此,如果遇到此问题,请仔细检查注册表项。使用PowerShell创建事件日志和源:
New-EventLog -LogName MyApplicationLog `
-Source MySource `
-MessageResourceFile C:\windows\Microsoft.NET\Framework\v4.0.30319\EventLogMessages.dll
您需要消息dll来避免您看到的问题。对我来说,问题是我的目标配置文件意外地被设置为“.Net Framework 4客户端配置文件”。当我使用“.NETFramework4”重新构建有问题的服务时,问题就消失了 重新启动您的系统强>
我的一个朋友也有同样的问题。他尝试了所描述的所有选择,但似乎没有任何效果。经过多次研究后,他决定重新启动系统,系统成功了
似乎操作系统在所有情况下都不会刷新已注册事件源的列表。只有在重新启动后,才能确保事件源已正确注册。如果在创建事件源之前(例如在安装服务时)打开事件日志查看器,则会收到该错误消息。您不需要重新启动操作系统:只需关闭并打开事件查看器即可
注意:我不提供自定义消息文件。事件源的创建使用默认配置。我也偶然发现了这一点——尽管这是由另一种可能性引起的:事件标识符(在#define
中被“模糊化”)将严重性设置为错误(如中所述的两个高阶位)。当事件查看器显示事件标识符(低位16位)时,无法找到匹配项
为了便于参考,我根据自己的研究总结了一套解决问题和修复问题的技巧:
如果日志条目没有以“消息资源存在,但在字符串/消息表中找不到消息”结尾(与原始问题相反):
- 表示您缺少注册表信息
- 仔细检查事件源名称和注册表项
如果需要添加/编辑注册表信息,请记住:
- 重新启动事件查看器(如的第6项所述,也可由@JotaBe所述)
- 如果没有帮助,请重新启动Windows事件日志/
事件日志
服务(或者重新启动系统,如@BrunoBieri所示)
如果您不希望创建自定义DLL资源,请注意常见的事件消息文件有一些警告:
- 它们拥有大量的标识符,试图覆盖大多数情况
- .NET
EventLogMessages.dll
(由@Matt提示)上升到0xFFFF
- Windows
EventCreate.exe
“仅”会上升到0x3E9
- 每个条目都包含
%1
- 这意味着只有第一个字符串将显示
- 仍然可以通过查看事件详细信息来检查传递给的所有字符串(选择所需的事件,转到详细信息选项卡并展开EventData)
如果您仍然在记录的事件中获得“找不到”(原始问题):
- 仔细检查正在使用的事件标识符值(在我的例子中,它是事件标识符的一部分)
- 比较事件详细信息(选择所需事件,转到“详细信息”选项卡并展开Sy
EventLog.WriteEntry(
".NET Runtime", //magic
"Your error message goes here!!",
EventLogEntryType.Warning,
1000); //magic
using (EventLog eventLog = new EventLog("Application"))
{
//You cannot be sure if the current identity has permissions to register the event source.
try
{
if (System.Web.HttpRuntime.AppDomainAppId != null)
{
eventLog.Source = System.Web.HttpRuntime.AppDomainAppId;
}
else
{
eventLog.Source = Process.GetCurrentProcess().ProcessName;
}
}
catch (SecurityException)
{
eventLog.Source = "Application";
}
eventLog.WriteEntry("Log message example", EventLogEntryType.Information, 1000);
}