一个关于组件跟自定义页面的控制问题

优质
小牛编辑
176浏览
2023-12-01
现有一安装文件,要做到如下几点:

主选项 (必选) (这部分没有问题)

另外 还有两个选项

A,B, 以及一个自定义页面PageC

1,如果A,B都不选,那么就跳过自定义页面PageC; 否则, 将对应的目录选择框设置为 可用/不可用。

2,分别选取A,B安装的路径 (不同于主选项的安装路径),并要分别判断A,B路径是否合法,以及路径下是否存在某个特定文件。

引用test2.nsi:

Name                "test2"
OutFile              "test2.exe"
SetCompressor        /FINAL /SOLID lzma

!include            MUI.nsh
!define              LOGICLIB_SECTIONCMP
!include            LogicLib.nsh

!insertmacro MUI_PAGE_COMPONENTS
Page custom SetCustom LeaveCustom
!insertmacro MUI_PAGE_INSTFILES

!insertmacro MUI_LANGUAGE SimpChinese

Section A SEC_A
SectionEnd

Section B SEC_B
SectionEnd

Function SetCustom
    ${Unless} ${SectionIsSelected} ${SEC_A}
    ${AndUnless} ${SectionIsSelected} ${SEC_B}
        Abort
    ${EndUnless}
    InstallOptions::initDialog /NOUNLOAD "$PLUGINSDIR\io.ini"
    InstallOptions::show
FunctionEnd

Function LeaveCustom
    ReadINIStr $0 "$PLUGINSDIR\io.ini" "Field 2" State
    ${Unless} ${FileExists} "$0\*"
        MessageBox MB_OK|MB_ICONSTOP "error"
        Abort
    ${EndUnless}
    ReadINIStr $0 "$PLUGINSDIR\io.ini" "Field 4" State
    ${Unless} ${FileExists} "$0\*"
        MessageBox MB_OK|MB_ICONSTOP "error"
        Abort
    ${EndUnless}
    ${Unless} ${FileExists} "$WINDIR\explorer.exe"
        MessageBox MB_OK|MB_ICONSTOP "error"
        Abort
    ${EndUnless}
FunctionEnd

ReserveFile test2.ini

Function .onInit
    InitPluginsDir
    File /oname=$PLUGINSDIR\io.ini test2.ini
FunctionEnd

引用test2.ini:

; Ini file generated by the HM NIS Edit IO designer.
[Settings]
NumFields=4

[Field 1]
Type=Label
Text=A Path:
Left=25
Right=73
Top=20
Bottom=28

[Field 2]
Type=DirRequest
State=DirRequest
Left=26
Right=286
Top=40
Bottom=53

[Field 3]
Type=Label
Text=B Path:
Left=25
Right=72
Top=81
Bottom=88

[Field 4]
Type=DirRequest
State=DirRequest
Left=26
Right=286
Top=96
Bottom=108