在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
感谢。
答案 0 :(得分:1)
如果你真的需要写入系统日志,我会:
让我们选择选项二。有几种方法可以做到这一点,但我会给你一个想法。将要记录的数据写入低完整性位置的文件或注册表中。然后启动一个提升到中等信任的小应用程序来获取数据并写入它。这有效吗?不会。但是,如果写入系统日志是非常罕见的事件,那么随着时间的推移,这将产生最小的开销。
对于用户而言,服务方法不那么明显,但会从计算机的资源中略微占用一些馅饼。
请参阅Understanding and Working in Protected Mode Internet Explorer中的保护模式启动流程。