Ji *_*lin 53 .net windows event-log
当我将日志写入Windows事件日志时,我得到下面的事件,这条消息的根本原因是什么,我该如何解决?非常感谢
无法找到源RRWS的事件ID 51001的描述.引发此事件的组件未安装在本地计算机上,或者安装已损坏.您可以在本地计算机上安装或修复该组件.
如果事件源自另一台计算机,则必须随事件一起保存显示信息.
活动中包含以下信息:
测试日志消息
消息资源存在但在字符串/消息表中找不到该消息
Mat*_*att 27
使用"EventCreate"从命令行在Application Log下创建事件源后,出现此错误.此命令在以下位置创建新密钥:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Eventlog\Application
如果您查看已创建的Key(例如SourceTest),将会调用一个字符串值EventMessageFile
,我将其设置为%SystemRoot%\System32\EventCreate.exe
.
将此更改为 c:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\EventLogMessages.dll
删除CustomSource
和TypesSupported
值.
这应该停止"事件ID ....的描述"消息.
Ale*_*lex 15
现实世界的解决方案怎么样?
如果您只需要"快速而肮脏"的方式将事情写入事件日志而无需注册"自定义源"(需要管理员权限),或提供"消息文件"(需要工作和头痛),请执行以下操作:
EventLog.WriteEntry(
".NET Runtime", //magic
"Your error message goes here!!",
EventLogEntryType.Warning,
1000); //magic
Run Code Online (Sandbox Code Playgroud)
这样你就可以写入现有的"应用程序"日志而不会产生烦人的"无法找到事件ID 0的描述"
如果你想要"魔术"部分解释我在这里写博客
Ste*_*gli 12
您需要为其创建事件源和消息文件.代码看起来像这样:
var data = new EventSourceCreationData("yourApp", "Application");
data.MessageResourceFile = pathToYourMessageFile;
EventLog.CreateEventSource(data);
Run Code Online (Sandbox Code Playgroud)
然后,您需要创建一个消息文件.还有这篇文章解释了一些事情(我没有读过所有内容,但似乎相当完整).
使用PowerShell创建事件日志和源:
New-EventLog -LogName MyApplicationLog `
-Source MySource `
-MessageResourceFile C:\windows\Microsoft.NET\Framework\v4.0.30319\EventLogMessages.dll
Run Code Online (Sandbox Code Playgroud)
您将需要消息dll来避免遇到的问题。
我也偶然发现了这一点 - 尽管是由另一种可能性引起的:事件标识符(在 a 中“混淆” )将严重性#define
设置为错误(事件标识符中所述的两个高位)。由于事件查看器显示事件标识符(低 16 位),因此无法匹配...
作为参考,我在排除故障和修复此问题时根据自己的研究整理了一组技巧:
如果您的日志条目不以“消息资源存在,但在字符串/消息表中找不到消息”结尾(与原始问题相反):
如果您需要添加/编辑注册表信息,请记住:
EventLog
服务(或重新启动系统,如 @BrunoBieri 所暗示)。如果您不想创建自定义 DLL 资源,请注意常用的事件消息文件有一些注意事项:
EventLogMessages.dll
(正如@Matt 所暗示的)上升到0xFFFF
EventCreate.exe
“仅”上升到0x3E9
%1
ReportEvent
(选择所需的事件,转到“详细信息”选项卡并展开“EventData”)如果您在记录的事件中仍然出现“无法找到”(原始问题):