mirror of
https://github.com/arsenetar/dupeguru.git
synced 2024-11-14 03:29:02 +00:00
Update setup.nsi
Updates to setup.nsi including: - Defines from CLI - Version information (MAJOR, MINOR, PATCH) - Bits (64 / 32) - SourcePath (if we wanted something other than build) - Added extra defines to move application specifics to one location - Added extra defines for uninstall information - Added calculation of install size - Added switching between 64 and 32 bit contexts (need to verify functionality) - Updated output file naming - Added NSIS supported languages which are also supported by dupeGuru - Added rest of registry keys for uninstall information - Added missing registry key for installType - Added removeing Vendor folder and registry key if empty on uninstall Should be very close to having this installer script ready to integrate into the package.py script if desired. Ref #393
This commit is contained in:
parent
d8ca6ed4eb
commit
2f0ceb5968
328
setup.nsi
328
setup.nsi
@ -1,148 +1,260 @@
|
||||
;==============================================================================
|
||||
; dupeGuru Installer Script for Windows via NSIS
|
||||
;
|
||||
; When calling makensis use the following:
|
||||
; makensis /DVERSIONMAJOR=x /DVERSIONMINOR=x /DVERSIONPATCH=x /DBITS=x \
|
||||
; /DSOURCEPATH=x
|
||||
; NOTE:
|
||||
; If SOURCEPATH is not set it will default to build (uses subdir based on app).
|
||||
;==============================================================================
|
||||
|
||||
; Compression Setting
|
||||
SetCompressor /SOLID lzma
|
||||
; General Headers
|
||||
!include "FileFunc.nsh"
|
||||
|
||||
; General Defines
|
||||
!define REGKEY "Software\Hardcoded Software\dupeGuru"
|
||||
!define INSTPATH "Hardcoded Software\dupeGuru"
|
||||
var StartMenuFolder
|
||||
;==============================================================================
|
||||
; Configuration Defines
|
||||
;==============================================================================
|
||||
|
||||
; todo include a way to point between x64 and x32 builds via env
|
||||
; need to also change between PROGRAMS64 and PROGRAMS
|
||||
;--------------------------------
|
||||
; Environment Defines
|
||||
!verbose push
|
||||
!verbose 4
|
||||
!ifndef VERSIONMAJOR
|
||||
!echo "VERSIONMAJOR is NOT defined"
|
||||
!endif
|
||||
!ifndef VERSIONMINOR
|
||||
!echo "VERSIONMINOR is NOT defined"
|
||||
!endif
|
||||
!ifndef VERSIONPATCH
|
||||
!echo "VERSIONPATCH is NOT defined"
|
||||
!endif
|
||||
!ifndef BITS
|
||||
!echo "BITS is NOT defined"
|
||||
!endif
|
||||
!ifndef SOURCEPATH
|
||||
!echo "SOURCEPATH is NOT defined"
|
||||
!define SOURCEPATH "build"
|
||||
!endif
|
||||
!ifndef VERSIONMAJOR | VERSIONMINOR | VERSIONPATCH | BITS | SOURCEPATH
|
||||
!error "Command line Defines missing use /DDEFINE=VALUE to define before script"
|
||||
!endif
|
||||
!verbose pop
|
||||
|
||||
;MultiUser
|
||||
; Application Specific Defines
|
||||
!define APPNAME "dupeGuru"
|
||||
!define COMPANYNAME "Hardcoded Software"
|
||||
!define DESCRIPTION "dupeGuru is a tool to find duplicate files on your computer."
|
||||
!define APPLICENSE "LICENSE" ; License is not in build directory
|
||||
!define APPICON "images\dgse_logo.ico" ; nor is the icon
|
||||
!define DISTDIR "dist"
|
||||
!define HELPURL "http://www.hardcoded.net/support/"
|
||||
!define UPDATEURL "http://www.hardcoded.net/dupeguru/"
|
||||
!define ABOUTURL "http://www.hardcoded.net/dupeguru/"
|
||||
|
||||
!define MULTIUSER_EXECUTIONLEVEL Highest
|
||||
!define MULTIUSER_MUI
|
||||
!define MULTIUSER_INSTALLMODE_COMMANDLINE
|
||||
!define MULTIUSER_INSTALLMODE_INSTDIR "${INSTPATH}"
|
||||
!define MULTIUSER_INSTALLMODE_INSTDIR_REGISTRY_KEY "${REGKEY}"
|
||||
!define MULTIUSER_INSTALLMODE_INSTDIR_REGISTRY_VALUENAME "InstallPath"
|
||||
!define MULTIUSER_INSTALLMODE_DEFAULT_REGISTRY_KEY "${REGKEY}"
|
||||
!define MULTIUSER_INSTALLMODE_DEFAULT_REGISTRY_VALUENAME "InstallType"
|
||||
!include MultiUser.nsh
|
||||
; Static Defines
|
||||
!define UNINSTALLREGBASE "Software\Microsoft\Windows\CurrentVersion\Uninstall"
|
||||
|
||||
; Derived Defines
|
||||
!define BASEREGKEY "Software\${COMPANYNAME}\${APPNAME}" ;without root key
|
||||
!define VENDORREGKEY "Software\${COMPANYNAME}" ;without root key
|
||||
!define UNINSTALLREG "${UNINSTALLREGBASE}\${APPNAME}" ;without root key
|
||||
!define INSTPATH "${COMPANYNAME}\${APPNAME}" ;without programs / appdata
|
||||
|
||||
; Global vars
|
||||
var StartMenuFolder
|
||||
var InstallSize
|
||||
|
||||
;==============================================================================
|
||||
; Plugin Setup
|
||||
;==============================================================================
|
||||
|
||||
; MultiUser Plugin - Allow single user or all install based on execution level
|
||||
!define MULTIUSER_EXECUTIONLEVEL Highest
|
||||
!define MULTIUSER_MUI
|
||||
!define MULTIUSER_INSTALLMODE_COMMANDLINE
|
||||
!define MULTIUSER_INSTALLMODE_INSTDIR "${INSTPATH}" ; without programs /appdata
|
||||
; allow for next run of installer to automatically find install path and type
|
||||
!define MULTIUSER_INSTALLMODE_INSTDIR_REGISTRY_KEY "${BASEREGKEY}"
|
||||
!define MULTIUSER_INSTALLMODE_INSTDIR_REGISTRY_VALUENAME "InstallPath"
|
||||
!define MULTIUSER_INSTALLMODE_DEFAULT_REGISTRY_KEY "${BASEREGKEY}"
|
||||
!define MULTIUSER_INSTALLMODE_DEFAULT_REGISTRY_VALUENAME "InstallType"
|
||||
!if ${BITS} == "64"
|
||||
!define MULTIUSER_USE_PROGRAMFILES64
|
||||
!endif
|
||||
!include MultiUser.nsh
|
||||
|
||||
;--------------------------------
|
||||
; Modern UI 2
|
||||
!include "MUI2.nsh"
|
||||
!define MUI_ICON "${APPICON}"
|
||||
!define MUI_ABORTWARNING
|
||||
!define MUI_UNABORTWARNING
|
||||
|
||||
;--------------------------------
|
||||
;Modern UI 2
|
||||
;==============================================================================
|
||||
; NSIS Variables
|
||||
;==============================================================================
|
||||
|
||||
!include "MUI2.nsh"
|
||||
!define MUI_ICON "images\dgse_logo.ico"
|
||||
Name "${APPNAME}"
|
||||
!system 'mkdir "${DISTDIR}"'
|
||||
OutFile "${DISTDIR}\${APPNAME}_win${BITS}_${VERSIONMAJOR}.${VERSIONMINOR}.${VERSIONPATCH}.exe"
|
||||
Icon "${APPICON}"
|
||||
|
||||
;--------------------------------
|
||||
;==============================================================================
|
||||
; Pages
|
||||
;==============================================================================
|
||||
|
||||
;General
|
||||
!insertmacro MUI_PAGE_WELCOME
|
||||
!insertmacro MUI_PAGE_LICENSE "${APPLICENSE}"
|
||||
!insertmacro MULTIUSER_PAGE_INSTALLMODE
|
||||
!insertmacro MUI_PAGE_DIRECTORY
|
||||
|
||||
;Name and file
|
||||
Name "dupeGuru"
|
||||
OutFile "DupeGuruInstaller.exe"
|
||||
; values for start menu page
|
||||
!define MUI_STARTMENUPAGE_REGISTRY_ROOT "SHCTX" ; uses shell context
|
||||
!define MUI_STARTMENUPAGE_REGISTRY_KEY "${BASEREGKEY}"
|
||||
!define MUI_STARTMENUPAGE_REGISTRY_VALUENAME "Start Menu Folder"
|
||||
!insertmacro MUI_PAGE_STARTMENU Application $StartMenuFolder
|
||||
|
||||
;--------------------------------
|
||||
!insertmacro MUI_PAGE_INSTFILES
|
||||
!insertmacro MUI_PAGE_FINISH
|
||||
|
||||
;Interface Settings
|
||||
|
||||
!define MUI_ABORTWARNING
|
||||
!define !define MUI_UNABORTWARNING
|
||||
|
||||
;--------------------------------
|
||||
;Pages
|
||||
|
||||
!insertmacro MUI_PAGE_WELCOME
|
||||
!insertmacro MUI_PAGE_LICENSE LICENSE
|
||||
!insertmacro MULTIUSER_PAGE_INSTALLMODE
|
||||
|
||||
!insertmacro MUI_PAGE_DIRECTORY
|
||||
|
||||
!define MUI_STARTMENUPAGE_REGISTRY_ROOT "SHCTX"
|
||||
!define MUI_STARTMENUPAGE_REGISTRY_KEY "${REGKEY}"
|
||||
!define MUI_STARTMENUPAGE_REGISTRY_VALUENAME "Start Menu Folder"
|
||||
!insertmacro MUI_PAGE_STARTMENU Application $StartMenuFolder
|
||||
!insertmacro MUI_PAGE_INSTFILES
|
||||
!insertmacro MUI_PAGE_FINISH
|
||||
; uninstaller pages
|
||||
!insertmacro MUI_UNPAGE_CONFIRM
|
||||
!insertmacro MUI_UNPAGE_INSTFILES
|
||||
|
||||
!insertmacro MUI_UNPAGE_CONFIRM
|
||||
!insertmacro MUI_UNPAGE_INSTFILES
|
||||
;==============================================================================
|
||||
; Languages
|
||||
;==============================================================================
|
||||
|
||||
!insertmacro MUI_LANGUAGE "English" ;first language is the default language
|
||||
!insertmacro MUI_LANGUAGE "French"
|
||||
!insertmacro MUI_LANGUAGE "German"
|
||||
!insertmacro MUI_LANGUAGE "Greek"
|
||||
!insertmacro MUI_LANGUAGE "Italian"
|
||||
!insertmacro MUI_LANGUAGE "Korean"
|
||||
!insertmacro MUI_LANGUAGE "Polish"
|
||||
!insertmacro MUI_LANGUAGE "Russian"
|
||||
!insertmacro MUI_LANGUAGE "Spanish"
|
||||
!insertmacro MUI_LANGUAGE "Ukrainian"
|
||||
!insertmacro MUI_LANGUAGE "Vietnamese"
|
||||
!insertmacro MUI_LANGUAGE "Dutch"
|
||||
!insertmacro MUI_LANGUAGE "Czech"
|
||||
;!insertmacro MUI_LANGUAGE "Chinese" ; no NSIS builtin support
|
||||
;!insertmacro MUI_LANGUAGE "Brazilian" ; no NSIS builtin support
|
||||
;!insertmacro MUI_LANGUAGE "Armenian" ; requires UNICODE
|
||||
|
||||
;==============================================================================
|
||||
; Reserve Files
|
||||
;==============================================================================
|
||||
|
||||
; If you are using solid compression, files that are required before
|
||||
; the actual installation should be stored first in the data block,
|
||||
; because this will make your installer start faster.
|
||||
|
||||
!insertmacro MUI_RESERVEFILE_LANGDLL
|
||||
ReserveFile /nonfatal "${NSISDIR}\Plugins\*.dll" ;reserve if needed
|
||||
|
||||
;==============================================================================
|
||||
; Installer Sections
|
||||
;==============================================================================
|
||||
|
||||
Section "!Application" AppSec
|
||||
SetOutPath "$INSTDIR" ; set from result of installer pages
|
||||
|
||||
;--------------------------------
|
||||
;Languages
|
||||
; Files to install
|
||||
File /r "${SOURCEPATH}\${APPNAME}-win${BITS}bit\*"
|
||||
|
||||
!insertmacro MUI_LANGUAGE "English" ;first language is the default language
|
||||
|
||||
;--------------------------------
|
||||
|
||||
;Reserve Files
|
||||
|
||||
;If you are using solid compression, files that are required before
|
||||
;the actual installation should be stored first in the data block,
|
||||
;because this will make your installer start faster.
|
||||
|
||||
!insertmacro MUI_RESERVEFILE_LANGDLL
|
||||
ReserveFile /nonfatal "${NSISDIR}\Plugins\*.dll"
|
||||
|
||||
;--------------------------------
|
||||
|
||||
;Installer Sections
|
||||
|
||||
Section "DupeGuru" SecDupeGuru
|
||||
|
||||
SetOutPath "$INSTDIR"
|
||||
|
||||
;Files to install
|
||||
File /r "build\dupeguru-win64bit\*"
|
||||
File "images\dgse_logo.ico" ; image for ?
|
||||
|
||||
;Store installation folder
|
||||
WriteRegStr SHCTX "${REGKEY}" "Path" $INSTDIR
|
||||
|
||||
;Uninstall Entry
|
||||
WriteRegStr SHCTX "Software\Microsoft\Windows\CurrentVersion\Uninstall\dupeGuru" \
|
||||
"DisplayName" "dupeGuru"
|
||||
WriteRegStr SHCTX "Software\Microsoft\Windows\CurrentVersion\Uninstall\dupeGuru" \
|
||||
"UninstallString" "$\"$INSTDIR\uninstall.exe$\" /$MultiUser.InstallMode"
|
||||
WriteRegStr SHCTX "Software\Microsoft\Windows\CurrentVersion\Uninstall\dupeGuru" "QuietUninstallString" \
|
||||
"$\"$INSTDIR\uninstall.exe$\" /$MultiUser.InstallMode /S"
|
||||
;todo add the rest of the keys needed here
|
||||
;Create uninstaller
|
||||
WriteUninstaller "$INSTDIR\Uninstall.exe"
|
||||
|
||||
; Create Start Menu Items
|
||||
!insertmacro MUI_STARTMENU_WRITE_BEGIN Application
|
||||
|
||||
;Create shortcuts
|
||||
CreateDirectory "$SMPROGRAMS\$StartMenuFolder"
|
||||
CreateShortcut "$SMPROGRAMS\$StartMenuFolder\dupeGuru.lnk" "$INSTDIR\dupeGuru.exe"
|
||||
CreateShortcut "$SMPROGRAMS\$StartMenuFolder\${APPNAME}.lnk" "$INSTDIR\${APPNAME}.exe"
|
||||
CreateShortcut "$SMPROGRAMS\$StartMenuFolder\Uninstall.lnk" "$INSTDIR\Uninstall.exe"
|
||||
|
||||
!insertmacro MUI_STARTMENU_WRITE_END
|
||||
|
||||
; Store installation folder
|
||||
WriteRegStr SHCTX "${BASEREGKEY}" "InstallPath" $INSTDIR
|
||||
WriteRegStr SHCTX "${BASEREGKEY}" "InstallType" $MultiUser.InstallMode
|
||||
|
||||
; get installed size
|
||||
Push $R0
|
||||
Push $R1
|
||||
Push $R2
|
||||
${GetSize} "$INSTDIR" "/S=0K" $R0 $R1 $R2 ; look into locate
|
||||
IntFmt $InstallSize "0x%08X" $R0
|
||||
Pop $R2
|
||||
Pop $R1
|
||||
Pop $R0
|
||||
|
||||
; Uninstall Entry
|
||||
WriteRegStr SHCTX "${UNINSTALLREG}" "DisplayName" "${APPNAME} ${VERSIONMAJOR}.${VERSIONMINOR}.${VERSIONPATCH}"
|
||||
WriteRegStr SHCTX "${UNINSTALLREG}" "DisplayVersion" "${VERSIONMAJOR}.${VERSIONMINOR}.${VERSIONPATCH}"
|
||||
WriteRegStr SHCTX "${UNINSTALLREG}" "DisplayIcon" "$INSTDIR\${APPNAME}.exe"
|
||||
WriteRegDWORD SHCTX "${UNINSTALLREG}" "VersionMajor" ${VERSIONMAJOR}
|
||||
WriteRegDWORD SHCTX "${UNINSTALLREG}" "VersionMinor" ${VERSIONMINOR}
|
||||
WriteRegDWORD SHCTX "${UNINSTALLREG}" "VersionPatch" ${VERSIONPATCH}
|
||||
WriteRegStr SHCTX "${UNINSTALLREG}" "Comments" "${APPNAME} installer"
|
||||
WriteRegStr SHCTX "${UNINSTALLREG}" "InstallLocation" "$INSTDIR"
|
||||
WriteRegStr SHCTX "${UNINSTALLREG}" "Publisher" "${COMPANYNAME}"
|
||||
WriteRegStr SHCTX "${UNINSTALLREG}" "Contact" "${HELPURL}"
|
||||
WriteRegStr SHCTX "${UNINSTALLREG}" "HelpLink" "${HELPURL}"
|
||||
WriteRegStr SHCTX "${UNINSTALLREG}" "URLUpdateInfo" "${UPDATEURL}"
|
||||
WriteRegStr SHCTX "${UNINSTALLREG}" "URLInfoAbout" "${ABOUTURL}"
|
||||
WriteRegDWORD SHCTX "${UNINSTALLREG}" "NoModify" 1
|
||||
WriteRegDWORD SHCTX "${UNINSTALLREG}" "NoRepair" 1
|
||||
WriteRegDWORD SHCTX "${UNINSTALLREG}" "EstimatedSize" $InstallSize
|
||||
WriteRegStr SHCTX "${UNINSTALLREG}" "UninstallString" "$\"$INSTDIR\uninstall.exe$\" /$MultiUser.InstallMode"
|
||||
WriteRegStr SHCTX "${UNINSTALLREG}" "QuietUninstallString" "$\"$INSTDIR\uninstall.exe$\" /$MultiUser.InstallMode /S"
|
||||
|
||||
; Create uninstaller
|
||||
WriteUninstaller "$INSTDIR\Uninstall.exe"
|
||||
SectionEnd
|
||||
|
||||
;--------------------------------
|
||||
;Descriptions
|
||||
;==============================================================================
|
||||
; Descriptions
|
||||
;==============================================================================
|
||||
; Add descriptions as needed
|
||||
|
||||
|
||||
;--------------------------------
|
||||
;Uninstaller Section
|
||||
;==============================================================================
|
||||
; Uninstaller Sections
|
||||
;==============================================================================
|
||||
|
||||
Section "Uninstall"
|
||||
|
||||
;ADD YOUR OWN FILES HERE...
|
||||
; Remove Start Menu Folder
|
||||
!insertmacro MUI_STARTMENU_GETFOLDER Application $StartMenuFolder
|
||||
RMDir /r "$SMPROGRAMS\$StartMenuFolder"
|
||||
Delete "$INSTDIR\Uninstall.exe"
|
||||
|
||||
RMDir /r "$INSTDIR"
|
||||
; todo delete vendor dir and keys if empty
|
||||
DeleteRegKey SHCTX "${REGKEY}"
|
||||
DeleteRegKey SHCTX "Software\Microsoft\Windows\CurrentVersion\Uninstall\dupeGuru"
|
||||
; Delete the Install Directory and vendor directory (if empty)
|
||||
Push $R0
|
||||
RMDir /r "$INSTDIR" ;NSIS seems to recomend against this... look into options
|
||||
${GetParent} "$INSTDIR" $R0
|
||||
RMDir $R0
|
||||
Pop $R0
|
||||
|
||||
; Remove registry keys and vendor keys (if empty)
|
||||
DeleteRegKey SHCTX "${BASEREGKEY}"
|
||||
DeleteRegKey /ifempty SHCTX "${VENDORREGKEY}"
|
||||
DeleteRegKey SHCTX "${UNINSTALLREG}"
|
||||
SectionEnd
|
||||
|
||||
;==============================================================================
|
||||
; Functions
|
||||
;==============================================================================
|
||||
|
||||
Function .onInit
|
||||
!if ${BITS} == "64"
|
||||
SetRegView 64
|
||||
!else
|
||||
SetRegView 32
|
||||
!endif
|
||||
!insertmacro MULTIUSER_INIT
|
||||
!insertmacro MUI_LANGDLL_DISPLAY
|
||||
!insertmacro MUI_LANGDLL_DISPLAY
|
||||
FunctionEnd
|
||||
|
||||
Function un.onInit
|
||||
!if ${BITS} == "64"
|
||||
SetRegView 64
|
||||
!else
|
||||
SetRegView 32
|
||||
!endif
|
||||
!insertmacro MULTIUSER_UNINIT
|
||||
!insertmacro MUI_UNGETLANGUAGE
|
||||
FunctionEnd
|
Loading…
Reference in New Issue
Block a user