2015-02-05 13 views
4

我有一個Internet Explorer擴展(BHO),可以很好地在數千臺機器上運行,但在某些情況下,似乎會導致Flash以iexplore.exe的方式崩潰。我能做些什麼來避免這種衝突?如何更改我的IE擴展以解決另一個模塊(flash.ocx)中的訪問衝突導致IE崩潰?

更多細節:

在一個客戶的環境,我們有一個情況下訪問使用Flash網站並關閉IE選項卡的標籤進程崩潰後,當其中。只有當Flash和我的擴展程序都啓用並且在公司環境以外的工作站上不可複製時,纔會發生這種情況。如果我的擴展配置爲在該頁面上什麼都不做,它仍然會發生 - 即我的一些代碼仍然執行但很少。

如果網站不在受信任的站點中,那麼該選項卡將以受保護模式運行,並且崩潰的結果是一個窗口,表示網頁要運行dw20.exe(即Dr.Watson)example

如果網站被添加到受信任的站點,那麼錯誤被寫入到Windows應用程序事件日誌中,並且IE重新打開帶有小信息欄消息的標籤,說IE從崩潰中恢復它。無論哪種方式,這是令人沮喪的!用戶真的不在乎關閉該選項卡時進程是否崩潰,因此我很樂意提供一種解決方法,這意味着不會向用戶顯示錯誤消息,並且該選項卡不會重新打開。

Windows應用程序事件日誌中沒有說太多,但它確實說iexplore.exe進程崩潰與錯誤模塊閃存:

Error/Application Error/EventID=1000 

Faulting application name: iexplore.exe, version 9.0.8112.16592, time stamp 0x544e95a7 
Faulting module name: Flash32_13_0_0_214.ocx, version 13.0.0.214, time stamp 0x5359c422 
Exception code: 0xc0000005 
Fault offset: 0x00073678 
Faulting application start time: 0x01d0099db319df49 
Faulting application path: C:\Program Files\Internet Explorer\iexplore.exe 
Faulting module path: C:\Windows\system32\Macromed\Flash\Flash32_13_0_0_214.ocx 
ReportId: 0094988b-7591-11e4-93e6-6cf0492a8610 

這是閃光的一個相當新的版本,但不是最新的。他們已經嘗試升級到最新版本,但具有相同的症狀。

他們的工作站已經運行Sophos Antivirus,並且在一些極少數情況下,我們看到防病毒引發了我們擴展的問題。我們在停止了所有提及Sophos並出現過相同問題的Windows服務之後進行了測試,因此我相當於確定它與此無關。

我的擴展是使用.NET 3.5 SP1構建的,由於與其他擴展可能存在運行時衝突,因此這不是一種理想的方法,但現在它就是這樣。

如果我禁用了我的擴展,問題就消失了。如果我禁用Flash,問題就會消失。錯誤模塊Flash32_13_0_0_214.ocx強烈指出它是一個錯誤,但我想在理論上它可能是我的代碼中的一個問題。沒有非託管代碼正在執行從我的擴展,所以它不能這樣,所以我想不出任何我的擴展可能會導致AccessViolation。這就在Flash中留下了一個錯誤,這看起來完全可能,或者與我與來自IE的COM對象進行交互的方式存在問題。然而,除非我能指出某些特定的和可複製的東西,否則Flash團隊不太可能調查這樣的錯誤報告,而現在我無法在任何開發機器上覆制,因此這並不好。即使它是一個Flash錯誤,從客戶的角度來看,這與我的產品中的錯誤沒有任何區別:要麼我修復它,要麼我的產品將被卸載,並且它們將保留Flash。

選項

什麼我希望的是關於一些想法:

  • 有什麼我可以在我的代碼/產品嚐試,可能會避免與Flash相沖突?例如,如果將我的dll移動到另一個內存區域,有任何希望工作?重新編譯.NET 4.0/4.5有沒有機會工作?

  • 我能做些什麼來複制這個問題......爲什麼這不會成爲許多其他公司的問題,但在這個問題上會成爲問題?對於什麼可能是觸發問題的環境因素有任何想法,但不是在工作站設置不同?

  • 有沒有試圖獲得崩潰轉儲或其他關於崩潰的診斷信息(例如崩潰時的ProcMon)?我沒有專業知識來通過這樣的診斷,所以我想避免它,除非它可能導致我回答我在產品中可以採取什麼不同的方式,或者找出閃存模塊中的確切錯誤(如果確實存在是一個)。

  • 我會很高興的一種方式,使其無聲地崩潰,所以例如,當IE崩潰時重新打開標籤頁。

