2012-11-29 41 views
7

我们的应用程序中存在一些非致命错误和应用程序恢复的情况。写入应用程序事件源是否可以接受?

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

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

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

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

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

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

回答

0

你作为看到的错误找不到来自源应用程序的事件ID 0的说明。引发此事件的组件未安装在本地计算机上或安装已损坏。您可以在本地计算机上安装或修复组件。是应用程序源的注册事件消息文件没有针对事件ID 0的条目的结果。您看到的消息是从事件消息文件获取消息ID的模板并使用事件有效内容格式化它的结果。

我不会推荐一般来说,你劫持你不拥有的来源。谁在消费这些事件对于他们的意思和他们携带的信息有着特定的期望。

关于是否有一种非管理方式来指定应用程序事件源的EventID以表明它来自我们的应用程序?,你期望事件ID规范意味着什么?来源什么决定事件来自何处。

编辑:

您将获得在事件查看器错误,无论您是否提供0以外的事件ID,因为源没有注册的事件消息文件。即使这样做,您也不得不使用在消息文件中包含条目的事件ID(混淆事件的使用者),或者使用没有条目的事件ID并仍然会出错。

+0

我已经做了一些阅读:事件ID与事件源组合确定发生什么样的事件。 总之:我不介意警告错误,但我不应该使用我没有创建的源。我无法创建一个(非管理员安装等),所以我希望找到可用于这些事件的事件源,或者使用不同的机制进行日志记录。思考? – MoSlo

+0

如果您使用.NET 4.5,则可以使用EventSource类(http://msdn.microsoft.com/en-us/library/system.diagnostics.tracing.eventsource.aspx)将事件写入ETW,而无需注册。缺点是事件不会保存在事件日志中,所以如果你不积极地听这些事件,你将不会得到它们。 – fsimonazzi

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

只是为了完整起见,我还要编辑添加它*是*可以使用* Application *事件源这样。 (当然,除非你不同意它是OK的!) –

+0

该示例中的“应用程序”是消息,而不是事件源。事件源是“dotNET示例应用程序”。 公共静态无效WriteEntry( \t串源, \t字符串消息, \t EventLogEntryType类型, \t INT EVENTID ) – fsimonazzi

+0

这不回答这个问题。此外,这导致“来自源应用程序的事件ID 234描述无法找到..” – user2864740

相关问题