【问题标题】:How to write event log category如何编写事件日志类别
【发布时间】:2012-05-15 04:38:00
【问题描述】:

众所周知,我们可以使用 EventLog 类来编写事件日志,但我对如何在事件日志中写入类别名称感到困惑。虽然它提供了类别参数,例如,WriteEntry 的类型之一是:

public void WriteEntry(
string message,
EventLogEntryType type,
int eventID,
short category

)
它只是在我的日志中显示数字。为什么类别的类型是短的,而不是字符串?如何在事件查看器中显示类别名称?谢谢!顺便说一句,我们不会创建自定义 CategoryMessageFile。

【问题讨论】:

    标签: c# windows event-log


    【解决方案1】:

    您可以编写具有给定类别的事件日志条目,但您需要使用在事件日志中注册的字符串资源表创建一个额外的本机 dll。这确实使您的部署更加复杂。 您目前在安装期间必须做的事情

    1. 要创建新的事件日志源,您需要在每次创建新源时拥有管理员权限。因此,明智的做法是收集所有源代码,以便在初始安装期间立即安装。
    2. 创建一个本机 dll,其中包含您要提供的每个类别 ID 的字符串资源表。
    3. 在注册表中注册类别 dll 以使 Windows 识别它。

    现在您可以使用重载来编写具有给定类别的事件日志消息。

    有一个很好的Dr. Jobs Journal article 准确地描述了您的问题。

    【讨论】:

    • 是的,我找到了这篇文章,我知道我们可以创建一个额外的原生 dll,但是在我们的开发中不建议这样做。那么,我想知道我是否可以使用默认的系统类别名称?
    • 不推荐是什么意思?这是唯一的方法。如果您重用 Windows 中的类别 dll,您仍然需要为您的事件源注册它们。您只能为每个事件源使用一个类别文件。您现在正在为要使用的每个新类别 dll 设计事件源。我怀疑像 Source1、Source2、Source3 这样的描述性名称只是为了重用 3 个不同的类别文件,这些文件确实包含您无法控制的消息。
    • 如果您将类别设置为“0”,您将在事件查看器中看到字符串“无”。
    【解决方案2】:

    不要使用 WriteEntry,你会得到一个安全异常。安装后不需要管理员权限。

    改用 WriteEvent 参见:https://security.stackexchange.com/q/15857/396

    【讨论】:

      猜你喜欢
      • 2014-12-25
      • 1970-01-01
      • 2015-05-15
      • 2011-08-07
      • 2012-08-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多