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

CMake技术问询:如何让CPack将所有组件文件放入单个目录?

NSIS安装器将DLL与可执行文件置于同一目录的简洁方案

Windows的DLL搜索优先级中,程序的当前运行目录是靠前的位置,所以只要把DLL和主程序可执行文件安装到同一目录,系统就能自动找到这些DLL,无需额外配置PATH或其他复杂操作。

直接通过NSIS脚本即可实现,核心思路是用SetOutPath指定统一的输出目录,然后将EXE和DLL都复制到该目录下:

; 定义安装目录,可根据需求修改
!define INSTALL_DIR "$PROGRAMFILES\MyApplication"

Section "主程序安装" SEC01
  ; 设置当前输出目录为安装目录
  SetOutPath "${INSTALL_DIR}"
  
  ; 复制主程序EXE到安装目录
  File "path\to\YourApp.exe"
  
  ; 复制所需DLL文件到同一目录,多个DLL可依次添加或批量复制
  File "path\to\YourLib1.dll"
  File "path\to\YourLib2.dll"
  ; 批量复制某文件夹下所有DLL的写法:File "path\to\dlls\*.dll"
  
  ; 可选:创建开始菜单快捷方式(指向安装目录下的EXE)
  CreateDirectory "$SMPROGRAMS\MyApplication"
  CreateShortCut "$SMPROGRAMS\MyApplication\启动.lnk" "${INSTALL_DIR}\YourApp.exe"
SectionEnd

关键说明:

  • SetOutPath是核心命令,它会指定后续File命令的目标路径,确保所有文件都被放到同一个目录下。
  • 如果你的程序是64位版本,只需将$PROGRAMFILES替换为$PROGRAMFILES64即可,逻辑完全一致。
  • 这种方式完全符合Windows的DLL搜索机制,不需要额外修改系统环境变量,简洁且可靠。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 11:20:01