====== 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\**, 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").