自定义页面结合组件选择安装

优质
小牛编辑
160浏览
2023-12-01
问题:如何控制一个自定义页面的显示与否,例如把一个"数据库操作"做为一个组件选项,而组件选项的下一页(即自定义页面)就是输入数据库连接信息,但是,当用户没有选择"数据库操作"这个组件时,点下一步仍然会出现输入数据库密码页面,怎样做出一个判断:当用户选择"数据库操作"时,下一页为提示输入数据库密码页面,当用户没有选择"数据库操作"时,下一页为安装页面(MUI_PAGE_INSTFILES),即跳过了提示输入数据库密码页面。

以下是一个脚本例子,没有作数据库操作的内容,把问题简单化。

引用 Setup.nsi 的内容:

/*--------------------------------------- 
自定义页面结合组件选择安装测试简单脚本。 
-----------------------------------------*/ 

!include "MUI.nsh" 
!include "Sections.nsh" 

Name "自定义页面结合组件选择测试" 
OutFile "Setup.exe" 

!insertmacro MUI_PAGE_COMPONENTS 
Page custom PageInitFunc PageLeaveFunc ""  # 自定义页面 
!insertmacro MUI_PAGE_INSTFILES 

!insertmacro MUI_LANGUAGE "SimpChinese"  # 设置安装界面语言 

ShowInstDetails show # 显示安装进度信息 

ReserveFile "io.ini" # 预先打包文件,方便安装加速释放 io.ini 
!insertmacro MUI_RESERVEFILE_INSTALLOPTIONS  # 预先打包文件,方便安装加速释放 

Var SHOW_PAGE  # 是否显示自定义页面 

Function .onInit 
  StrCpy $SHOW_PAGE "show" # 初始化设显示自定义页面, 如果你默认不打勾,请用 StrCpy $SHOW_PAGE "" 
  !insertmacro MUI_INSTALLOPTIONS_EXTRACT "io.ini"  # 初始化页面 
FunctionEnd 

Function PageInitFunc 
  StrCmp $SHOW_PAGE "show" 0 +2 # 如果没有设置“show”则跳过下面的页面显示 
  !insertmacro MUI_INSTALLOPTIONS_DISPLAY "io.ini"  # 显示页面 
FunctionEnd 

Function PageLeaveFunc 
  MessageBox MB_OK "自定义页面离开时操作,即点击下一步后触发的事件" 
FunctionEnd 

Section "数据库处理(自定义页面)" SEC1 
  # 所有数据库处理在这里写 
  MessageBox MB_OK "“数据库处理(自定义页面)”操作内容" 
SectionEnd 

Section "其他操作" SEC2 
# 这里填写其他组件的操作 
  MessageBox MB_OK "“其他操作”操作内容" 
SectionEnd 

Function .onSelChange 
  Push $0 
    SectionGetFlags ${SEC1} $0  # 检测 SEC1 的选择状态,1为已勾选该组件 
    IntOp $0 $0 & ${SF_selectED} # 只过滤勾选的状态,Checkbox 的状态可能包含多位 
    ;如果为 1 则设置显示自定义页面 
    IntCmp $0 ${SF_selectED} showpage 
      StrCpy $SHOW_PAGE "" # 设置不显示自定义页面 
      Goto done 
    showpage: 
      StrCpy $SHOW_PAGE "show" # 设置显示自定义页面 
    done: 
  Pop $0 
FunctionEnd

引用 io.ini 的内容:

[Settings] 
NumFields=7 

[Field 1] 
Type=label 
Text=SQLServer 连接 
Left=0 
Right=-1 
Top=0 
Bottom=9 

[Field 2] 
Type=Text 
Left=40 
Right=163 
Top=22 
Bottom=35 

[Field 3] 
Type=Text 
Left=39 
Right=163 
Top=43 
Bottom=54 

[Field 4] 
Type=Password 
Left=39 
Right=163 
Top=62 
Bottom=75 

[Field 5] 
Type=Label 
Text=密码: 
Left=8 
Right=36 
Top=65 
Bottom=75 

[Field 6] 
Type=Label 
Text=账号: 
Left=8 
Right=38 
Top=46 
Bottom=56 

[Field 7] 
Type=Label 
Text=服务器: 
Left=6 
Right=34 
Top=27 
Bottom=36