读书人

EXE缺少某些务须依赖的DLL也能运行

发布时间: 2013-01-18 10:22:42 作者: rapoo

EXE缺少某些必须依赖的DLL也能运行?
用view dependency查看exe程序的DLL依赖,msvcr80.dll这几项黄色问号,目录下也的确是没有msvcp80.dll,msvcr80.dll之类的玩意,但是EXE还是能运行,请问为什么呢?我看了QQ2011也是这样子。机子也没装vs2005.
[解决办法]
可能是延迟加载的dll
[解决办法]

引用:
用view dependency查看exe程序的DLL依赖,msvcr80.dll这几项黄色问号,目录下也的确是没有msvcp80.dll,msvcr80.dll之类的玩意,但是EXE还是能运行,请问为什么呢?我看了QQ2011也是这样子。机子也没装vs2005.


dll是被动态调用的,所以会被若干个程序共享使用的 但是如果dll在应用程序不知道的情况下升级了、或是被另一个程序更改了,就可能会出现问题,即"DLL Hell"

随着系统资源越来越丰富,硬盘不那么紧张,所以在XP以后的操作系统中,用新的机制来管理DLL
(这种机制,这不仅仅是对于.NET而言,对于普通的Native程序也是一样的)

Madifest是个XML的描述文件,对于每个DLL有DLL的Manifest文件,对于每个应用程序Application也有自己的Manifest

对于应用程序而言,Manifest可以是一个和exe文件同一目录下的.manifest文件,也可以是作为一个资源嵌入在exe文件内部的(Embed Manifest)

XP以前版本的windows,会像以前那样执行这个exe文件,寻找相应的dll,没有分别
Manifest只是个多余的文件或资源,dll文件会直接到system32的目录下查找,并且调用

而XP以后的操作系统,则会首先读取Manifest,获得exe文件需要调用的DLL列表

读书人网 >C++

热点推荐