【问题标题】:How to write Windows Event log records with non-existing source如何使用不存在的源写入 Windows 事件日志记录
【发布时间】:2013-05-02 13:59:55
【问题描述】:

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

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

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

非常感谢! :-)

【问题讨论】:

    标签: windows event-log


    【解决方案1】:

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

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

    或者,我可以吗?

    啊,我们来解释一下: Difference between EventLog.WriteEntry and EventLog.WriteEvent methods 所以,我不能,因为我没有使用 .Net ... :-|

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

    有什么想法可以做到这一点吗?除了只是复制上面的 EventLogMessages.dll 吗? :-)

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

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

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

    【讨论】:

      猜你喜欢
      • 2014-12-25
      • 1970-01-01
      • 2011-09-24
      • 2014-10-29
      • 2021-11-12
      • 2018-02-20
      • 2018-02-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多