0

在启用保护模式的 Windows 7 上的 Internet Explorer 中运行的 BHO 中,我正在尝试写入 Windows 事件日志。我正在写一个已经存在的源,它在应用程序日志中,所以我不明白为什么会被阻止。但是,我的调用System.Diagnostics.EventLog.WriteEntry("MySource", "Some message")失败并出现 InvalidOperationException,并显示消息“无法打开源 'XXX' 的日志。您可能没有写入权限。”。堆栈跟踪表明它位于EventLog.OpenForWrite(String currentMachineName).

关闭保护模式使其工作正常。

在保护模式下不允许这样做的任何原因,以及我可以将我的 BHO 注册为允许写入事件日志或以其他方式使其工作的任何方式?

根据这篇文章,对 OpenForWrite() 的调用会导致对 的调用UnsafeNativeMethods.RegisterEventSource(this.machineName, this.sourceName);,但该文档并没有让我进一步了解。

我正在使用.net 2.0

谢谢。

在这里交叉发布:msdn_microsoft_ieextensiondevelopment

4

1 回答 1

1

如果您真的需要写入系统日志,我会:

  • 创建一个服务并向它发送消息-如果您要定期记录某些内容,我会这样做。但是谁将一堆消息写入系统日志?
  • 静默启动一个小型应用程序,该应用程序作为代理进程提升到中等信任度

让我们选择选项二。有几种方法可以做到这一点,但我会给你一个想法。将要记录的数据写入低完整性位置的文件或注册表。然后启动一个提升到中等信任度的小应用程序,它会拾取数据并写入它。这有效率吗?不会。但是如果写入系统日志是非常罕见的事件,那么随着时间的推移,这将产生最少的开销。

服务方法对用户来说不太明显,但会占用计算机资源的一小部分。

请参阅了解和使用保护模式 Internet Explorer 中的从保护模式启动进程。

于 2011-05-17T19:28:40.927 回答