Installer for Successional Installations

From NSIS Wiki
Jump to navigationJump to search
Author: Red Wine (talk, contrib)


Description

The following example demonstrates how to create an installer that is able to download and install several programs and is provided as a starting point for the subject at this forum thread.

The Code

Name "My Application"
Caption 'installer caption'
OutFile 'test.exe'
LicenseData '${NSISDIR}\License.txt'
LicenseBkColor 0xFFFFFF
InstallButtonText "Next >"
ShowInstDetails show
XpStyle on
 
Page License
 
PageEx Custom
       Caption ': System Update Summary'
       PageCallbacks CustomCreate
PageExEnd
 
PageEx InstFiles
       Caption ': Mozilla Firefox Installation'
       CompletedText 'Mozilla Firefox Installation Completed'
       PageCallbacks pre1
PageExEnd
 
PageEx InstFiles
       Caption ': Mozilla Thunderbird Installation'
       CompletedText 'Mozilla Thunderbird Installation Completed'
       PageCallbacks pre2
PageExEnd
 
PageEx InstFiles
       Caption ': Prog 3 Installation'
       CompletedText 'Prog 3 Installation Completed'
       PageCallbacks pre3
PageExEnd
 
PageEx InstFiles
       Caption ': Prog 4 Installation'
       CompletedText 'Prog 4 Installation Completed'
       PageCallbacks pre4
PageExEnd
 
Section "Mozilla Firefox Installation" sec1
        # The section executed only when Firefox is not installed.
        # Add the proper code here to download + execute Firefox installer.
 
        DetailPrint "Please relax while downloading and installing Mozilla Firefox"
 
        sleep 6000 ;simulates the real code execution
SectionEnd
 
Section 'Mozilla Thunderbird Installation' sec2
        # The section executed only when Thunderbird is not installed.
        # Add the proper code here to download + execute Thunderbird installer.
 
        DetailPrint "Please relax while downloading and installing Mozilla Thunderbird"
 
        sleep 6000 ;simulates the real code execution
SectionEnd
 
Section 'Prog 3' sec3
        # The section executed only when Prog 3 is not installed.
        # Add the proper code here to download + execute Prog 3 installer.
 
        DetailPrint "Please relax while downloading and installing Prog 3"
 
        sleep 6000 ;simulates the real code execution
SectionEnd
 
Section 'Prog 4' sec4
        # The section executed only when Prog 4 is not installed.
        # Add the proper code here to download + execute Prog 4 installer.
 
        DetailPrint "Please relax while downloading and installing Prog 4"
 
        sleep 6000 ;simulates the real code execution
SectionEnd
 
function pre1
         # discover if Firefox is already installed
         ClearErrors
         readregstr $1 HKLM "SOFTWARE\Mozilla\Mozilla Firefox" "CurrentVersion"
         IfErrors done
         sectionsetflags ${sec1} 0
         SetAutoClose true
         Abort ;skip page
 
    done:
         SetAutoClose false
         sectionsetflags ${sec1} 1
         sectionsetflags ${sec2} 0
         sectionsetflags ${sec3} 0
         sectionsetflags ${sec4} 0
functionend
 
function pre2
         # discover if Thunderbird is already installed
         ClearErrors
         readregstr $1 HKLM "SOFTWARE\Mozilla\Mozilla Thunderbird" "CurrentVersion"
         IfErrors done
         sectionsetflags ${sec2} 0
         SetAutoClose true
         Abort ;skip page
 
    done:
         SetAutoClose false
         sectionsetflags ${sec1} 0
         sectionsetflags ${sec2} 1
         sectionsetflags ${sec3} 0
         sectionsetflags ${sec4} 0
functionend
 
function pre3
         # discover if Prog 3 is already installed
         ClearErrors
         readregstr $1 HKLM "SOFTWARE\Prog 3" "whatever"
         IfErrors done
         sectionsetflags ${sec3} 0
         SetAutoClose true
         Abort ;skip page
 
    done:
         SetAutoClose false
         sectionsetflags ${sec1} 0
         sectionsetflags ${sec2} 0
         sectionsetflags ${sec3} 1
         sectionsetflags ${sec4} 0
