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

基于单选按钮选择跳过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

关键部分解释

  1. 变量定义:Var ActionType用来存储用户的选择结果,0代表UPDATE,1代表INSTALLATION。
  2. 自定义页面:用nsDialogs创建单选按钮,通过点击事件函数更新ActionType的值。
  3. 目录页回调:DirectoryPage_Pre是目录页显示前触发的函数,当ActionType为1时,执行Abort即可跳过当前页面,直接进入下一个页面(即你的下载环节)。
  4. 页面序列:把自定义页面放在最前面,目录页绑定预回调函数,确保每次进入目录页前都会判断是否需要跳过。

注意事项

  • 必须包含nsDialogs.nsh头文件,否则无法使用nsDialogs相关控件。
  • 如果你的下载环节是自定义页面,只需要把Page InstFiles替换成对应的自定义页面即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 00:40:03