NSIS - 仅在安装时运行程序

时间:2012-12-02 02:06:52

标签: installer nsis

我有一个有效的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

有办法做到这一点吗?

1 个答案:

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