functionend
 
function pre4
         # discover if Prog 4 is already installed
         ClearErrors
         readregstr $1 HKLM "SOFTWARE\Prog 3" "whatever"
         IfErrors done
         sectionsetflags ${sec4} 0
         SetAutoClose true
         Abort ;skip page
 
    done:
         SetAutoClose false
         sectionsetflags ${sec1} 0
         sectionsetflags ${sec2} 0
         sectionsetflags ${sec3} 0
         sectionsetflags ${sec4} 1
functionend
 
function CustomCreate
         WriteIniStr '$PLUGINSDIR\custom.ini' 'Settings' 'NumFields' '2'
 
         WriteIniStr '$PLUGINSDIR\custom.ini' 'Field 1' 'Type' 'Label'
         WriteIniStr '$PLUGINSDIR\custom.ini' 'Field 1' 'Left' '5'
         WriteIniStr '$PLUGINSDIR\custom.ini' 'Field 1' 'Top' '5'
         WriteIniStr '$PLUGINSDIR\custom.ini' 'Field 1' 'Right' '-6'
         WriteIniStr '$PLUGINSDIR\custom.ini' 'Field 1' 'Bottom' '17'
         WriteIniStr '$PLUGINSDIR\custom.ini' 'Field 1' 'Text' \
         'Your system needs the following updates:'
 
         StrCpy $R0 ''
         ClearErrors
         readregstr $1 HKLM "SOFTWARE\Mozilla\Mozilla Firefox" "CurrentVersion"
         IfErrors 0 +2
         strcpy $R0 'Mozilla Firefox\r\n'
         ClearErrors
         readregstr $1 HKLM "SOFTWARE\Mozilla\Mozilla Thunderbird" "CurrentVersion"
         IfErrors 0 +2
         strcpy $R0 '$R0Mozilla Thunderbird\r\n'
         ClearErrors
         readregstr $1 HKLM "SOFTWARE\Prog 3" "whatever"
         IfErrors 0 +2
         strcpy $R0 '$R0Prog 3\r\n'
         ClearErrors
         readregstr $1 HKLM "SOFTWARE\Prog 4" "whatever"
         IfErrors 0 +2
         strcpy $R0 '$R0Prog 4\r\n'
 
         WriteIniStr '$PLUGINSDIR\custom.ini' 'Field 2' 'Type' 'Text'
         WriteIniStr '$PLUGINSDIR\custom.ini' 'Field 2' 'Left' '10'
         WriteIniStr '$PLUGINSDIR\custom.ini' 'Field 2' 'Top' '25'
         WriteIniStr '$PLUGINSDIR\custom.ini' 'Field 2' 'Right' '-10'
         WriteIniStr '$PLUGINSDIR\custom.ini' 'Field 2' 'Bottom' '105'
         WriteIniStr '$PLUGINSDIR\custom.ini' 'Field 2' 'State' '$R0'
         WriteIniStr '$PLUGINSDIR\custom.ini' 'Field 2' 'Flags' 'DISABLED|MULTILINE|NOWORDWRAP'
 
    push $0 ;park value to the stack
    InstallOptions::Dialog '$PLUGINSDIR\custom.ini'
    pop $0 ;get button action
    pop $0 ;get back value from stack
functionend
 
function .onInit
         initpluginsdir
         gettempfilename $0
         rename $0 '$PLUGINSDIR\custom.ini'
functionend

License

This application is provided 'as-is', without any express or implied warranty. In no event will the author be held liable for any damages arising from the use of this application.

Permission is granted to anyone to use this application for any purpose, including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions:

  1. The origin of this application must not be misrepresented; you must not claim that you wrote the original code. If you use this application in a product, an acknowledgment in the product documentation would be appreciated but is not required.
  2. Altered versions must be plainly marked as such, and must not be misrepresented as being the original application.
  3. This notice may not be removed or altered from any distribution.