.net 如何更改我的IE扩展以解决另一个模块(flash.ocx)崩溃IE中的访问冲突?
我有一个Internet Explorer扩展(BHO),可以在数千台机器上正常工作,但在某些情况下,它似乎会导致Flash因访问冲突而使iexplore.exe崩溃。我可以尝试做些什么来避免这种冲突 更多详细信息: 在一个客户的环境中,我们遇到这样一种情况:当使用Flash访问网站并关闭IE选项卡后,选项卡进程崩溃。只有当Flash和my extension都已启用且目前为止无法在该公司环境之外的工作站上复制时,才会发生这种情况。如果我的扩展被配置为在该页面上不执行任何操作,也就是说,我的一些代码仍然执行,但执行的很少 如果网站不在受信任的网站中,则该选项卡将以保护模式运行,崩溃的结果是出现一个窗口,表明该网页希望运行dw20.exe(即Dr Watson) 如果将网站添加到受信任的站点,则会在windows应用程序事件日志中写入一个错误,IE会重新打开该选项卡,并显示一条小信息栏消息,说明IE已从崩溃中恢复。不管怎样,这都令人沮丧!用户真的不在乎当他们关闭选项卡时进程是否崩溃,因此我很乐意找到一种解决方法,即不会向用户显示错误消息,并且选项卡不会重新打开 windows应用程序事件日志没有说明太多,但它确实说明iexplore.exe进程因出现故障的模块闪存而崩溃:.net 如何更改我的IE扩展以解决另一个模块(flash.ocx)崩溃IE中的访问冲突?,.net,internet-explorer,flash,bho,ieaddon,.net,Internet Explorer,Flash,Bho,Ieaddon,我有一个Internet Explorer扩展(BHO),可以在数千台机器上正常工作,但在某些情况下,它似乎会导致Flash因访问冲突而使iexplore.exe崩溃。我可以尝试做些什么来避免这种冲突 更多详细信息: 在一个客户的环境中,我们遇到这样一种情况:当使用Flash访问网站并关闭IE选项卡后,选项卡进程崩溃。只有当Flash和my extension都已启用且目前为止无法在该公司环境之外的工作站上复制时,才会发生这种情况。如果我的扩展被配置为在该页面上不执行任何操作,也就是说,我的一些
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
这是一个相当新的flash版本,但不是最新版本。他们尝试升级到最新版本,但症状相同
他们的工作站运行Sophos antivirus,在一些罕见的情况下,我们看到antivirus会导致扩展出现问题。我们在停止所有提到Sophos的windows服务后进行了测试,同样的问题也发生了,所以我很确定这与Sophos无关
我的扩展是使用.NET3.5SP1构建的,这不是一种理想的方法,因为它可能与其他扩展在运行时发生冲突,但目前情况就是这样
如果我禁用扩展,问题就会消失。如果我禁用闪光灯,问题就会消失。故障模块Flash32_13_0_0_214.ocx
强烈指出这是一个bug,但我认为理论上这可能是我代码中的一个问题。我的扩展没有执行任何非托管代码,所以它不可能是这样的,所以我想不出我的扩展可以做任何可能导致访问冲突的事情。这使得Flash中可能存在bug,这似乎完全有可能,或者我与IE中COM对象的交互方式存在问题。但是,除非我能指出一些具体的、可复制的东西,否则Flash团队不太可能调查此类bug报告,现在我不能在任何开发机器上进行复制,所以这不是很好。即使它是一个Flash bug,从客户的角度来看,这与我的产品中的bug没有什么不同:要么我修复它,要么我的产品将被卸载,他们将保持Flash
选项
我所希望的是关于以下方面的一些想法:
- 在我的代码/产品中有什么可以避免与Flash冲突的地方吗?例如,将我的DLL重定基址以将扩展移到另一个内存区域是否有任何希望?为.NET4.0/4.5重新编译是否有机会工作
- 我能做些什么来复制这个问题。。。为什么这在其他几十家公司都不是问题,但在这家公司却成了问题?有没有想过是什么环境因素触发了这里的问题,而不是在设置不同的工作站上
- 尝试获取崩溃转储或其他关于崩溃的诊断信息(例如崩溃时的ProcMon)是否有意义?我不具备进行此类诊断的专业知识,因此我希望避免此类诊断,除非它可能会让我找到一个答案,说明我可以在我的产品中做哪些不同的事情,或者准确指出闪存模块中的某个错误(如果真的有)
- 我很高兴能找到一种方法让它安静地崩溃,比如说,当它崩溃时,能阻止IE重新打开标签
- 使用.NET4重新编译
- 在我的SetSite(null)方法(卸载扩展时发生的事件)中,我有几行清理代码,比如
和Marshal.FinalReleaseComObject(webBrowser)
。删除其中一个或多个:可能GC或COM清理会弄乱闪存的内存空间李>GC.Collect()
- 重新设置DLL的基址
- 在工作站上卸载并重新安装IE9,看看是否有任何效果。这不是一个可以在公司范围内使用的解决方案,但可能表明他们的IE形象存在一些问题
jscript 9.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
所以我想这会让它变得与闪存无关…问题是,使用.Net,您几乎无法主动地扰乱内存。因此,除非您经常使用Api调用,否则很难确定是代码中的某些内容导致了错误 在我看来,重新定位dll似乎是最有希望的事情;不干扰GCC似乎也是一个非常好的选择(而且总是这样,不仅仅是在这种情况下)
另一个问题是,不是你的模块是错误的,这是一个值得认真考虑的问题:不是你的代码试图通过另一个DLL,BU到达一个内存区域。