Search code examples
exewaitnsis

How to wait for parent NSIS Installer to be finished, before executing the embedded installer?


I am trying to run an installer inside the Script of another installer. The parent installer needs to be finished to run the embedded installer inside properly.

!include "MUI2.nsh"
Icon "C:\Users\user\Pictures\logo.ico"
!insertmacro MUI_PAGE_DIRECTORY
!insertmacro MUI_PAGE_INSTFILES

!insertmacro MUI_LANGUAGE "English"


Section
ExecWait "$INSTDIR/CM/CMInstaller.exe"
SectionEnd

So how do I wait for the parent installer before executing the CMInstaller.exe?

Thanks for answering!


Solution

  • EDIT: As Anders pointed out, the -POST is not a specific section name, just place this section (containing your child installer) after the main install section, or use .onInstSuccess callback function

    Original answer: In our project, we use -Post section to do some post-installation operations like placing the uninstaller or shortcut on the desktop, which might not be the best practice because there's a -FinishComponents section for the specified situation, check here

    Section -Post
      SetShellVarContext all
      SetOutPath "$INSTDIR"
      WriteUninstaller "$INSTDIR\Uninst.exe"
      CreateShortCut "$SMPROGRAMS\$ICONS_GROUP\Uninstall.lnk" "$INSTDIR\Uninst.exe"   
      ;Write install path registry
      WriteRegStr HKLM "${PRODUCT_INSTALL_DIR_REGKEY}" "${PRODUCT_INSTALL_DIR_SUBKEY}" $INSTDIR
      !insertmacro WriteInstallLog "Install_log.log" "Installation completed"
      ;Execute CMInstaller here
      ExecWait "$INSTDIR/CM/CMInstaller.exe"
    SectionEnd
    

    And according to the NSIS documentation, there's also a callback function .onInstSuccess when the installation is done successfully