121 lines
3.8 KiB
Plaintext
121 lines
3.8 KiB
Plaintext
; ---------------------
|
|
; x64.nsh
|
|
; ---------------------
|
|
;
|
|
; A few simple macros to handle installations on x64 machines.
|
|
;
|
|
; RunningX64 checks if the installer is running on a 64-bit OS.
|
|
; IsWow64 checks if the installer is a 32-bit application running on a 64-bit OS.
|
|
;
|
|
; ${If} ${RunningX64}
|
|
; MessageBox MB_OK "Running on 64-bit Windows"
|
|
; ${EndIf}
|
|
;
|
|
; IsNative* checks the OS native CPU architecture.
|
|
;
|
|
; ${If} ${IsNativeAMD64}
|
|
; ; Install AMD64 64-bit driver/library
|
|
; ${ElseIf} ${IsNativeARM64}
|
|
; ; Install ARM64 64-bit driver/library
|
|
; ${ElseIf} ${IsNativeIA32}
|
|
; ; Install i386 32-bit driver/library
|
|
; ${Else}
|
|
; Abort "Unsupported CPU architecture!"
|
|
; ${EndIf}
|
|
;
|
|
; ${If} ${IsNativeAMD64}
|
|
; File "amd64\myapp.exe"
|
|
; ${ElseIf} ${IsNativeIA32}
|
|
; ${OrIf} ${IsWow64}
|
|
; File "x86\myapp.exe"
|
|
; ${Else}
|
|
; Abort "Unsupported CPU architecture!"
|
|
; ${EndIf}
|
|
;
|
|
; DisableX64FSRedirection disables file system redirection.
|
|
; EnableX64FSRedirection enables file system redirection.
|
|
;
|
|
; SetOutPath $SYSDIR
|
|
; ${DisableX64FSRedirection}
|
|
; File something.bin # extracts to C:\Windows\System32
|
|
; ${EnableX64FSRedirection}
|
|
; File something.bin # extracts to C:\Windows\SysWOW64
|
|
;
|
|
|
|
!ifndef ___X64__NSH___
|
|
!define ___X64__NSH___
|
|
|
|
!include LogicLib.nsh
|
|
|
|
|
|
!define IsWow64 `"" IsWow64 ""`
|
|
!macro _IsWow64 _a _b _t _f
|
|
!insertmacro _LOGICLIB_TEMP
|
|
System::Call kernel32::GetCurrentProcess()p.s
|
|
System::Call kernel32::IsWow64Process2(ps,*i0s,*i) ; [Win10.1511+] 0 if not WOW64
|
|
Push |
|
|
System::Call kernel32::IsWow64Process(p-1,*i0s) ; [WinXP+] FALSE for a 32-bit application on ARM64!
|
|
System::Int64Op
|
|
Pop $_LOGICLIB_TEMP
|
|
!insertmacro _!= $_LOGICLIB_TEMP 0 `${_t}` `${_f}`
|
|
!macroend
|
|
|
|
|
|
!define RunningX64 `"" RunningX64 ""`
|
|
!macro _RunningX64 _a _b _t _f
|
|
!if ${NSIS_PTR_SIZE} > 4
|
|
!insertmacro LogicLib_JumpToBranch `${_t}` `${_f}`
|
|
!else
|
|
!insertmacro _IsWow64 `${_a}` `${_b}` `${_t}` `${_f}`
|
|
!endif
|
|
!macroend
|
|
|
|
|
|
!define GetNativeMachineArchitecture "!insertmacro GetNativeMachineArchitecture "
|
|
!macro GetNativeMachineArchitecture outvar
|
|
!define GetNativeMachineArchitecture_lbl lbl_GNMA_${__COUNTER__}
|
|
System::Call kernel32::GetCurrentProcess()p.s
|
|
System::Call kernel32::IsWow64Process2(ps,*i,*i0s)
|
|
Pop ${outvar}
|
|
IntCmp ${outvar} 0 "" ${GetNativeMachineArchitecture_lbl}_done ${GetNativeMachineArchitecture_lbl}_done
|
|
!if "${NSIS_PTR_SIZE}" <= 4
|
|
!if "${NSIS_CHAR_SIZE}" <= 1
|
|
System::Call 'USER32::CharNextW(w"")p.s'
|
|
Pop ${outvar}
|
|
IntPtrCmpU ${outvar} 0 "" ${GetNativeMachineArchitecture_lbl}_oldnt ${GetNativeMachineArchitecture_lbl}_oldnt
|
|
StrCpy ${outvar} 332 ; Always IMAGE_FILE_MACHINE_I386 on Win9x
|
|
Goto ${GetNativeMachineArchitecture_lbl}_done
|
|
${GetNativeMachineArchitecture_lbl}_oldnt:
|
|
!endif
|
|
!endif
|
|
System::Call '*0x7FFE002E(&i2.s)'
|
|
Pop ${outvar}
|
|
${GetNativeMachineArchitecture_lbl}_done:
|
|
!undef GetNativeMachineArchitecture_lbl
|
|
!macroend
|
|
|
|
!macro _IsNativeMachineArchitecture _ignore _arc _t _f
|
|
!insertmacro _LOGICLIB_TEMP
|
|
${GetNativeMachineArchitecture} $_LOGICLIB_TEMP
|
|
!insertmacro _= $_LOGICLIB_TEMP ${_arc} `${_t}` `${_f}`
|
|
!macroend
|
|
|
|
!define IsNativeMachineArchitecture `"" IsNativeMachineArchitecture `
|
|
!define IsNativeIA32 '${IsNativeMachineArchitecture} 332' ; Intel x86
|
|
!define IsNativeAMD64 '${IsNativeMachineArchitecture} 34404' ; x86-64/x64
|
|
!define IsNativeARM64 '${IsNativeMachineArchitecture} 43620'
|
|
|
|
|
|
!define DisableX64FSRedirection "!insertmacro DisableX64FSRedirection"
|
|
!macro DisableX64FSRedirection
|
|
System::Call kernel32::Wow64EnableWow64FsRedirection(i0)
|
|
!macroend
|
|
|
|
!define EnableX64FSRedirection "!insertmacro EnableX64FSRedirection"
|
|
!macro EnableX64FSRedirection
|
|
System::Call kernel32::Wow64EnableWow64FsRedirection(i1)
|
|
!macroend
|
|
|
|
|
|
!endif # !___X64__NSH___
|