一个关于组件跟自定义页面的控制问题
优质
小牛编辑
205浏览
2023-12-01
现有一安装文件,要做到如下几点:
主选项 (必选) (这部分没有问题)
另外 还有两个选项
A,B, 以及一个自定义页面PageC
1,如果A,B都不选,那么就跳过自定义页面PageC; 否则, 将对应的目录选择框设置为 可用/不可用。
2,分别选取A,B安装的路径 (不同于主选项的安装路径),并要分别判断A,B路径是否合法,以及路径下是否存在某个特定文件。
引用test2.nsi:
主选项 (必选) (这部分没有问题)
另外 还有两个选项
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