Quest Kace propone il suo catalogo software con il quale posso tenere aggiornato il parco macchine aziendale. Talvolta però quel catalogo non basta e le personalizzazioni necessarie scatenano la fantasia suggerendo metodi alternativi per arrivare all’obiettivo prefissato.
Notepad++ è proprio uno di quei software abusati in azienda e necessita di un paio di plugin che buona parte degli utenti sono ormai abituati a utilizzare, plugin che solitamente andrebbero installati e configurati in seguito, cosa che ho potuto evitare agilmente con un tracciato NSIS che ha dato i natali a un installer personalizzato sempre in grado di procurare la versione più aggiornata di Notepad++ (pescata direttamente dal repository GitHub ufficiale) e modificarla a nostro piacimento.
NPP Custom Installer
Ereditando in parte quanto già fatto con SWUpdates, rilevo la versione di Notepad++ più aggiornata, la scarico in locale, la installo chiedendole di:
- inibire la ricerca automatica di nuovi aggiornamenti.
- Forzare il file di lingua in italiano.
- Installare il plugin XMLTools (github.com/morbac/xmltools).
- Installare il plugin Compare (sourceforge.net/projects/npp-compare / github.com/jsleroy/compare-plugin).
Prima di far partire tutto questo carrozzone faccio anche un ulteriore controllo: se il sistema operativo utilizzato gira a 64 bit e Notepad++ è installato in versione 32 bit, allora disinstallo questa versione, scarico e installo la versione a 64 bit. L’operazione è gestita in maniera completamente automatica e trasparente per l’utente, si occuperà l’installer personalizzato di fare i controlli e decidere che strade intraprendere. Puoi eseguire l’installer in versione completamente silente lanciandolo da riga di comando con il parametro /S
.
Il codice dell’installer personalizzato è disponibile pubblicamente su GitHub all’indirizzo github.com/Run-NSIS/NPP-CustomInstaller. Ne riporto qui una versione a oggi (la 1.6 è la prima versione pubblica di questo installer personalizzato), ti prego di fare riferimento all’URL GitHub per visualizzare sempre la versione più aggiornata.
!define PRODUCT_NAME "Notepad++ Custom Installer" !define PRODUCT_VERSION "1.6" !define PRODUCT_VERSION_MINOR "0.0" !define PRODUCT_PUBLISHER "Emmelibri S.r.l." !define PRODUCT_WEB_SITE "https://www.emmelibri.it" !define PRODUCT_BUILD "${PRODUCT_NAME} ${PRODUCT_VERSION}.${PRODUCT_VERSION_MINOR} (build ${MyTIMESTAMP})" !include "MUI.nsh" !include "FileFunc.nsh" !include "x64.nsh" !addplugindir "Plugins" !define MUI_ABORTWARNING !define MUI_COMPONENTSPAGE_NODESC !define MUI_ICON "Include\notepad-plus-plus.ico" !define /date MyTIMESTAMP_Yr "%Y" !insertmacro MUI_PAGE_COMPONENTS !insertmacro MUI_PAGE_INSTFILES !insertmacro MUI_LANGUAGE "Italian" !insertmacro GetParameters !insertmacro GetOptions !insertmacro GetFileVersion VIProductVersion "${PRODUCT_VERSION}.${PRODUCT_VERSION_MINOR}" VIAddVersionKey ProductName "${PRODUCT_NAME}" VIAddVersionKey Comments "${PRODUCT_NAME}" VIAddVersionKey CompanyName "Emmelibri S.r.l." VIAddVersionKey LegalCopyright GSolone VIAddVersionKey FileDescription "Installs Notepad++ x86/x64 with a custom configuration" VIAddVersionKey FileVersion ${PRODUCT_VERSION} VIAddVersionKey ProductVersion ${PRODUCT_VERSION} VIAddVersionKey InternalName "${PRODUCT_VERSION}" VIAddVersionKey LegalTrademarks "GSolone, 2022" VIAddVersionKey OriginalFilename "NPPInstaller-${PRODUCT_VERSION}.exe" Var NPP_VersionFile Var NPP_InstallerVersion Var NPP_vLATEST Name "${PRODUCT_NAME} ${PRODUCT_VERSION}" OutFile "EM_NPPInstaller_${PRODUCT_VERSION}.exe" InstallDir "$TEMP" ShowInstDetails show BrandingText "Emmelibri S.r.l. - GSolone ${MyTIMESTAMP_Yr}" Section "" NPPGETLATEST StrCpy $NPP_VersionFile "https://raw.githubusercontent.com/gioxx/SWUpdates-Alert/main/updates/LATEST_NPP" DetailPrint "Scarico file di versione da $NPP_VersionFile" inetc::get /WEAKSECURITY $NPP_VersionFile "$TEMP\LATEST_NPP" /END Pop $0 StrCmp $0 "OK" versionfile_done DetailPrint "Ho riscontrato problemi nel download del file." DetailPrint "Termino l'installazione, contattare l'HelpDesk di riferimento." goto versionfile_goodbye versionfile_done: FileOpen $4 "$TEMP\LATEST_NPP" r FileRead $4 $NPP_vLATEST FileClose $4 StrCpy $NPP_InstallerVersion $NPP_vLATEST "" 1 DetailPrint "NPPvLATEST $NPP_vLATEST" DetailPrint "Installer version $NPP_InstallerVersion" versionfile_goodbye: SectionEnd Section "Disinstalla Notepad++ x86 precedenti" UNINST_X86 DetailPrint "Eseguo disinstallazione: $PROGRAMFILES\Notepad++\uninstall.exe" nsExec::Exec "$PROGRAMFILES\Notepad++\uninstall.exe /S" RmDir /r "$PROGRAMFILES\Notepad++" SectionEnd Section "Notepad++ x64 Custom Installation" INST_X64 SetOutPath "$TEMP" ;URL di esempio per scaricare NPP: https://github.com/notepad-plus-plus/notepad-plus-plus/releases/download/v7.9.5/npp.7.9.5.Installer.x64.exe IfFileExists "$TEMP\npp.$NPP_InstallerVersion.Installer.x64.exe" download_done DetailPrint "Scarico Notepad++ x64 da https://github.com/notepad-plus-plus/notepad-plus-plus/releases/download/v$NPP_InstallerVersion/npp.$NPP_InstallerVersion.Installer.x64.exe" inetc::get /WEAKSECURITY "https://github.com/notepad-plus-plus/notepad-plus-plus/releases/download/v$NPP_InstallerVersion/npp.$NPP_InstallerVersion.Installer.x64.exe" "$TEMP\npp.$NPP_InstallerVersion.Installer.x64.exe" /END Pop $0 StrCmp $0 "OK" download_done DetailPrint "Ho riscontrato problemi nel download del file." DetailPrint "Termino l'installazione, contattare l'HelpDesk di riferimento." goto npp_goodbye download_done: IfFileExists "$PROGRAMFILES64\Notepad++\uninstall.exe" nppx64_found nppx64_notfound nppx64_found: ${GetFileVersion} "$PROGRAMFILES64\Notepad++\notepad++.exe" $R0 ${If} $R0 == "$NPP_InstallerVersion.0" DetailPrint "Questa versione di Notepad++ x64 è già installata sulla macchina." ${Else} goto nppx64_notfound ${EndIf} goto nppx64_done nppx64_notfound: DetailPrint "Installo Notepad++ x64 $NPP_InstallerVersion, attendi." nsExec::Exec "$TEMP\npp.$NPP_InstallerVersion.Installer.x64.exe /S /noUpdater" Sleep 10000 nppx64_done: SetOutPath "$PROGRAMFILES64\Notepad++\" SetOverwrite ifdiff File "Include\config.model.xml" CopyFiles "$PROGRAMFILES64\Notepad++\localization\italian.xml" "$PROGRAMFILES64\Notepad++\nativeLang.xml" SetOutPath "$PROGRAMFILES64\Notepad++\Plugins\XMLTools" File "Include\XMLTools.dll" SetOutPath "$PROGRAMFILES64\Notepad++\Plugins\ComparePlugin" File "Include\ComparePlugin.dll" SetOutPath "$PROGRAMFILES64\Notepad++\Plugins\ComparePlugin\ComparePlugin" File "Include\ComparePlugin\git2.dll" File "Include\ComparePlugin\sqlite3.dll" npp_goodbye: SectionEnd Section "Notepad++ x86 Custom Installation" INST_X86 SetOutPath "$TEMP" ;URL di esempio per scaricare NPP: https://github.com/notepad-plus-plus/notepad-plus-plus/releases/download/v7.9.5/npp.7.9.5.Installer.exe IfFileExists "$TEMP\npp.$NPP_InstallerVersion.Installer.exe" download_done DetailPrint "Scarico Notepad++ x86 da https://github.com/notepad-plus-plus/notepad-plus-plus/releases/download/v$NPP_InstallerVersion/npp.$NPP_InstallerVersion.Installer.exe" inetc::get /WEAKSECURITY "https://github.com/notepad-plus-plus/notepad-plus-plus/releases/download/v$NPP_InstallerVersion/npp.$NPP_InstallerVersion.Installer.exe" "$TEMP\npp.$NPP_InstallerVersion.Installer.exe" /END Pop $0 StrCmp $0 "OK" download_done DetailPrint "Ho riscontrato problemi nel download del file." DetailPrint "Termino l'installazione, contattare l'HelpDesk di riferimento." goto npp_goodbye download_done: IfFileExists "$PROGRAMFILES\Notepad++\uninstall.exe" nppx86_found nppx86_notfound nppx86_found: ${GetFileVersion} "$PROGRAMFILES\Notepad++\notepad++.exe" $R0 ${If} $R0 == "$NPP_InstallerVersion.0" DetailPrint "Questa versione di Notepad++ x86 è già installata sulla macchina." ${Else} goto nppx86_notfound ${EndIf} goto nppx86_done nppx86_notfound: DetailPrint "Installo Notepad++ x86 $NPP_InstallerVersion, attendi." nsExec::Exec "$TEMP\npp.$NPP_InstallerVersion.Installer.exe /S /noUpdater" Sleep 10000 nppx86_done: SetOutPath "$PROGRAMFILES\Notepad++\" SetOverwrite ifdiff File "Include\config.model.xml" CopyFiles "$PROGRAMFILES\Notepad++\localization\italian.xml" "$PROGRAMFILES\Notepad++\nativeLang.xml" SetOutPath "$PROGRAMFILES\Notepad++\Plugins\XMLTools" File "Include\x86\XMLTools.dll" SetOutPath "$PROGRAMFILES\Notepad++\Plugins\ComparePlugin" File "Include\x86\ComparePlugin.dll" SetOutPath "$PROGRAMFILES\Notepad++\Plugins\ComparePlugin\ComparePlugin" File "Include\x86\ComparePlugin\git2.dll" File "Include\x86\ComparePlugin\sqlite3.dll" npp_goodbye: SectionEnd Section -Post DetailPrint "Pulizia ..." SetOutPath $TEMP IfFileExists "$TEMP\LATEST_NPP" 0 +2 Delete "$TEMP\LATEST_NPP" IfFileExists "$TEMP\npp.$NPP_InstallerVersion.Installer.exe" 0 +2 Delete "$TEMP\npp.$NPP_InstallerVersion.Installer.exe" SectionEnd Function .onInit SetShellVarContext All !insertmacro UnselectSection ${UNINST_X86} !insertmacro UnselectSection ${INST_X64} !insertmacro UnselectSection ${INST_X86} ${If} ${RunningX64} DetailPrint "Windows x64" IfFileExists "$PROGRAMFILES\Notepad++\uninstall.exe" nppx86_found nppx86_notfound nppx86_found: SectionSetFlags ${UNINST_X86} 17 goto nppx86_done nppx86_notfound: SectionSetFlags ${UNINST_X86} ${SF_RO} nppx86_done: SectionSetFlags ${INST_X64} 17 SectionSetFlags ${INST_X86} ${SF_RO} ${Else} DetailPrint "Windows x86, passo a installazione 32 bit" SectionSetFlags ${UNINST_X86} ${SF_RO} SectionSetFlags ${INST_X64} ${SF_RO} SectionSetFlags ${INST_X86} 17 ${EndIf} FunctionEnd
Puoi scaricare la versione più recente dell’installer (l’eseguibile Windows) direttamente da GitHub, punta il browser all’indirizzo github.com/Run-NSIS/NPP-CustomInstaller/releases/latest.
Non dovrebbe esserci bisogno di dirlo ma non mi stanco mai di farlo: ogni mio codice sorgente è certamente migliorabile e pressoché mai privo di imperfezioni. Il bello dell’open source è la collaborazione che può instaurarsi tra persone (sviluppatori professionisti e non), sentiti libero di aprire una Pull Request su GitHub, collabora quando e come vuoi al codice per ottimizzarlo, correggere eventuali sviste, migliorarne il funzionamento base. È pubblico per un buon motivo, ne possiamo guadagnare tutti!
La licenza scelta (MIT) ti permette di farlo, di usarlo (anche in ambito commerciale), di distribuirlo come meglio credi, mantenendo sempre e comunque le informazioni di Copyright e la medesima licenza.
Io resto a disposizione per ogni ulteriore dubbio, consiglio o chiacchiera davanti a una birra, cheers 🍻.
#StaySafe
Immagine di copertina di Frank Vessia
L'articolo potrebbe non essere aggiornato
Questo post è stato scritto più di 5 mesi fa, potrebbe non essere aggiornato. Per qualsiasi dubbio ti invito a lasciare un commento per chiedere ulteriori informazioni! :-)