IE8 下载即崩溃

这几天Green Browser一直不老实工作,只要我点下载或另存文件就异常退出,升级成最新版本问题也没能解决。然后检查IE8,同样会出异常退出,看来是IE8的问题。

先禁掉可疑add-on插件,问题照旧,还是不能下载任何文件。启动IE8 w/o add-on模式,问题还是存在,这下快轮到我崩溃了。

调用Visutal Studio分析,发现问题在Wpc.dll模块中,stack trace如下:

     Wpc.dll!WPCSecurity::CheckSID()  + 0x1d bytes   
     Wpc.dll!CWpcSettings::Initialize()  + 0x11 bytes   
     Wpc.dll!CWebSettings::Initialize()  + 0x3a bytes   
     Wpc.dll!CWindowsParentalControls::GetWebSettings()  + 0x68 bytes   
>    ieframe.dll!InitWPCSettings()  + 0xeb bytes   
     ieframe.dll!CheckFileDownloadSettings()  + 0x26 bytes   
     ieframe.dll!CDocObjectHost::CDOHBindStatusCallback::_ProcessCONTENTDISPOSITIONBindStatus()  + 0x11d bytes   
     ieframe.dll!CDocObjectHost::CDOHBindStatusCallback::_ProcessSecurityBindStatus()  + 0x7a6f0 bytes   
     ieframe.dll!CDocObjectHost::CDOHBindStatusCallback::OnProgress()  - 0x15 bytes   
     urlmon.dll!CBSCHolder::OnProgress()  + 0x40 bytes   
     urlmon.dll!CBinding::CallOnProgress()  + 0x31 bytes   
     urlmon.dll!CBinding::OnTransNotification()  + 0xfb50 bytes   
     urlmon.dll!CBinding::ReportProgress()  + 0x2c bytes   
     urlmon.dll!COInetProt::ReportProgress()  + 0x58 bytes   
     urlmon.dll!CTransaction::DispatchReport()  - 0xa bytes   
     urlmon.dll!CTransaction::DispatchPacket()  + 0x31 bytes   
     urlmon.dll!CTransaction::OnINetCallback()  + 0x83 bytes   
     urlmon.dll!TransactionWndProc()  + 0x28 bytes   
     user32.dll!_InternalCallWinProc@20()  + 0x23 bytes   
     user32.dll!_UserCallWinProcCheckWow@32()  + 0xd3 bytes   
     user32.dll!_DispatchMessageWorker@8()  + 0xee bytes   
     user32.dll!_DispatchMessageW@4()  + 0xf bytes   
     ieframe.dll!CTabWindow::_TabWindowThreadProc()  - 0x32182 bytes   
     ieframe.dll!LCIETab_ThreadProc()  + 0x4433 bytes   
     iertutil.dll!CIsoScope::RegisterThread()  - 0x3227 bytes   
     kernel32.dll!@BaseThreadInitThunk@12()  + 0xe bytes   
     ntdll.dll!___RtlUserThreadStart@8()  + 0x23 bytes   
     ntdll.dll!__RtlUserThreadStart@8()  + 0x1b bytes   

ieframe.dll!InitWPCSettings() 尝试加载Wpc.dll,然后在Wpc中发生异常。Wpc.dll是处理Parental Controls的模块,对此了解不多,网上也没有多少介绍。

先找到我上次做的系统备份,是一个月前做的,竟然没找到这个文件,于是揣测是近期新装的程序或Windows update安装的。但到底是什么软件还很难去定位。

c:\Windows\SysWOW64>dir Wpc.dll
2009/07/14  09:16           308,736 Wpc.dll
c:\Windows\SysWOW64>dumpbin /headers wpc.dll |grep version
            9.00 linker version
            6.01 operating system version
            6.01 image version
            6.01 subsystem version
               0 Win32 version

查看PE文件头,OS竟是6.1,资源中的版本号是1.0.0.1。这里要注意一点:Windows 6.1是Windows 7,Microsoft比较搞笑。我当前的系统是Windows Server 2008 AMD64,是Windows 6.0,就试着用另一台Visata AMD64的Wpc.dll替代这个,结果竟然正常运行。看来IE8 crash是这个Wpc.dll的问题。

再检查一下Vista系统的Wpc.dll

C:\Windows\SysWOW64>dir Wpc.dll
2008/01/21  10:51           296,960 Wpc.dll
C:\Windows\SysWOW64>dumpbin /headers Wpc.dll | grep -i version
Microsoft (R) COFF/PE Dumper Version 9.00.30729.01
            8.00 linker version
            6.00 operating system version
            6.00 image version
            6.00 subsystem version
               0 Win32 version

Vista系统的Wpc.dll资源中的版本号也是1.0.0.1。看来二者是用同一source code分别针对Vista和Win7做的不同的编译。

同时将本系统的64位Wpc.dll恢复成Vista系统的,至此Green Browser/IE8下载又正常工作了。

一条评论

  1. 今天找到原因,Wpc.dll文件来源于Windows games explorer (http://www.win2008workstation.com/forum/viewtopic.php?f=25&t=927).

    我很喜欢Vista上的Tinker游戏,相当有趣。曾想过办法在Server 2008 X64上运行。为此之间安装过games explorer,但没能成功。在清除/卸载时没清理彻底,致使IE8无辜受累。之所以没早发现,大概因为工作忙没上网下载,还有这阵子基本在用Firefox和Chrome。

    既然Server 2008不能很好地支持Win7的DLL,就用Vista系统的替换掉games explorer包中其它的DLL文件后,Think游戏竞然能运行了。呵呵,这下空闲的时候有得玩了。

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注