我有一个有效的NSIS Modern UI 2脚本,它有五个组件。其中一个是主要应用程序,有四个帮助应用程序。由于应用程序的性质,它们都不需要另一个运行;因此,它们都是可选安装。这包括主要应用程序。
在完成页面,我可以选择使用
启动主应用程序!define MUI_FINISHPAGE_RUN "$INSTDIR\MyProgram.exe"
!define MUI_FINISHPAGE_RUN_TEXT "Start the main program"
只要在
之前!insertmacro MUI_PAGE_FINISH
命令。但是,如果用户没有安装主应用程序,我不希望该复选框可见(或至少启用)。
我已尝试将前两行放在Section MainSection
中,但它没有显示该框,因为到那时,UI已经创建。
我不希望总是启用它并指向一个在安装后运行的函数,否则显示MessageBox
。
有办法做到这一点吗?
答案 0 :(得分:6)
那些MUI定义在编译时使用,你需要在运行时修改复选框:
!include LogicLib.nsh
!include MUI2.nsh
!insertmacro MUI_PAGE_COMPONENTS
!insertmacro MUI_PAGE_INSTFILES
!define MUI_FINISHPAGE_RUN "$instdir\Maybe.exe"
!define MUI_PAGE_CUSTOMFUNCTION_SHOW ModifyRunCheckbox
!insertmacro MUI_PAGE_FINISH
!insertmacro MUI_LANGUAGE English
Section "Maybe" SID_MAYBE
; File "Maybe.exe"
SectionEnd
Function ModifyRunCheckbox
${IfNot} ${SectionIsSelected} ${SID_MAYBE} ; You could also check if the file exists...
SendMessage $mui.FinishPage.Run ${BM_SETCHECK} ${BST_UNCHECKED} 0
EnableWindow $mui.FinishPage.Run 0 ; Or ShowWindow $mui.FinishPage.Run 0
${EndIf}
FunctionEnd