Notepad++: installer personalizzato e sempre aggiornato

| |

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

Notepad++: eliminare tutto ciò che c'è prima di una parola 1

Ereditando in parte quanto già fatto con SWUpdates, rilevo la versione di Notepad++ più aggiornata, la scarico in locale, la installo chiedendole di:

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 🍻.

Telegram

Ti aspetto nel canale Telegram dedicato agli aggiornamenti software attualmente sotto monitoraggio, @SWUpdate.
Ti ricordo che puoi sempre suggerirne di nuovi da tenere sotto controllo, scopri come fare leggendo l’articolo dedicato!

#StaySafe


Immagine di copertina di Frank Vessia

Correzioni, suggerimenti? Lascia un commento nell'apposita area qui di seguito o contattami privatamente.
Ti è piaciuto l'articolo? Offrimi un caffè! ☕ :-)

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! :-)

Condividi l'articolo con i tuoi contatti:
Subscribe
Notify of
guest

This site uses Akismet to reduce spam. Learn how your comment data is processed.

0 Commenti
Inline Feedbacks
View all comments