9

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

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

在这种情况下,错误将作为警告记录到应用程序事件日志中。这是应用程序从非致命错误中恢复,但记录到事件日志允许我们在需要时查看原始错误。

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

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

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

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

4

2 回答 2

0

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

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

进一步阅读 EventLog.WriteEntry 方法

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

于 2012-11-29T11:42:03.953 回答
0

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

我一般不建议您劫持您不拥有的资源。消费这些事件的人对它们的含义和它们携带的信息有特定的期望。

关于是否有一种非管理员的方式来指定应用程序事件源的 EventID 以表明它来自我们的应用程序?,您认为事件 id 规范意味着什么?来源决定了事件的来源。

编辑:

无论您是否提供 0 以外的事件 ID,您都会在事件查看器中收到错误,因为该源没有注册事件消息文件。即使是这样,您也必须使用在消息文件中有条目的事件 ID(混淆事件的消费者)或没有条目但仍然收到错误的事件 ID。

于 2012-11-29T12:13:09.557 回答