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

NSIS卸载时如何在点击卸载前添加收集DB信息的自定义页面

NSIS 卸载流程自定义页面前置配置方案

核心结论

完全可以将自定义收集页面调整到卸载确认按钮之前展示,你当前遇到的页面后置、下一步按钮禁用的问题,本质是**UninstPage的声明顺序错误**导致的:
NSIS 的页面展示顺序完全和声明顺序一致,你之前应该是将自定义页面声明放在了UninstPage InstFiles(卸载进度执行页)之后,该阶段属于卸载流程收尾阶段,系统默认禁用下一步按钮,因此无法触发后续逻辑。


正确配置步骤

1. 调整页面声明顺序

将自定义收集页面放在卸载确认页、卸载执行页之前声明即可:

; 卸载页面声明顺序从上到下对应展示顺序
UninstPage Custom un.dbPageEnter un.dbPageLeave ; 第一步:你的数据库信息收集自定义页
UninstPage Confirm ; 第二步:系统自带卸载确认页(用户点击「卸载」按钮的页面)
UninstPage InstFiles ; 第三步:卸载进度执行页

如果不需要默认的卸载欢迎页,可以直接删除UninstPage Welcome的声明,让自定义页作为卸载程序打开后的第一个页面。


2. 自定义页面Enter回调补充按钮启用逻辑

即便调整了页面顺序,也建议在页面初始化时主动启用下一步按钮,避免控件创建逻辑意外导致按钮被禁用:

Function un.dbPageEnter
  ; 初始化nsDialogs创建页面
  nsDialogs::Create 1018
  Pop $hWnd_DbPage
  
  ; ---------- 这里添加你的控件创建逻辑 ----------
  ; 示例:创建用户名输入框
  ${NSD_CreateLabel} 0 0 100% 12u "数据库用户名:"
  Pop $hWnd_Label_Username
  ${NSD_CreateText} 0 13u 100% 12u ""
  Pop $hWnd_Input_Username
  
  ; 密码、实例名等其他控件创建逻辑以此类推
  ; ---------------------------------------------
  
  ; 主动启用下一步按钮(固定写法,ID为1对应下一步按钮)
  GetDlgItem $hWnd_NextBtn $HWNDPARENT 1
  EnableWindow $hWnd_NextBtn 1
  
  nsDialogs::Show
FunctionEnd

3. Leave回调收集信息并校验

在页面离开回调中读取用户输入的信息存储到全局变量,可加非空等校验逻辑,校验不通过时用Abort停留在当前页:

Function un.dbPageLeave
  ; 读取用户输入存入全局变量,后续卸载执行阶段可直接调用
  ${NSD_GetText} $hWnd_Input_Username $R0 ; $R0存数据库用户名
  ${NSD_GetText} $hWnd_Input_Password $R1 ; $R1存数据库密码
  ${NSD_GetText} $hWnd_Input_Instance $R2 ; $R2存数据库实例名
  
  ; 非空校验示例
  ${If} $R0 == ""
    MessageBox MB_OK "请输入数据库用户名"
    Abort
  ${EndIf}
  ${If} $R2 == ""
    MessageBox MB_OK "请输入数据库实例名"
    Abort
  ${EndIf}
FunctionEnd

后续你需要执行的数据库查询操作,直接在卸载执行的Section中调用$R0、$R1、$R2这几个变量即可。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 10:15:02