如果在 DefaultDllImportSearchPaths 属性上设置 SafeDirectories 标志,会包含哪些目录?

问题描述 投票:0回答:1

DllImportSearchPath
枚举的文档说明如下:

安全目录 4096 在 DLL 搜索路径中包含应用程序目录、%WinDir%\System32 目录和用户目录。

我不清楚“DLL 搜索路径中的用户目录”在这里意味着什么。具体来说,Windows 上的标准 DLL 搜索顺序始终包括“PATH 环境变量下列出的目录。”,但实际上,只有直接将 DLL 放在应用程序可执行文件旁边时,DLL 才会被加载。

我已经进行了很多搜索和实验,但我找不到任何明确的结论。有什么提示吗?

c# .net windows dllimport .net-4.8
1个回答
0
投票

从 Windows 8 和 Windows 7 SP1 KB2533623 开始,Microsoft 引入了新的 API 增强功能,用于安全加载外部本机库

这些 API 调用定义了一个进程范围的 DLL 搜索路径,只能通过直接调用这些特定于操作系统的函数来修改。一些现代库将

DefaultDllImportSearchPath
属性指定为
DllImportSearchPath.SafeDirectories
,这意味着 仅此进程范围的 DLL 搜索路径用于使用
DllImport
加载本机库。发生这种情况时,默认
PATH
环境变量下的目录将被有效忽略。

要解决此问题,主机应用程序应为引导环境时可能需要的每个本机库文件夹调用

AddDllDirectory
方法。

不幸的是,可能仍然需要将相同的文件夹添加到

PATH
环境变量中,因为某些旧库不使用新的进程范围 DLL 搜索路径。

© www.soinside.com 2019 - 2024. All rights reserved.