0

我的 WPF 应用程序使用 Log4Net 将消息记录到事件查看器。这在大多数机器上都很好用。但是,我办公室有两台机器出现问题。一个是具有 2 GB 内存的物理 Windows 7 机器,另一个是运行 XP 的虚拟机,它也具有 2 GB 内存。

问题是即使用户使用具有管理员权限的帐户登录,系统也不会让他们创建我为我的应用程序设置的自定义事件日志。这导致我的程序死亡。

我可以在所有 Log 调用上添加错误处理,但我的感觉是我不应该这样做。正在将消息记录在 catch 处理程序中以处理已发生的另一个错误。如果无法记录错误信息,我该怎么办?

无论如何,我昨天尝试在 XP 虚拟机上创建自定义事件日志,但仍然没有创建。我究竟需要做什么才能在这两台机器上创建自定义事件日志?

托尼

4

2 回答 2

1

事实证明,问题根本不在日志记录代码中。我的程序使用 WPF 作为 GUI。它的启动序列在 UI 线程上做最少的工作,因此它可以尽快显示 UI。

其余的初始化在后台线程上完成。我知道发生了错误,但在事件查看器的日志列表中找不到自定义错误日志。事实证明,我的代码在数据库中没有找到它需要的一些数据,并试图报告错误。这是一个两步过程,首先将错误记录到日志中,然后显示自定义MessageBox对话框。XamlParseException当程序试图显示此对话框时,我得到了一个。

长话短说,导致程序崩溃的问题是XamlParseException. 这是因为我MessageBox's Show在后台线程上调用自定义方法,而不是在 UI 线程上。因为在事件查看器中找不到自定义事件源,所以找不到错误,所以我认为错误是权限问题。

顺便说一句,我曾经尝试过手动创建事件日志,昨天我检查了注册表,确实找到了自定义事件源的条目。

这里还有另一台机器也有同样的问题。我确定这是同一个问题。我正在向错误处理中添加逻辑,以确保MessageBox始终在 UI 线程上调用自定义,这样如果再次出现相同的问题,程序就不会像那样爆炸。

于 2012-06-15T13:22:00.883 回答
0

我们需要看看您是如何尝试在 XP 机器上创建事件日志的...

通常,您需要阅读以下内容:http: //msdn.microsoft.com/en-us/library/49dwckkz (v=vs.80).aspx

特别是讨论何时创建自定义事件日志的注释:

“通常,在安装应用程序期间创建新的事件源。这允许操作系统有时间刷新其注册事件源列表及其配置。如果操作系统没有刷新其事件源列表并且您尝试使用新源写入事件,写入操作将失败。如果无法在安装期间创建源,请尝试在第一次写入操作之前创建源,可能在应用程序初始化期间。如果您选择此选项方法,请确保您的初始化代码在计算机上以管理员权限运行。这些权限是创建新事件源所必需的。”

尝试在第一个日志事件之前创建自定义日志以使用它。

于 2012-06-14T19:24:16.977 回答