写入应用程序事件源是否可以接受?

时间:2012-11-29 10:28:06

标签: c# event-log

在我们的应用程序中存在某些情况,其中发生非致命错误并且应用程序恢复。

在将所述项目填充到选择列表时,无法正确识别某些可导入项目的示例。错误不会导致应用程序崩溃,但会提醒用户某些项目无法加载。

在这种情况下,错误将作为警告记录到应用程序事件日志中。这是应用程序恢复的非致命错误,但是如果需要,登录到事件日志可以让我们看到原始错误。

我们的问题是该软件需要能够与高级用户帐户一起安装。不是管理员帐户,我们将无法为应用程序创建自定义事件源。

目的是将错误写入“Application”事件源(已存在于应用程序事件日志中)。但是,这样做会导致包含类似于以下内容的文本。

找不到源应用程序中事件ID 0的描述。引发此事件的组件未安装在本地计算机上,或者安装已损坏。您可以在本地计算机上安装或修复该组件。

这是因为我们写它时EventID为0。这种方法可以完成工作,但有更好的方法吗?是否有非管理员方式为应用程序事件源指定EventID以指示它来自我们的应用程序?

2 个答案:

答案 0 :(得分:0)

您可以将应用程序事件ID作为参数传递:(例如:234)

EventLog.WriteEntry("Application", "your log message here", EventLogEntryType.Warning,  234);

进一步阅读EventLog.WriteEntry方法

http://msdn.microsoft.com/en-us/library/xzwc042w.aspx

答案 1 :(得分:0)

您看到的错误无法找到源应用程序中的事件ID 0的描述。引发此事件的组件未安装在本地计算机上,或者安装已损坏。您可以在本地计算机上安装或修复组件。是应用程序源的已注册事件消息文件没有事件ID为0的条目的结果。您看到的消息是获取消息模板的结果来自事件消息文件的id,并使用事件有效负载对其进行格式化。

我一般不建议您劫持您不拥有的来源。任何消费这些事件的人都会对他们的意思和他们携带的信息有特定的期望。

关于是否有非管理员方式来指定应用程序事件源的EventID以指示它来自我们的应用程序?,您对事件ID规范的期望是什么意思?源决定事件来源的原因。

编辑:

无论您是否提供非0的事件ID,您都会在事件查看器中收到错误,因为该源没有注册事件消息文件。即使它确实如此,您也可能必须使用在消息文件中有条目的事件ID(使事件的消费者感到困惑)或者没有条目的事件ID,但仍然会收到错误。