You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何配置Windows应用仅加载系统DLL 禁止加载exe所在目录DLL

Windows应用仅加载系统DLL的配置方案

Manifest配置方案(推荐,适配Windows 10 1607及以上版本)

这种方式不需要修改业务代码,直接通过嵌入EXE的manifest实现搜索路径限制:

  • 在你的项目中新增XML格式的manifest文件,内容如下,替换其中的应用名称、版本、架构信息为你实际项目的值:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
  <assemblyIdentity 
    type="win32" 
    name="你的应用名称" 
    version="1.0.0.0" 
    processorArchitecture="x86" 
    publicKeyToken=""/>
  <!-- 这里保留你原有manifest里的依赖配置,比如通用控件依赖 -->
  <dependency>
    <dependentAssembly>
      <assemblyIdentity 
        type="win32" 
        name="Microsoft.Windows.Common-Controls" 
        version="6.0.0.0" 
        processorArchitecture="*" 
        publicKeyToken="6595b64144ccf1df" 
        language="*"/>
    </dependentAssembly>
  </dependency>
  <!-- 核心DLL搜索路径限制配置 -->
  <application xmlns="urn:schemas-microsoft-com:asm.v3">
    <windowsSettings>
      <dllSearch xmlns="http://schemas.microsoft.com/SMI/2016/WindowsSettings">system32</dllSearch>
    </windowsSettings>
  </application>
</assembly>
  • 将manifest文件嵌入你的EXE即可:Visual Studio可以直接在项目属性的「清单工具」里指定manifest路径,其他编译环境可以用mt.exe命令行工具嵌入。

代码配置方案(兼容Windows 7及以上版本)

如果需要适配更低版本的Windows系统,可以在程序入口最前端添加路径配置代码,优先级高于默认搜索规则:

  • 在程序所有其他逻辑执行前,调用两个Windows API完成路径限制,代码示例如下:
#include <windows.h>

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) {
    // 移除当前目录的DLL搜索优先级
    SetDllDirectoryW(L"");
    // 强制所有DLL仅从system32目录搜索
    SetDefaultDllDirectories(LOAD_LIBRARY_SEARCH_SYSTEM32);
    
    // 此处放置你原有程序的启动逻辑
    // ...
}
  • 注意:如果你的项目使用了延迟加载的DLL,需要确保上述代码在任何延迟加载DLL被调用前执行,避免提前触发非预期路径的DLL加载。

内容的提问来源于stack exchange,提问作者Igor Bukanov

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.14 22:06:01