DllImportSearchPath
枚举的文档说明如下:
安全目录 | 4096 | 在 DLL 搜索路径中包含应用程序目录、%WinDir%\System32 目录和用户目录。 |
我不清楚“DLL 搜索路径中的用户目录”在这里意味着什么。具体来说,Windows 上的标准 DLL 搜索顺序始终包括“PATH 环境变量下列出的目录。”,但实际上,只有直接将 DLL 放在应用程序可执行文件旁边时,DLL 才会被加载。
我已经进行了很多搜索和实验,但我找不到任何明确的结论。有什么提示吗?
从 Windows 8 和 Windows 7 SP1 KB2533623 开始,Microsoft 引入了新的 API 增强功能,用于安全加载外部本机库。
这些 API 调用定义了一个进程范围的 DLL 搜索路径,只能通过直接调用这些特定于操作系统的函数来修改。一些现代库将
DefaultDllImportSearchPath
属性指定为 DllImportSearchPath.SafeDirectories
,这意味着 仅此进程范围的 DLL 搜索路径用于使用 DllImport
加载本机库。发生这种情况时,默认 PATH
环境变量下的目录将被有效忽略。
要解决此问题,主机应用程序应为引导环境时可能需要的每个本机库文件夹调用
AddDllDirectory
方法。
不幸的是,可能仍然需要将相同的文件夹添加到
PATH
环境变量中,因为某些旧库不使用新的进程范围 DLL 搜索路径。