1

有人给了我一个测试程序,将记录写入 Windows 事件日志(但我没有来源)。我了解编写和查看事件日志的一般方式,但该程序的行为非常特殊,我可以编写记录,其来源不存在。.../eventlog/application 中甚至没有注册表项,因此没有格式化库。

如果我从自己的代码中尝试,我可以编写这样的记录,但 Windows 事件查看器总是告诉我“找不到描述”(这是正确的,我理解为什么会发生这种情况)。

现在的问题是:既然国外的测试程序可以做到,那么它一定是有可能的——但是怎么做呢?

很多谢谢!:-)

4

1 回答 1

1

好的,最后我找到了它(也得到了源代码)- prog 创建了注册表项(可能在调用 CreateEventSource() 时发生),直到刷新 regedit 才可见:-|

而且,它确实注册了一个格式化库,只是它是我不能依赖的:C:\Windows\Microsoft.NET\Framework64\v2.0.50727\EventLogMessages.dll

或者,我可以吗?

啊,我们来解释一下: EventLog.WriteEntry 和 EventLog.WriteEvent 方法之间的区别 所以,我不能,因为我没有使用.Net ... :-|

现在,如果我现在从我的 prog 发送另一个事件(使用与外部 prog 相同的新创建的源),我通常会在事件查看器中看到它。这意味着,WriteEntry() 实际上并没有直接写入包含文本的不同/特殊类型的 evt 日志记录(与仅写入 msg 目录 ID + 参数的标准方法相反),而是在格式化库中必须有一些技巧使 EventViewer 应用某种“默认”格式。

任何想法我怎么能做到这一点?除了只是复制上面的 EventLogMessages.dll 吗?:-)

好的,终于在http://msdn.microsoft.com/en-us/magazine/cc163446.aspx找到了关于这个的答案 “这个文件叫做 EventLogMessages.dll,它包含 65,536 个事件描述,每个事件描述由字符串“%1”,你想写的任何字符串的占位符”

我希望像“messageid = *”这样的东西,但这似乎太简单了:-|

但也许其他人对这里发生的事情感兴趣......

于 2013-05-03T07:57:27.603 回答