Installation 使用NSIS完成主要安装部件后显示另一个许可证页面

Installation 使用NSIS完成主要安装部件后显示另一个许可证页面,installation,nsis,Installation,Nsis,这是我当前的安装程序页面结构: !insertmacro MUI_PAGE_WELCOME page custom CheckHWSpecs !insertmacro MUI_PAGE_LICENSE "${SOURCEFOLDER}\CDA_update061702.txt" !define MUI_DIRECTORYPAGE_VERIFYONLEAVE !insertmacro MUI_PAGE_DIRECTORY !insertmacro MUI_PAGE_STARTMENU Applic

这是我当前的安装程序页面结构:

!insertmacro MUI_PAGE_WELCOME
page custom CheckHWSpecs
!insertmacro MUI_PAGE_LICENSE "${SOURCEFOLDER}\CDA_update061702.txt"
!define MUI_DIRECTORYPAGE_VERIFYONLEAVE
!insertmacro MUI_PAGE_DIRECTORY
!insertmacro MUI_PAGE_STARTMENU Application $StartMenuGroup
!insertmacro MUI_PAGE_INSTFILES
!insertmacro MUI_PAGE_FINISH
!insertmacro MUI_UNPAGE_CONFIRM
!insertmacro MUI_UNPAGE_INSTFILES
当用户安装完主应用程序后,我需要安装第三方应用程序。在开始安装第三方应用程序之前,我需要显示另一个许可证页面,如果用户同意,它将继续安装该应用程序。但是,如果用户不同意,它将取消第三方应用程序安装,安装过程即告结束

我可以这样做吗

!insertmacro MUI_PAGE_WELCOME
page custom CheckHWSpecs
!insertmacro MUI_PAGE_LICENSE "${SOURCEFOLDER}\CDA_update061702.txt"
!define MUI_DIRECTORYPAGE_VERIFYONLEAVE
!insertmacro MUI_PAGE_DIRECTORY
!insertmacro MUI_PAGE_STARTMENU Application $StartMenuGroup
!insertmacro MUI_PAGE_INSTFILES
!insertmacro MUI_PAGE_LICENSE "${SOURCEFOLDER}\license2.txt"
!insertmacro MUI_PAGE_INSTFILES
!insertmacro MUI_PAGE_FINISH
!insertmacro MUI_UNPAGE_CONFIRM
!insertmacro MUI_UNPAGE_INSTFILES
但是如果有两个
!insertmacro MUI_页面安装文件
,如何确保第三方安装程序将在第二个MUI_页面安装文件中运行?

  • 我会将第三方应用程序配置为另一个部分(如果文本为空,或者使用代码
    SectionSetText${SectionID}“
    ,则可以隐藏该部分)
  • 在第一个许可证页面之后,使用自定义页面显示第二个许可证,并带有接受该许可证的复选框(IIRC您只能使用一个
    MUI\u页面\u许可证
  • 根据自定义页面的结果(使用自定义页面离开回调来测试是否接受),用
    检查隐藏部分!insertmacro SelectSection${SectionID}
  • 然后在执行
    MUI_PAGE_INSTFILES
    的过程中,您的第三方应用程序将像主应用程序一样安装(或不安装)

如果用户没有安装额外的应用程序,那么您将无法进入“完成”页面,取消按钮将重命名为“完成”.

你只能有一个
MUI_页面\u INSTFILES
@Seki你有什么想法吗?我刚刚在回复中发布了一个建议,你可以有多个MUI_页面*每种类型…我希望第二个许可页面在主应用程序安装过程完成后显示。在用户同意第二个许可证后,我将开始安装我的第三方应用程序。有可能这样做吗?恐怕您不能在一个安装程序中完成。将您的第二个应用程序包装到另一个设置中,然后从
MUI_page_INSTFILES
之后的自定义页面启动该设置。如何指定将在第一个MUI_page_INSTFILES中安装哪个部分,以及在第二个页面中安装哪个部分?@currapickt:您是否尝试过该示例?Section/o使该节处于未选中状态,然后在主节的末尾,它们都被切换……是的,我已经尝试过这个示例。但是,就像你们之前提到的,若用户并没有安装额外的应用程序,那个么它永远不会进入完成页面。即使没有安装第三方,我也可以继续显示完成页面吗?我在中写下我问题的详细信息,您可以在那里查看我的问题吗?
!include Sections.nsh
!include WinMessages.nsh
ShowInstDetails show
!include MUI2.nsh
!insertmacro MUI_PAGE_WELCOME
!insertmacro MUI_PAGE_LICENSE "${NSISDIR}\Examples\example1.nsi"
!insertmacro MUI_PAGE_INSTFILES
!define MUI_LICENSEPAGE_CHECKBOX
!define MUI_LICENSEPAGE_CHECKBOX_TEXT "Blah blah blah app and agree..."
!define MUI_PAGE_CUSTOMFUNCTION_SHOW Lic2Show
!insertmacro MUI_PAGE_LICENSE "${NSISDIR}\Examples\example2.nsi"
!insertmacro MUI_PAGE_INSTFILES
!insertmacro MUI_PAGE_FINISH
!insertmacro MUI_LANGUAGE English

Section /o "Bonus app" SID_BONUS
DetailPrint "Installing bonus app..."
Sleep 2222
SectionEnd

Section "Main app" SID_MAIN
DetailPrint "Installing main app..."
Sleep 2222

!insertmacro SelectSection ${SID_BONUS}
!insertmacro UnselectSection ${SID_MAIN}
SectionEnd

Function Lic2Show
GetDlgItem $0 $hwndparent 2
SendMessage $0 ${WM_SETTEXT} 0 "STR:$(MUI_BUTTONTEXT_FINISH)"
FunctionEnd