2012-12-02 68 views
4

我有一个可用的NSIS现代UI 2脚本,它具有五个组件。其中之一是主要应用程序,并且有四个帮助程序。由于应用程序的性质,它们都不需要另一个运行;因此,它们都是可选安装。这包括主要应用程序。NSIS - 仅在安装完成后才运行程序

在完成页,我可以有一个选项

!insertmacro MUI_PAGE_FINISH 

命令之前

!define MUI_FINISHPAGE_RUN "$INSTDIR\MyProgram.exe" 
!define MUI_FINISHPAGE_RUN_TEXT "Start the main program" 

只要是去启动主应用程序。但是,如果用户不安装主应用程序,我不希望复选框可见(或至少启用)。

我试过把Section MainSection里面的前两行代码放进去,但是它没有显示框,因为到那时UI已经被创建了。

我不想总是启用它,并指向一个在安装时运行的函数,否则显示MessageBox

有没有办法做到这一点?

回答

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

太好了!谢谢你的帮助。 – wchargin

相关问题