LarpixClient/electron/node_modules/app-builder-lib/templates/nsis/multiUser.nsh
olcxja fb6c8b6ee9
All checks were successful
Android Build / publish (push) Successful in 55s
Linux Build / publish (push) Successful in 1m6s
update electron to v43
2026-07-09 22:38:33 +02:00

141 lines
No EOL
3.8 KiB
NSIS
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

!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"
Push $1
Push $2
# UserProgramFiles is the per-user install root and can be a non-default location
StrCpy $2 0
System::Call 'SHELL32::SHGetKnownFolderPath(g "${FOLDERID_UserProgramFiles}", i ${KF_FLAG_CREATE}, p 0, *p .r2)i.r1'
${If} $1 == 0
System::Call 'KERNEL32::lstrcpynW(w .r0, p r2, i ${NSIS_MAX_STRLEN})p'
${endif}
# SHGetKnownFolderPath may return allocated memory even on failure
${If} $2 != 0
System::Call 'OLE32::CoTaskMemFree(p r2)'
${endif}
Pop $2
Pop $1
StrCpy $INSTDIR "$0\${APP_FILENAME}"
${endif}
# allow /D switch to override installation path https://github.com/electron-userland/electron-builder/issues/1551
!insertmacro GetDParameter $R0
${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
!insertmacro GetDParameter $R0
${If} $R0 != ""
StrCpy $INSTDIR $R0
${endif}
!macroend
!endif
# Custom function to handle /D parameter with spaces
# The /D parameter is special in NSIS - it must be the last parameter and cannot have quotes
# Use StdUtils.GetParameter to get the full command line, then parse /D= manually
!macro GetDParameter outVar
Push $R8
Push $R9
Push $R7
Push $R6
Push $R5
# Get the complete command line using StdUtils (including /D parameter)
${StdUtils.GetAllParameters} $R8 "0"
# Initialize result
StrCpy $R9 ""
# Search for /D= or /d= using a simple loop
StrLen $R7 $R8
IntOp $R7 $R7 - 2 # Don't check last 2 characters
StrCpy $R6 0
${Do}
StrCpy $R5 $R8 3 $R6 # Get 3 characters starting at position $R6
${If} $R5 == "/D="
${OrIf} $R5 == "/d="
# Found /D= or /d=, extract everything after it
IntOp $R6 $R6 + 3
StrCpy $R9 $R8 "" $R6
${Break}
${EndIf}
IntOp $R6 $R6 + 1
${LoopUntil} $R6 > $R7
StrCpy ${outVar} $R9
Pop $R5
Pop $R6
Pop $R7
Pop $R9
Pop $R8
!macroend