2012-12-02 66 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

相關問題