Site icon Gioxx.org

Notepad++: installer personalizzato e sempre aggiornato

Notepad++: una raccolta di utili trucchi

Photo by Frank Vessia

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:

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:
Exit mobile version