Barra laterale

programmazione:nsis:creare_installer_per_win32

Creare un semplice installer per sistemi win32 con NSIS

Autore: Fabio Di Matteo
Ultima revisione: 22/11/2022 - 11:41

IN questo articolo andremo a creare un semplice installer per sistemi win32 che ci permetta di installare la nostra applicazione con tanto di entry nello start menu e di rimuoverla .
Di default andremo ad installare la nostra applicazione in c:\programmi\<nome applicazione>, ma durante l'installazione verra chiesto se vogliamo cambiare il percorso. Ecco cosa conterra la cartella del nostr programma una volta installata:

Nel nostro esempio la nostra applicazione si chiama logout-fml

-logout-fml
   |_ bin
   |    |_logout-fml.exe
   |
   |_share
        |_logout
               |_logout.png
               |_logout-it_IT.qm

Script NSIS

Di seguito lo script NSIS (interfaccia base) abbondantemente commentato:

; Il nome dell'installatore
Name "Logout-FML"
 
;Icona del file dell'installatore
Icon "power.ico"
 
; Il nome del file dell'installatore
OutFile "logout-fml-installer.exe"
 
; La directory di installazione predefinita
InstallDir $PROGRAMFILES\logout-fml
 
; Del testo da mostrare al momento della scelta della directory
DirText "This will install Logout-fml on your computer. Choose a directory"
 
;--------------------------------
 
