
现有一安装文件,要做到如下几点:
主选项 (必选) (这部分没有问题)
另外 还有两个选项
A , B , 以及一个自定义页面PageC
1,如果A,B都不选,那么就跳过自定义页面PageC
否则,
将对应的目录选择框设置为 可用/不可用
2,分别选取A,B安装的路径 (不同于主选项的安装路径),并要分别判断A,B路径是否合法,以及路径下是否存在某个特定文件;
主选项 (必选) (这部分没有问题)
另外 还有两个选项
A , B , 以及一个自定义页面PageC
1,如果A,B都不选,那么就跳过自定义页面PageC
否则,
将对应的目录选择框设置为 可用/不可用
2,分别选取A,B安装的路径 (不同于主选项的安装路径),并要分别判断A,B路径是否合法,以及路径下是否存在某个特定文件;
解决代码:

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
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

; 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
[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