可能有一段時間我還沒來得及跟客戶測試不同的選項,所以我想嘗試一些東西。任何想法大大讚賞。

到目前爲止我的一些隨機想法。他們中的任何一個值得嘗試?

  • 使用.NET 4
  • 以我SetSite(空)方法我有清理幾行代碼,像Marshal.FinalReleaseComObject(webBrowser)GC.Collect()(我的擴展正在卸載時發生的事件)重新編譯。刪除其中的一個或多個:也許GC或COM清理Flash的內存空間。
  • 重裝我的dll。
  • 卸載並重新安裝工作站上的IE9,看看是否有任何影響。這不是一種可以在公司範圍內使用的解決方案,但可能表明它們的IE映像有些不妥。

更新

客戶再次而是複製的問題的Flash OCX的錯誤模塊是jscript9.dll。他們也報告看到ntdll.dll也是如此,儘管我沒有看到我自己。

Faulting application name: iexplore.exe, version: 9.0.8112.16575, time stamp: 0x53ee1acb 
Faulting module name: jscript9.dll, version: 9.0.8112.16575, time stamp: 0x53ee1c49 
Exception code: 0xc0000005 
Fault offset: 0x00007264 
Faulting process id: 0x1bb4 
Faulting application start time: 0x01cfec57f247cb53 
Faulting application path: C:\Program Files\Internet Explorer\iexplore.exe 
Faulting module path: C:\Windows\System32\jscript9.dll 
Report Id: 50b58f63-584b-11e4-bc66-6cf0492a8610 
Faulting package full name: %14 
Faulting package-relative application ID: %15 

所以我想這打開它最多也不會成爲Flash相關...

+0

我不知道是否有鏈接,但我認爲iexplore.exe是一個64位的應用程序,而Flash的ActiveX和jscript9.dll是32! – akmozo 2015-02-08 23:12:58

+0

使用IE9 32位IE通常是64位機器上的默認設置,除非有人已經做了一些非常特殊和奇怪的事情來使64位成爲默認設置。在這種情況下,他們是32位工作站,所以它絕對是32位IE。 – Rory 2015-02-08 23:31:24

+0

是否有可能分享您的IE擴展來測試它,可能有人可以重現該問題,並可以幫助識別其來源? – akmozo 2015-02-08 23:38:30

回答

3

問題是,與.net你幾乎可以做任何積極混亂的記憶。所以,除非你使用Api調用玩了很多,否則在代碼中導致錯誤是非常困難的。

重新部署dll似乎是我最有前途的事情;不會搞亂GCC,似乎是一個非常好的選擇(並且總是這樣,不僅在這種情況下)。

另一個問題是,它不是你的模塊誰是錯誤的,這是要認真考慮的事情:它不是你的代碼誰試圖到達另一個dll malloc的內存區,但它是他們的代碼試圖弄亂與你的dll的內存空間。

也許你最好的選擇是DW;通過讓它保存轉儲,您可以通過堆棧跟蹤來查找導致問題的代碼。再次追溯,您可以找到某個參數變成垃圾的時刻。最後,您可以使用此https://msdn.microsoft.com/en-us/windows/hardware/hh852365實時調試崩潰。爲什麼所有這些?那麼,因爲如果你沒有在你的dll中做任何奇怪的事情(如手動malloc'ing),在.Net中,你不能以任何方式混淆內存,以便在另一個dll中產生0x05; 99%是這個特定的IE,它的具體配置是一切的原因,所以你最快的解決方案將是調試,找到有問題的代碼,然後壓縮你擁有的每一個信息並將它郵寄給MS。

+1

是的,我支持這個答案,並同意使用MS PSS和完整內存轉儲,PDB文件和所有支持文檔是最佳的行動方案。也許只是將內存轉儲和SOS加載到帶有PDB文件路徑的WinDBG中,然後在與Microsoft進行交互之前執行'!analzye'。我認爲OP已經瞭解了它與客戶環境的關係,並且修復它會是理想的 - 你很可能需要證據來向客戶展示吸菸槍是由其中一個組件引起的(flash?,jscript ?, IE ?真的是任何人的猜測,但WinDbg會告訴你)。 – 2015-02-14 08:11:09

+0

謝謝你們。 DW似乎沒有創建內存轉儲...已經在顯而易見的地方看過。有小費嗎? – Rory 2015-02-15 17:59:08

+0

這是一款Vista PC,對吧? – motoDrizzt 2015-02-16 12:25:16

相關問題