加载 Windows 程序的搜索顺序

文章详细描述了Windows系统加载动态链接库(DLL)的默认搜索顺序,包括应用程序目录、系统目录、Windows目录等,并提到开发者可以如何通过函数如LoadLibraryEx和SetDllDirectory改变搜索路径。
摘要由CSDN通过智能技术生成

在 Windows 操作系统中,当一个应用程序尝试加载一个动态链接库(DLL)而没有指定完整的路径时,系统会按照一定的顺序搜索 DLL 的位置。这个搜索顺序可以通过不同的方式进行调整,但默认情况下,搜索顺序如下:

1. 应用程序所在目录:系统首先会在启动应用程序的同一目录下搜索 DLL。
2. 系统目录:如果应用程序所在目录中没有找到 DLL,系统会查找系统目录下的 DLL。这通常是 C:\Windows\System32 对于 32 位系统,或 C:\Windows\SysWOW64 对于 64 位系统。
3. 16位系统目录:这是一个为了兼容旧的 16 位应用程序而保留的目录,通常不是必需考虑的。
4. Windows 目录:接下来,系统会在 C:\Windows 目录下搜索 DLL。
5. 当前目录:系统会检查当前工作目录,即执行 Getcwd 或 GetCurrentDirectory 函数得到的路径。
6. 环境变量 PATH 中指定的目录:最后,系统会在环境变量 PATH 中列出的所有目录中搜索 DLL。
如果在上述搜索过程中找到了多个同名的 DLL,系统会根据特定的规则选择一个版本来加载。例如,如果启用了“安全的 DLL 搜索模式”(safe DLL search mode),系统会优先选择在应用程序目录或系统目录中的 DLL,而不是在当前目录或 PATH 环境变量中的 DLL。

此外,开发者可以通过一些特殊的方法来改变这个默认的搜索顺序,例如使用 LoadLibraryEx 函数并指定 LOAD_WITH_ALTERED_SEARCH_PATH 标志,或者调用 SetDllDirectory 函数来添加一个额外的搜索路径到列表的开始位置。

需要注意的是,上述信息是基于 Windows 操作系统的一般行为,具体的搜索顺序可能会因操作系统的不同版本或特定的系统配置而有所变化。在处理 DLL 相关的操作时,了解这些搜索规则对于确保应用程序能够正确加载所需的库是非常重要的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值