Windows 有一种方法可以缓解传说种的 DLL Hell,即动态链接库重定向技术。
这种简单技术的实现方法如下:
场景:
应用程序 a.exe 依赖动态链接库 compoent.dll 1.0 版本。但是用户的另一个软件 b 在系统的系统目录安装了 component.dll 2.0 版本,这两个版本完全不兼容,
因此,Windows 在加载 component.dll 的时候,会直接加载系统目录中的 component.dll,这就造成了 a.exe 程序无法运行,如果这时用户需要同时使用两个软件,就会造成所谓的 DLL Hell。
使用动态链接库重定向技术解决 DLL Hell :
这里有两种方法可以实现动态链接库重定向技术。
创建 a.exe.local 文件,该文件内容为空。
这时系统就会强制使 a.exe LoadLibrary 时先在 a.exe 所在的目录下查找要加载的动态库,之后才到系统目录下寻找。这个解决方法适用于两个不同的应用。创建 a.exe.local 目录,将 a.exe 依赖的库放入其中。
这时系统就会强制使 a.exe LoadLibrary 时先在 a.exe.local 目录下查找要加载的动态库,之后才到系统目录下寻找。这个解决方法适用于单个应用中存在两个应用程序,并且以来同名但是互不兼容的库。
动态链接库重定向技术实际上是 M$ 修改了 LoadLibrary(Ex) 的代码,使其在调用时先检测是否存在
参考 : https://msdn.microsoft.com/en-us/library/ms682600(VS.85).aspx