加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

.net – 如何更改我的IE扩展以解决另一个模块(flash.ocx)崩溃IE

发布时间:2020-12-15 07:23:41 所属栏目:百科 来源:网络整理
导读:我有一个Internet Explorer扩展(一个BHO),可以很好地在数千台机器上运行,但在某些情况下似乎会导致Flash崩溃iexplore.exe与访问冲突.我可以尝试做些什么来避免这种冲突? 更多细节: 在一个客户的环境中,我们遇到这样的情况,即在使用Flash访问网站并关闭IE选
我有一个Internet Explorer扩展(一个BHO),可以很好地在数千台机器上运行,但在某些情况下似乎会导致Flash崩溃iexplore.exe与访问冲突.我可以尝试做些什么来避免这种冲突?

更多细节:

在一个客户的环境中,我们遇到这样的情况,即在使用Flash访问网站并关闭IE选项卡后,选项卡进程崩溃.只有在Flash和我的扩展程序都启用且目前在该公司环境之外的工作站上无法复制时,才会发生这种情况.如果我的扩展程序配置为在该页面上什么都不做 – 它仍然会发生 – 即我的一些代码仍然执行但很少.

如果该网站不在受信任的站点中,则该选项卡在保护模式下运行,并且崩溃的结果是一个窗口,表示该网页要运行dw20.exe(即Watson博士).

如果该网站被添加到可信站点,则会向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 FilesInternet Exploreriexplore.exe
Faulting module path: C:Windowssystem32MacromedFlashFlash32_13_0_0_214.ocx
ReportId: 0094988b-7591-11e4-93e6-6cf0492a8610

这是一个相当新的闪存版本,但不是最新版本.他们尝试升级到最新版本,但症状相同.

他们的工作站运行Sophos防病毒软件,在极少数情况下,我们看到防病毒软件导致我们的扩展程序出现问题.我们在停止提到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(null)方法(卸载我的扩展时发生的事件)中,我有几行清理代码,如Marshal.FinalReleaseComObject(webBrowser)和GC.Collect().删除其中一个或多个:可能GC或COM清理混乱了Flash的内存空间.
>改变我的dlls.
>在工作站上卸载并重新安装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,time stamp: 0x53ee1c49 
Exception code: 0xc0000005 
Fault offset: 0x00007264 
Faulting process id: 0x1bb4 
Faulting application start time: 0x01cfec57f247cb53 
Faulting application path: C:Program FilesInternet Exploreriexplore.exe 
Faulting module path: C:WindowsSystem32jscript9.dll 
Report Id: 50b58f63-584b-11e4-bc66-6cf0492a8610 
Faulting package full name: %14 
Faulting package-relative application ID: %15

所以我想这可以打开它不与Flash相关……

解决方法

问题是,使用.Net,你几乎什么都不做就能积极地弄乱内存.所以,除非你在Api调用中玩很多,否则你的代码中的某些东西很难导致错误.

在我看来,重新定位DLL是最有希望的事情;也没有搞乱海湾合作委员会,这似乎是一个非常好的选择(而且总是这样,不仅仅是在这种情况下).

另一个问题是,你的模块不是故障,这是值得认真考虑的事情:你的代码不是试图通过另一个dll进入malloc的内存区域,而是他们的代码试图弄乱你的dll的内存空间.

可能你最好的选择是DW;通过让它保存转储,您可以通过堆栈跟踪来查找导致问题的代码.再次回溯,你可以找到一些参数变成垃圾的时刻.最后,您可以使用此https://msdn.microsoft.com/en-us/windows/hardware/hh852365实时调试崩溃.为什么这一切?好吧,因为如果你没有在你的dll中做任何奇怪的事情(比如手动malloc’ing),在.Net中你不能以任何方式搞乱内存,所以’导致另一个dll中的0x05; 99%是这个特定的IE,它的特定配置是一切的原因,所以你最快的解决方案是调试,找到有问题的代码,然后压缩你拥有的每一个信息并将其邮寄给MS.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读