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
相关产品推荐
相关产品推荐

