System32 中的 dll 与系统路径

System32 中的 dll 与系统路径

在 Windows 中,Windows 如何通过这些文件夹查找 .dll?例如,如果我有同一个 dll 的两个版本,一个在 System 32 文件夹中,一个在系统路径中,Windows 会首先查找哪里?

答案1

Windows 首先搜索“已知 DLL”,例如 Kernel32.dll 和 User32.dll。

然后,Windows 按以下顺序搜索 DLL:

Windows 系统目录。GetSystemDirectory 函数检索此目录的路径。

Windows 目录。GetWindowsDirectory 函数检索此目录的路径。

当前进程的可执行模块所在的目录。

当前目录。

PATH 环境变量中列出的目录。

请注意,在 64 位 Windows 下,32 位进程使用 32 位 system32 目录,而不是 64 位目录。

它与 2k3 或 XP 的 sp1 之前版本略有不同。

答案2

取决于您的PATH环境变量,但通常%windir%\System32在之前添加%windir%

戴上我的开发人员的帽子:只要有可能,我就会避免在这两个文件夹中安装任何东西,特别是对于并行汇编支持的较新的操作系统版本(例如 XP/Vista/2008)。

如果您安装的应用程序在两个地方都放置了 .DLL,那么我会联系开发人员来修复它。

答案3

对此大加赞赏:

http://msdn.microsoft.com/en-us/library/7d83bc18(VS.80).aspx

请注意引用此页面的“顺序已更改!”注释:

http://msdn.microsoft.com/en-us/library/ms972822.aspx

答案4

DLL 加载由 Windows API LoadLibrary 函数处理,其搜索顺序在文档中描述如下:http://msdn.microsoft.com/en-us/library/ms684175(VS.85).aspx

相关内容