动态链接库重定向

来源:互联网 发布:好用的软件 编辑:程序博客网 时间:2024/05/17 03:54
应用程序可能依赖于特定版本的共享DLL,并且如果使用相同DLL的较新版本或旧版本安装了另一个应用程序,则该应用程序将开始失败。有两种方法可以确保您的应用程序使用正确的DLL:DLL重定向和并行组件。开发人员和管理员应该为现有的应用程序使用DL​​L重定向,因为它不需要对应用程序进行任何更改。如果您正在创建新应用程序或更新应用程序,并希望将应用程序与潜在问题隔离,请创建一个并排组件。
要使用DLL重定向,请为您的应用程序创建一个重定向文件。重定向文件必须命名如下:App_name .local。例如,如果应用程序名称是Editor.exe,则重定向文件应该命名为Editor.exe.local。您必须在应用程序目录中安装.local文件。您还必须将DLL安装在应用程序目录中。
重定向文件的内容将被忽略,但是它的存在会导致Windows在加载DLL时首先检查应用程序目录,而不管指定给LoadLibrary或 LoadLibraryEx的路径如何。如果在应用程序目录中没有找到该DLL,那么这些函数使用它们通常的搜索顺序。例如,如果应用程序c:\ myapp \ myapp.exe 使用以下路径调用 LoadLibrary:
c:\ program files \ common files \ system \ mydll.dll
而且,如果同时存在c:\ myapp \ myapp.exe.local和c:\ myapp \ mydll.dll, LoadLibrary将加载c:\ myapp \ mydll.dll。否则, LoadLibrary将加载c:\ program files \ common files \ system \ mydll.dll。
另外,如果一个名为C:\ MYAPP \ myapp.exe.local存在并包含MYDLL.DLL, 调用LoadLibrary加载C:\ MYAPP \ myapp.exe.local \ MYDLL.DLL。
已知的DLL不能被重定向。有关已知DLL的列表,请参阅以下注册表项:HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ Control \ Session Manager \ KnownDLLs。系统使用Windows文件保护来确保诸如此类的系统DLL不会被更新或删除,除非通过操作系统更新(如Service Pack)。
如果应用程序具有清单,则任何.local文件都将被忽略。
如果您正在使用DLL重定向,并且应用程序无法访问搜索顺序中的所有驱动器和目录,则一旦访问被拒绝,LoadLibrary将停止搜索。(如果您不使用DLL重定向,则LoadLibrary会 跳过它无法访问的目录,然后继续搜索。)

将应用程序DLL安装在包含该应用程序的相同目录中是一种很好的做法,即使您不使用DLL重定向。这确保安装应用程序不会覆盖DLL的其他副本,并导致其他应用程序失败。另外,如果遵循这一良好的做法,其他应用程序不会覆盖您的DLL副本,并导致您的应用程序失败。




清单Manifests
清单是伴随并描述并行程序集或独立应用程序的XML文件。清单通过程序集的AssemblyIdentity元素唯一地标识程序集。它们包含用于绑定和激活的信息,例如传统上存储在注册表中的COM类,接口和类型库。清单还指定构成程序集的文件,如果程序集作者希望对其进行版本化,则可以包含Windows类。并行程序集未在系统中注册,但可用于指定清单文件中依赖关系的系统上的应用程序和其他程序集。
清单文件使管理员和应用程序能够在部署后管理并行程序集版本。每个并行程序集都必须有一个相关的清单。Windows XP的安装将安装受 支持的Microsoft并行程序集及其清单。如果您开发自己的并行程序集,则还必须安装清单文件。有关更多信息,请参阅 安装并行程序集和 清单文件参考。
清单和配置文件没有本地化。
以下类型的清单与并行程序集一起使用:
汇编清单描述了并行汇编。它们用于管理并排程序集的名称,版本,资源和相关程序集。共享程序集的清单 存储在系统的WinSxS文件夹中。专用程序集清单作为资源存储在DLL或应用程序文件夹中
应用程序清单描述 隔离应用。它们用于管理应用程序在运行时应绑定的共享并行程序集的名称和版本。应用程序清单被复制到与应用程序可执行文件相同的文件夹中,或作为资源包含在应用程序的可执行文件中。
应用程序配置文件,是清单,用于覆盖并重定向并行程序集和应用程序使用的相关程序集的版本。
Publisher配置文件是用于将并行程序集的版本重定向到其他兼容版本的清单。程序集被重定向到的版本应该与原始版本具有相同的major.minor值。