微软IE7的问题
最近在测我负责的一个模块时候发现一个问题,一个dll无法加载。用dependency walker之后,发现是有2个其所依赖dll(非直接)没有找到,而这2个都是windows系统的dll,此前的测试中并没有问题。经过一番比较终于发现罪魁祸首是IE7,而负责搭建环境的家伙最近在clean image里加上了IE7.昨天偶把这个问题escalate了,现在初步决议是暂时放弃对IE7的支持,google了一把,资料还挺多,以下就是一段和我们相同的问题,不知道大家有没有遇到过:
“Now that vista is out, can you please fix the MAJOR bug that causes IE7 to kill any non vista box. Namely that IEFRAME.DLL seems to have been compiled with a call to DwmExtendFrameIntoClientArea which it says is in DWMAPI.dll except that DWMAPI.DLL is a VISTA DLL! So any application that for whatever reason pulls that in, seems to fail.I don't know why IE7 doesn't fail as well, but many applications are failing left and right due to this.”
“I highly recommend people think twice about installing IE7. It will most likely break existing applications on your system.
MSHTML.DLL pulls in IEFRAME.DLL which attempts to pull in DWMAPI.DLL. However, DWMAPI.DLL does no exist on any non vista box. I just installed a Server 2K3 box and did the critical updates and since IE7 was listed as high priority it downloaded and I got hit by this.
It's amazingly shocking that something like this got through Microsoft's testing.”
很遗憾微软的QA没有发现这个问题,或者更可能的是发现了,但是级别调的很低,所以就直接出来了。既然这样微软就不该在除了vista以外的平台上急于推广IE7。以前微软这方面做得都不错,但近年来无论是office,windows等都有这方面断层的苗头出现,所以新版本office和windows vista都远不如预期的普及速度,当然xp实在是个强悍的产品 lol。所以如果不是用vista,建议大家不要急着用IE7。 可能并非IE7的bug
IE7在安全性方面加强了许多,在vista uac的帮助下,对外来dll的加载变化了。
回复 2# 的帖子
其实关键不在变化,也不在怎么变化。而是对于这种改变微软应该及时有方案出来,而不是就这样出来。
要知道这样的调用并不是很冷门的调用(至少基于我的调查),而且我们这个产品还算历史悠久。。。比较成熟的,业界应用也很广泛。。。这种情况下要在vista以外推广IE7 ,应该要注意这些问题。 我们调用的是mshtml.dll,这个完全没有问题,但是IE7的版本里,这个dll会调用2个文件,这2个文件是vista的。 Google了一把,如你说述很多,找到你发的那段话来自ieblog上的一则评论,所以我通过此人的评论来推断问题是DWMAPI.DLL这个仅存在Vista上的dll在单独安装运行在Vista之前的IE7确被调用了,如果理解有偏差请指正。
MSDN上关于函数DwmExtendFrameIntoClientArea说明中指出,该函数能支持的最低操作系统为Windows Vista。桌面窗口管理(Desktop Window Manager,DWM)是微软新操作系统Vista全新图形显示系统的管理支持,Vista之下的任何微软系统都不会具备这一特性,因为图形显示系统的内核是无法集成到Vista之前的OS内。
微软的OS是上游厂商,据我所知,Vista release之前微软中国都联系过国内好些家顶级ISV,测试过国内使用排名靠前几位的产品。如果你的产品没被覆盖,那也是资源有限也是你的产品在国内市场上的排名不靠前。如果你需要这方面改动的资料或者如果你说是微软MSDN的客户,你应该主动去联系微软中国或者去微软的官网网站/论坛寻找workaround的方法,推动他们来解决你这一现实问题。 恩,你的理解是对的。
至于我们调用的是哪个函数,我还没来得及查代码,所以不是很确定是哪个造成。这个DwmExtendFrameIntoClientArea只不过是那个和我们有类似问题的人的情况。
但是请注意看2点:
1. 整个系统在IE6的机器上一直运行没有问题的(说明代码不可能去调用任何vista的东西)
2. 在代码没有变动的情况下,装了IE7以后出现这个问题。然后排查中是mshtml.dll自身的依赖发生变动,这样问题就很清楚了。
我们部门的产品在国内的排名不靠前是有可能的。但是在国际范围是靠前的,呵呵。至于解决这个问题,暂时不需要我了,我就负责查到这步了,后面是开发的问题了。在其他地方我是还没有看到什么好的workaround(除了卸载IE7...)我就是想看看这边有没有其他人遇到。
页:
[1]