94 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			NSIS
		
	
	
	
	
	
			
		
		
	
	
			94 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			NSIS
		
	
	
	
	
	
| !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
 | 
