123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227 |
- # functions (nsis macro) for installer
- !include "extractAppPackage.nsh"
- !ifdef APP_PACKAGE_URL
- !include webPackage.nsh
- !endif
- !macro installApplicationFiles
- !ifdef APP_BUILD_DIR
- File /r "${APP_BUILD_DIR}\*.*"
- !else
- !ifdef APP_PACKAGE_URL
- Var /GLOBAL packageFile
- Var /GLOBAL isPackageFileExplicitlySpecified
- ${StdUtils.GetParameter} $packageFile "package-file" ""
- ${if} $packageFile == ""
- !ifdef APP_64_NAME
- !ifdef APP_32_NAME
- !ifdef APP_ARM64_NAME
- ${if} ${IsNativeARM64}
- StrCpy $packageFile "${APP_ARM64_NAME}"
- StrCpy $1 "${APP_ARM64_HASH}"
- ${elseif} ${IsNativeAMD64}
- StrCpy $packageFile "${APP_64_NAME}"
- StrCpy $1 "${APP_64_HASH}"
- ${else}
- StrCpy $packageFile "${APP_32_NAME}"
- StrCpy $1 "${APP_32_HASH}"
- ${endif}
- !else
- ${if} ${RunningX64}
- StrCpy $packageFile "${APP_64_NAME}"
- StrCpy $1 "${APP_64_HASH}"
- ${else}
- StrCpy $packageFile "${APP_32_NAME}"
- StrCpy $1 "${APP_32_HASH}"
- ${endif}
- !endif
- !else
- StrCpy $packageFile "${APP_64_NAME}"
- StrCpy $1 "${APP_64_HASH}"
- !endif
- !else
- StrCpy $packageFile "${APP_32_NAME}"
- StrCpy $1 "${APP_32_HASH}"
- !endif
- StrCpy $4 "$packageFile"
- StrCpy $packageFile "$EXEDIR/$packageFile"
- StrCpy $isPackageFileExplicitlySpecified "false"
- ${else}
- StrCpy $isPackageFileExplicitlySpecified "true"
- ${endIf}
- # we do not check file hash is specifed explicitly using --package-file because it is clear that user definitely want to use this file and it is user responsibility to check
- # 1. auto-updater uses --package-file and validates checksum
- # 2. user can user another package file (use case - one installer suitable for any app version (use latest version))
- ${if} ${FileExists} "$packageFile"
- ${if} $isPackageFileExplicitlySpecified == "true"
- Goto fun_extract
- ${else}
- ${StdUtils.HashFile} $3 "SHA2-512" "$packageFile"
- ${if} $3 == $1
- Goto fun_extract
- ${else}
- MessageBox MB_OK "Package file $4 found locally, but checksum doesn't match — expected $1, actual $3.$\r$\nLocal file is ignored and package will be downloaded from Internet."
- ${endIf}
- ${endIf}
- ${endIf}
- !insertmacro downloadApplicationFiles
- fun_extract:
- !insertmacro extractUsing7za "$packageFile"
- # electron always uses per user app data
- ${if} $installMode == "all"
- SetShellVarContext current
- ${endif}
- !insertmacro moveFile "$packageFile" "$LOCALAPPDATA\${APP_PACKAGE_STORE_FILE}"
- ${if} $installMode == "all"
- SetShellVarContext all
- ${endif}
- !else
- !insertmacro extractEmbeddedAppPackage
- # electron always uses per user app data
- ${if} $installMode == "all"
- SetShellVarContext current
- ${endif}
- !insertmacro copyFile "$EXEPATH" "$LOCALAPPDATA\${APP_INSTALLER_STORE_FILE}"
- ${if} $installMode == "all"
- SetShellVarContext all
- ${endif}
- !endif
- !endif
- File "/oname=${UNINSTALL_FILENAME}" "${UNINSTALLER_OUT_FILE}"
- !macroend
- !macro registryAddInstallInfo
- WriteRegStr SHELL_CONTEXT "${INSTALL_REGISTRY_KEY}" InstallLocation "$INSTDIR"
- WriteRegStr SHELL_CONTEXT "${INSTALL_REGISTRY_KEY}" KeepShortcuts "true"
- WriteRegStr SHELL_CONTEXT "${INSTALL_REGISTRY_KEY}" ShortcutName "${SHORTCUT_NAME}"
- !ifdef MENU_FILENAME
- WriteRegStr SHELL_CONTEXT "${INSTALL_REGISTRY_KEY}" MenuDirectory "${MENU_FILENAME}"
- !endif
- ${if} $installMode == "all"
- StrCpy $0 "/allusers"
- StrCpy $1 ""
- ${else}
- StrCpy $0 "/currentuser"
- StrCpy $1 ""
- ${endIf}
- WriteRegStr SHELL_CONTEXT "${UNINSTALL_REGISTRY_KEY}" DisplayName "${UNINSTALL_DISPLAY_NAME}$1"
- # https://github.com/electron-userland/electron-builder/issues/750
- StrCpy $2 "$INSTDIR\${UNINSTALL_FILENAME}"
- WriteRegStr SHELL_CONTEXT "${UNINSTALL_REGISTRY_KEY}" UninstallString '"$2" $0'
- WriteRegStr SHELL_CONTEXT "${UNINSTALL_REGISTRY_KEY}" QuietUninstallString '"$2" $0 /S'
- WriteRegStr SHELL_CONTEXT "${UNINSTALL_REGISTRY_KEY}" "DisplayVersion" "${VERSION}"
- !ifdef UNINSTALLER_ICON
- WriteRegStr SHELL_CONTEXT "${UNINSTALL_REGISTRY_KEY}" "DisplayIcon" "$INSTDIR\uninstallerIcon.ico"
- !else
- WriteRegStr SHELL_CONTEXT "${UNINSTALL_REGISTRY_KEY}" "DisplayIcon" "$appExe,0"
- !endif
- !ifdef COMPANY_NAME
- WriteRegStr SHELL_CONTEXT "${UNINSTALL_REGISTRY_KEY}" "Publisher" "${COMPANY_NAME}"
- !endif
- WriteRegDWORD SHELL_CONTEXT "${UNINSTALL_REGISTRY_KEY}" NoModify 1
- WriteRegDWORD SHELL_CONTEXT "${UNINSTALL_REGISTRY_KEY}" NoRepair 1
- # allow user to define ESTIMATED_SIZE to avoid GetSize call
- !ifdef ESTIMATED_SIZE
- IntFmt $0 "0x%08X" ${ESTIMATED_SIZE}
- !else
- ${GetSize} "$INSTDIR" "/S=0K" $0 $1 $2
- IntFmt $0 "0x%08X" $0
- !endif
- WriteRegDWORD SHELL_CONTEXT "${UNINSTALL_REGISTRY_KEY}" "EstimatedSize" "$0"
- !macroend
- !macro cleanupOldMenuDirectory
- ${if} $oldMenuDirectory != ""
- !ifdef MENU_FILENAME
- ${if} $oldMenuDirectory != "${MENU_FILENAME}"
- RMDir "$SMPROGRAMS\$oldMenuDirectory"
- ${endIf}
- !else
- RMDir "$SMPROGRAMS\$oldMenuDirectory"
- !endif
- ${endIf}
- !macroend
- !macro createMenuDirectory
- !ifdef MENU_FILENAME
- CreateDirectory "$SMPROGRAMS\${MENU_FILENAME}"
- ClearErrors
- !endif
- !macroend
- !macro addStartMenuLink keepShortcuts
- !ifndef DO_NOT_CREATE_START_MENU_SHORTCUT
- # The keepShortcuts mechanism is NOT enabled.
- # Menu shortcut will be recreated.
- ${if} $keepShortcuts == "false"
- !insertmacro cleanupOldMenuDirectory
- !insertmacro createMenuDirectory
- CreateShortCut "$newStartMenuLink" "$appExe" "" "$appExe" 0 "" "" "${APP_DESCRIPTION}"
- # clear error (if shortcut already exists)
- ClearErrors
- WinShell::SetLnkAUMI "$newStartMenuLink" "${APP_ID}"
- # The keepShortcuts mechanism IS enabled.
- # The menu shortcut could either not exist (it shouldn't be recreated) or exist in an obsolete location.
- ${elseif} $oldStartMenuLink != $newStartMenuLink
- ${andIf} ${FileExists} "$oldStartMenuLink"
- !insertmacro createMenuDirectory
- Rename $oldStartMenuLink $newStartMenuLink
- WinShell::UninstShortcut "$oldStartMenuLink"
- WinShell::SetLnkAUMI "$newStartMenuLink" "${APP_ID}"
- !insertmacro cleanupOldMenuDirectory
- ${endIf}
- !endif
- !macroend
- !macro addDesktopLink keepShortcuts
- !ifndef DO_NOT_CREATE_DESKTOP_SHORTCUT
- # https://github.com/electron-userland/electron-builder/pull/1432
- ${ifNot} ${isNoDesktopShortcut}
- # The keepShortcuts mechanism is NOT enabled.
- # Shortcuts will be recreated.
- ${if} $keepShortcuts == "false"
- CreateShortCut "$newDesktopLink" "$appExe" "" "$appExe" 0 "" "" "${APP_DESCRIPTION}"
- ClearErrors
- WinShell::SetLnkAUMI "$newDesktopLink" "${APP_ID}"
- # The keepShortcuts mechanism IS enabled.
- # The desktop shortcut could exist in an obsolete location (due to name change).
- ${elseif} $oldDesktopLink != $newDesktopLink
- ${andIf} ${FileExists} "$oldDesktopLink"
- Rename $oldDesktopLink $newDesktopLink
- WinShell::UninstShortcut "$oldDesktopLink"
- WinShell::SetLnkAUMI "$newDesktopLink" "${APP_ID}"
- !ifdef RECREATE_DESKTOP_SHORTCUT
- ${elseif} $oldDesktopLink != $newDesktopLink
- ${orIfNot} ${FileExists} "$oldDesktopLink"
- ${ifNot} ${isUpdated}
- CreateShortCut "$newDesktopLink" "$appExe" "" "$appExe" 0 "" "" "${APP_DESCRIPTION}"
- ClearErrors
- WinShell::SetLnkAUMI "$newDesktopLink" "${APP_ID}"
- ${endIf}
- !endif
- ${endIf}
- System::Call 'Shell32::SHChangeNotify(i 0x8000000, i 0, i 0, i 0)'
- ${endIf}
- !endif
- !macroend
|