基于单选按钮选择跳过NSIS安装程序目录页面
NSIS实现根据单选选择跳过目录页的方案
核心思路
通过自定义单选按钮页面记录用户操作选择,再利用目录页的Pre回调函数判断选择结果,决定是否跳过目录页。
完整代码示例
!include nsDialogs.nsh ; 存储用户选择的变量:0=UPDATE,1=INSTALLATION Var ActionType Function .onInit ; 初始化默认选择为UPDATE StrCpy $ActionType 0 FunctionEnd ; 自定义单选选择页面 Function ActionSelectPage nsDialogs::Create 1018 Pop $0 ; 显示提示文本 ${NSD_CreateLabel} 0 10 100% 12u "您想要执行什么操作?" Pop $0 ; 创建UPDATE单选按钮 ${NSD_CreateRadioButton} 10 30 100% 12u "UPDATE - 升级(选择安装目录)" Pop $1 ${NSD_SetState} $1 1 ; 默认选中 ${NSD_OnClick} $1 ActionSelect_SetUpdate ; 创建INSTALLATION单选按钮 ${NSD_CreateRadioButton} 10 50 100% 12u "INSTALLATION - 全新安装(跳过目录选择)" Pop $2 ${NSD_OnClick} $2 ActionSelect_SetInstall nsDialogs::Show FunctionEnd ; 选中UPDATE时设置变量 Function ActionSelect_SetUpdate StrCpy $ActionType 0 FunctionEnd ; 选中INSTALLATION时设置变量 Function ActionSelect_SetInstall StrCpy $ActionType 1 FunctionEnd ; 目录页的预回调函数:判断是否跳过 Function DirectoryPage_Pre ; 如果选择的是INSTALLATION,跳过目录页 ${If} $ActionType == 1 Abort ${EndIf} FunctionEnd ; 页面序列定义 Page Custom ActionSelectPage "选择操作类型" Page Directory "" "" DirectoryPage_Pre ; 绑定预回调函数 Page InstFiles "下载并安装" ; 这里替换为你的下载环节页面 Section ; 这里写你的安装/升级逻辑 SectionEnd
关键部分解释
- 变量定义:
Var ActionType用来存储用户的选择结果,0代表UPDATE,1代表INSTALLATION。 - 自定义页面:用
nsDialogs创建单选按钮,通过点击事件函数更新ActionType的值。 - 目录页回调:
DirectoryPage_Pre是目录页显示前触发的函数,当ActionType为1时,执行Abort即可跳过当前页面,直接进入下一个页面(即你的下载环节)。 - 页面序列:把自定义页面放在最前面,目录页绑定预回调函数,确保每次进入目录页前都会判断是否需要跳过。
注意事项
- 必须包含
nsDialogs.nsh头文件,否则无法使用nsDialogs相关控件。 - 如果你的下载环节是自定义页面,只需要把
Page InstFiles替换成对应的自定义页面即可。
内容的提问来源于stack exchange,提问作者user26378046
相关产品推荐
相关产品推荐