; La sezione dedicata all'installazione
Section "" 
 
	; Setto la directory dove mettere i file da questo momento in poi
	; (se la directory non esiste, la creera') e copio i file.
	SetOutPath $INSTDIR\bin
	File bin\logout-fml.exe
 
	;Cambio directory e copio altri file 
	SetOutPath $INSTDIR\share\logout
	File share\logout\logout.png
	File share\logout\logout-it_IT.qm
 
	;Menu start
	CreateDirectory "$SMPROGRAMS\Logout-fml"
	CreateShortCut "$SMPROGRAMS\Logout-fml\logout-fml.lnk" "$INSTDIR\bin\logout-fml.exe"
	CreateShortCut "$SMPROGRAMS\Logout-fml\uninstall.lnk" "$INSTDIR\Uninstall.exe"
 
 
 
 
 
	; Informiamo il compilatore che sara' presente una sezione per il disinstallatore  
	WriteUninstaller $INSTDIR\Uninstall.exe
 
SectionEnd 
 
 
 
; La sezione dedicata alla disinstallazione
Section "Uninstall"
 
	;Rimuoviamo i file del programma
	Delete $INSTDIR\Uninstall.exe
	Delete $INSTDIR\bin\logout-fml.exe
	Delete $INSTDIR\share\logout\logout.png
	Delete $INSTDIR\share\logout\logout-it_IT.qm
	RMDir /r $INSTDIR
 
	; Rimuoviamo tutti i link dallo start menu
	Delete "$SMPROGRAMS\Logout-fml\logout-fml.lnk" 
	Delete "$SMPROGRAMS\Logout-fml\uninstall.lnk" 
	RMDIR  "$SMPROGRAMS\Logout-fml"
 
SectionEnd

Dopodicche basta compilare lo script con NSIS.

Versione dello script con interfaccia Modern UI2

!include "MUI.nsh"
 
;Richiedo i permessi di Amministratore
RequestExecutionLevel admin
 
; Il nome dell'installatore
Name "Logout-FML"
 
;Icona del file dell'installatore
!define MUI_ICON power.ico
 
 
;Banner laterale
!define MUI_WELCOMEFINISHPAGE_BITMAP "banner.bmp" ;immagine per la pagina di benvenuto
!define MUI_HEADERIMAGE							  ;Usa immagine d'intestazione
!define MUI_HEADERIMAGE_BITMAP "logout.bmp"		  ;immagine d'intestazione per le varie schermate	
 
; Il nome del file dell'installatore
OutFile "logout-fml-installer.exe"
 
;Le varie "pagine" da visualizzare (Benvenuto, licenza, scelta cartella,conclusione etc...)
!insertmacro MUI_PAGE_WELCOME
!insertmacro MUI_PAGE_LICENSE "license.rtf"
!insertmacro MUI_PAGE_DIRECTORY
;!insertmacro MUI_PAGE_COMPONENTS
!insertmacro MUI_PAGE_INSTFILES
!insertmacro MUI_PAGE_FINISH
 
;Lingue nelle quali deve essere disponibile l'installer
!insertmacro MUI_LANGUAGE "English"
!insertmacro MUI_LANGUAGE "German"
!insertmacro MUI_LANGUAGE "French"
!insertmacro MUI_LANGUAGE "Italian"
 
 
 
; La directory di installazione predefinita
InstallDir $PROGRAMFILES\logout-fml
 
; Del testo da mostrare al momento della scelta della directory
;DirText "This will install Logout-fml on your computer. Choose a directory"
 
;--------------------------------
 
; La sezione dedicata all'installazione
Section "Install" 
 
	; Setto la directory dove mettere i file da questo momento in poi
	; (se la directory non esiste, la creera') e copio i file.
	SetOutPath $INSTDIR\bin
	File bin\logout-fml.exe
 
	;Cambio directory e copio altri file 
	SetOutPath $INSTDIR\share\logout
	File share\logout\logout.png
	File share\logout\logout-it_IT.qm
 
	;Menu start
	CreateDirectory "$SMPROGRAMS\Logout-fml"
	CreateShortCut "$SMPROGRAMS\Logout-fml\logout-fml.lnk" "$INSTDIR\bin\logout-fml.exe"
	CreateShortCut "$SMPROGRAMS\Logout-fml\uninstall.lnk" "$INSTDIR\Uninstall.exe"
 
 
 
 
 
	; Informiamo il compilatore che sara' presente una sezione per il disinstallatore  
	WriteUninstaller $INSTDIR\Uninstall.exe
 
SectionEnd 
 
 
 
; La sezione dedicata alla disinstallazione
Section "un.Uninstall"
 
	;Rimuoviamo i file del programma
	Delete $INSTDIR\Uninstall.exe
	Delete $INSTDIR\bin\logout-fml.exe
	Delete $INSTDIR\share\logout\logout.png
	Delete $INSTDIR\share\logout\logout-it_IT.qm
	RMDir /r $INSTDIR
 
	; Rimuoviamo tutti i link dallo start menu
	Delete "$SMPROGRAMS\Logout-fml\logout-fml.lnk" 
	Delete "$SMPROGRAMS\Logout-fml\uninstall.lnk" 
	RMDIR  "$SMPROGRAMS\Logout-fml"
 
SectionEnd

Se si usa Gimp per creare le bitmap da usare nelle varie schermate, specificare al momento del salvataggio Opzioni di compatibilita' → non scrivere le informazioni sullo spazio colore. Inoltre assicurarsi di flaggare “24 bits” next to “R8 G8 B8”

Un esempio completo con tanto di info per Add/Remove Program

!include "MUI.nsh"
 
;Richiedo i permessi di Amministratore
RequestExecutionLevel admin
 
; Il nome dell'installatore
Name "Pobtube"
 
;Icona del file dell'installatore
!define MUI_ICON ../icons/play.ico
 
 
;Banner laterale
;!define MUI_WELCOMEFINISHPAGE_BITMAP "banner.bmp" ;immagine per la pagina di benvenuto
;!define MUI_HEADERIMAGE							  ;Usa immagine d'intestazione
;!define MUI_HEADERIMAGE_BITMAP "../icons/play.png"		  ;immagine d'intestazione per le varie schermate	
 
; Il nome del file dell'installatore
OutFile "Pobtube-installer.exe"
 
;Le varie "pagine" da visualizzare (Benvenuto, licenza, scelta cartella,conclusione etc...)
!insertmacro MUI_PAGE_WELCOME
!insertmacro MUI_PAGE_LICENSE "gpl-3.0.txt"
!insertmacro MUI_PAGE_DIRECTORY
;!insertmacro MUI_PAGE_COMPONENTS
!insertmacro MUI_PAGE_INSTFILES
!insertmacro MUI_PAGE_FINISH
 
;Lingue nelle quali deve essere disponibile l'installer
!insertmacro MUI_LANGUAGE "English"
!insertmacro MUI_LANGUAGE "German"
!insertmacro MUI_LANGUAGE "French"
!insertmacro MUI_LANGUAGE "Italian"
 
 
 
; La directory di installazione predefinita
InstallDir $PROGRAMFILES\Pobtube
 
; Del testo da mostrare al momento della scelta della directory
;DirText "This will install Logout-fml on your computer. Choose a directory"
 
;--------------------------------
 
; La sezione dedicata all'installazione
Section "Install" 
 
	; Setto la directory dove mettere i file da questo momento in poi
	; (se la directory non esiste, la creera') e copio i file.
	SetOutPath $INSTDIR
	File /r ..\build\exe.mingw-3.7\*
 
 
	;Menu start
	CreateDirectory "$SMPROGRAMS\Pobtube"
	CreateShortCut "$SMPROGRAMS\Pobtube\Pobtube.lnk" "$INSTDIR\vd.exe"
	CreateShortCut "$SMPROGRAMS\Pobtube\uninstall.lnk" "$INSTDIR\Uninstall.exe"
 
	; Informiamo il compilatore che sara' presente una sezione per il disinstallatore  
	WriteUninstaller $INSTDIR\Uninstall.exe
 
 
 
SectionEnd 
 
 
 
;Entry per Add/Remove
!define REGUNINSTKEY "Pobtube" ;Using a GUID here is not a bad idea
!define REGHKEY HKLM ;Assuming RequestExecutionLevel admin AKA all user/machine install
!define REGPATH_WINUNINST "Software\Microsoft\Windows\CurrentVersion\Uninstall"
 
Section
	WriteRegStr ${REGHKEY} "${REGPATH_WINUNINST}\${REGUNINSTKEY}" "DisplayName" "Pobtube"
	WriteRegStr ${REGHKEY} "${REGPATH_WINUNINST}\${REGUNINSTKEY}" "UninstallString" '"$INSTDIR\Uninstall.exe"'
 
	WriteRegStr ${REGHKEY} "${REGPATH_WINUNINST}\${REGUNINSTKEY}" "DisplayIcon" '"$INSTDIR\icons\play.ico"'
	WriteRegStr ${REGHKEY} "${REGPATH_WINUNINST}\${REGUNINSTKEY}" "Publisher" "Fabio Di Matteo"
SectionEnd 
 
 
; La sezione dedicata alla disinstallazione
Section "un.Uninstall"
 
	;Rimuoviamo i file del programma
	Delete $INSTDIR\*.*
	RMDir /r $INSTDIR
 
	; Rimuoviamo tutti i link dallo start menu
	Delete "$SMPROGRAMS\Pobtube\Pobtube.lnk" 
	Delete "$SMPROGRAMS\Pobtube\uninstall.lnk" 
	RMDIR  "$SMPROGRAMS\Pobtube"
        DeleteRegKey HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Pobtube"
 
SectionEnd

Alcune variabili da poter inserire nella sezione Add/Remove:

    InstallLocation (string) - Installation directory ($INSTDIR)
    InstallDate (string) - Install date in yyyyMMdd format. Windows uses the keys modified date if not present.
    DisplayIcon (string) - Path, filename and index of of the icon that will be displayed next to your application name

    Publisher (string) - (Company) name of the publisher

    ModifyPath (string) - Path and filename of the application modify program
    InstallSource (string) - Location where the application was installed from

    ProductID (string) - Product ID of the application
    Readme (string) - Path (File or URL) to readme information
    RegOwner (string) - Registered owner of the application
    RegCompany (string) - Registered company of the application

    HelpLink (string) - Link to the support website
    HelpTelephone (string) - Telephone number for support

    URLUpdateInfo (string) - Link to the website for application updates
    URLInfoAbout (string) - Link to the application home page

    DisplayVersion (string) - Displayed version of the application
    VersionMajor (DWORD) - Major version number of the application
    VersionMinor (DWORD) - Minor version number of the application

    NoModify (DWORD) - 1 if uninstaller has no option to modify the installed application
    NoRepair (DWORD) - 1 if the uninstaller has no option to repair the installation

    SystemComponent (DWORD) - Set 1 to prevents display of the application in the Programs List of the Add/Remove Programs in the Control Panel.

    EstimatedSize (DWORD) - The size of the installed files (in KB)

    Comments (string) - A comment describing the installer package

If both NoModify and NoRepair are set to 1, the button displays "Remove" instead of "Modify/Remove".


Supported on: Windows XP Service Pack 2.

    ParentKeyName (string) - If the program is an update of a parent program, specify the parent program subkey name. If "OperatingSystem", it's an update for Windows.
    ParentDisplayName (string) - If the program is an update of a parent program, specify the parent program name (as specified on the parent's "DisplayName").

programmazione/nsis/creare_installer_per_win32.txt · Ultima modifica: 22/11/2022 - 11:43 da Fabio Di Matteo