NSIS教程:如何仅当DLL文件版本符合要求时安装应用?
NSIS安装程序:仅当指定DLL版本匹配时执行安装
以下是实现该需求的完整NSIS脚本,包含版本获取、对比逻辑及异常处理:
; 定义预先指定的目标DLL版本,格式为 主版本.次版本.构建号.修订号 !define TARGET_DLL_VERSION "1.2.3.4" Section "MainSection" SEC01 ; 检查指定路径下的MyDLL.dll是否存在 IfFileExists "$INSTDIR\MyDLL.dll" +2 DLLNotFound ; 获取DLL版本信息,$R0存储主版本和次版本,$R1存储构建号和修订号 GetDllVersion "$INSTDIR\MyDLL.dll" $R0 $R1 ; 拆分版本号各部分: IntOp $R2 $R0 / 0x00010000 ; 提取主版本号 IntOp $R3 $R0 & 0x0000FFFF ; 提取次版本号 IntOp $R4 $R1 / 0x00010000 ; 提取构建号 IntOp $R5 $R1 & 0x0000FFFF ; 提取修订号 ; 拼接成标准版本字符串(如1.2.3.4) StrCpy $0 "$R2.$R3.$R4.$R5" ; 对比当前DLL版本与目标版本 StrCmp $0 "${TARGET_DLL_VERSION}" VersionMatch VersionMismatch VersionMatch: ; 版本匹配,执行后续安装操作 MessageBox MB_OK "DLL版本匹配,开始安装..." ; 这里添加你的安装逻辑(如复制文件、创建快捷方式等) Goto EndCheck VersionMismatch: MessageBox MB_OK|MB_ICONERROR "DLL版本不匹配!当前版本:$0,要求版本:${TARGET_DLL_VERSION}" Abort ; 终止安装 DLLNotFound: MessageBox MB_OK|MB_ICONERROR "未找到指定路径下的MyDLL.dll文件!" Abort ; 终止安装 EndCheck: SectionEnd
关键部分说明:
- 版本定义:通过
!define指令预先设定需要匹配的DLL版本,修改为你的目标版本即可。 - DLL存在性检查:先用
IfFileExists确认文件存在,避免后续获取版本时出错。 - 版本拆分逻辑:
GetDllVersion返回的$R0和$R1是32位整数,通过位运算拆分出主版本、次版本、构建号、修订号,再拼接为易读的版本字符串。 - 版本对比:使用
StrCmp指令直接对比版本字符串,匹配则执行安装,不匹配或文件不存在时终止安装并给出提示。
内容的提问来源于stack exchange,提问作者Boramae
相关产品推荐
相关产品推荐

