!include FileFunc.nsh !include UAC.nsh !define FOLDERID_UserProgramFiles {5CD7AEE2-2219-4A67-B85D-6C9CE15660CB} !define KF_FLAG_CREATE 0x00008000 # allow user to define own custom !define /ifndef INSTALL_REGISTRY_KEY "Software\${APP_GUID}" !define /ifndef UNINSTALL_REGISTRY_KEY "Software\Microsoft\Windows\CurrentVersion\Uninstall\{${UNINSTALL_APP_KEY}}" # current Install Mode ("all" or "CurrentUser") Var installMode !ifndef INSTALL_MODE_PER_ALL_USERS !ifndef ONE_CLICK Var hasPerUserInstallation Var hasPerMachineInstallation !endif Var PerUserInstallationFolder !macro setInstallModePerUser StrCpy $installMode CurrentUser SetShellVarContext current # сhecks registry for previous installation path ReadRegStr $perUserInstallationFolder HKCU "${INSTALL_REGISTRY_KEY}" InstallLocation ${if} $perUserInstallationFolder != "" StrCpy $INSTDIR $perUserInstallationFolder ${else} StrCpy $0 "$LocalAppData\Programs" System::Store S # Win7 has a per-user programfiles known folder and this can be a non-default location System::Call 'SHELL32::SHGetKnownFolderPath(g "${FOLDERID_UserProgramFiles}", i ${KF_FLAG_CREATE}, p 0, *p .r2)i.r1' ${If} $1 == 0 System::Call '*$2(&w${NSIS_MAX_STRLEN} .s)' StrCpy $0 $1 System::Call 'OLE32::CoTaskMemFree(p r2)' ${endif} System::Store L StrCpy $INSTDIR "$0\${APP_FILENAME}" ${endif} # allow /D switch to override installation path https://github.com/electron-userland/electron-builder/issues/1551 ${StdUtils.GetParameter} $R0 "D" "" ${If} $R0 != "" StrCpy $INSTDIR $R0 ${endif} !macroend !endif !ifdef INSTALL_MODE_PER_ALL_USERS_REQUIRED Var perMachineInstallationFolder !macro setInstallModePerAllUsers StrCpy $installMode all SetShellVarContext all !ifdef BUILD_UNINSTALLER ${IfNot} ${UAC_IsAdmin} ShowWindow $HWNDPARENT ${SW_HIDE} !insertmacro UAC_RunElevated Quit ${endif} !endif # сheck registry for previous installation path ReadRegStr $perMachineInstallationFolder HKLM "${INSTALL_REGISTRY_KEY}" InstallLocation ${if} $perMachineInstallationFolder != "" StrCpy $INSTDIR $perMachineInstallationFolder ${else} StrCpy $0 "$PROGRAMFILES" !ifdef APP_64 ${if} ${RunningX64} StrCpy $0 "$PROGRAMFILES64" ${endif} !endif !ifdef MENU_FILENAME StrCpy $0 "$0\${MENU_FILENAME}" !endif StrCpy $INSTDIR "$0\${APP_FILENAME}" ${endif} # allow /D switch to override installation path https://github.com/electron-userland/electron-builder/issues/1551 ${StdUtils.GetParameter} $R0 "D" "" ${If} $R0 != "" StrCpy $INSTDIR $R0 ${endif} !macroend !endif