在保护模式下从IE扩展中写入Windows事件日志 - 失败,拒绝访问

时间:2010-08-11 19:27:09

标签: .net event-log bho protected-mode

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

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

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

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

我正在使用.net 2.0

感谢。

在此处交叉发布:msdn_microsoft_ieextensiondevelopment

1 个答案:

答案 0 :(得分:1)

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

  • 创建服务并向其发送消息 - 如果您要记录任何规律性的内容,我会这样做。但谁将一堆消息写入系统日志?
  • 以静默方式启动一个小型应用程序,作为代理进程升级到中等信任

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

对于用户而言,服务方法不那么明显,但会从计算机的资源中略微占用一些馅饼。

请参阅Understanding and Working in Protected Mode Internet Explorer中的保护模式启动流程。