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 lascia un commento!
