2010-08-11 14 views
0

在保護模式爲Windows 7的Internet Explorer中運行的BHO中,我試圖寫入Windows事件日誌。我正在寫一個已經存在的源代碼,它在應用程序日誌中,所以我不明白爲什麼會被阻止。但是,我對System.Diagnostics.EventLog.WriteEntry("MySource", "Some message")的調用失敗,並出現InvalidOperationException,並顯示消息「無法打開日誌作爲源'XXX'。您可能沒有寫入權限。」堆棧跟蹤表示它在EventLog.OpenForWrite(String currentMachineName)寫入窗口在保護模式下的IE擴展中的事件日誌 - 失敗並導致拒絕訪問

關閉保護模式使其正常工作。

任何原因,這將不被允許在保護模式,以及我可以註冊我的BHO作爲允許寫入事件日誌,或以其他方式工作的任何方式嗎?

根據this post對OpenForWrite()的調用導致UnsafeNativeMethods.RegisterEventSource(this.machineName, this.sourceName);的調用,但文檔沒有讓我更進一步。

我使用的是.net 2.0

謝謝。

跨張貼在這裏:msdn_microsoft_ieextensiondevelopment

回答

1

如果你真的需要寫入系統日誌我要麼:

  • 創建服務,併發送消息給它 - 如果你將要登錄的東西任何經常性我都會這樣做。但是誰寫了一堆消息到系統日誌?
  • 啓動一個很小的應用程序默默地被提升到中等信任的代理進程

,讓我們一起去第二個選項。一些方法來做到這一點,但我會給你一個想法。將要記錄的數據寫入文件或註冊表中的低完整性位置。然後啓動一個提升到中等信任度的小應用程序,它會提取數據並寫入它。這是否有效?但是,如果寫入系統日誌是非常罕見的事件,那麼隨着時間的推移這將產生最小的開銷。

服務方式對用戶不太明顯,但會從計算機的資源中剔除一點兒餡餅。

請參閱從保護模式啓動進程Understanding and Working in Protected Mode Internet Explorer