mirror of
https://github.com/qgis/QGIS.git
synced 2025-02-24 00:47:57 -05:00
150 lines
3.1 KiB
NSIS
150 lines
3.1 KiB
NSIS
!ifndef _WriteEnvStr_nsh
|
|
!define _WriteEnvStr_nsh
|
|
|
|
!include WinMessages.nsh
|
|
|
|
!ifndef WriteEnvStr_RegKey
|
|
!ifdef ALL_USERS
|
|
!define WriteEnvStr_RegKey \
|
|
'HKLM "SYSTEM\CurrentControlSet\Control\Session Manager\Environment"'
|
|
!else
|
|
!define WriteEnvStr_RegKey 'HKCU "Environment"'
|
|
!endif
|
|
!endif
|
|
|
|
#
|
|
# WriteEnvStr - Writes an environment variable
|
|
# Note: Win9x systems requires reboot
|
|
#
|
|
# Example:
|
|
# Push "HOMEDIR" # name
|
|
# Push "C:\New Home Dir\" # value
|
|
# Call WriteEnvStr
|
|
#
|
|
Function WriteEnvStr
|
|
Exch $1 ; $1 has environment variable value
|
|
Exch
|
|
Exch $0 ; $0 has environment variable name
|
|
Push $2
|
|
|
|
Call IsNT
|
|
Pop $2
|
|
StrCmp $2 1 WriteEnvStr_NT
|
|
; Not on NT
|
|
StrCpy $2 $WINDIR 2 ; Copy drive of windows (c:)
|
|
FileOpen $2 "$2\autoexec.bat" a
|
|
FileSeek $2 0 END
|
|
FileWrite $2 "$\r$\nSET $0=$1$\r$\n"
|
|
FileClose $2
|
|
SetRebootFlag true
|
|
Goto WriteEnvStr_done
|
|
|
|
WriteEnvStr_NT:
|
|
WriteRegExpandStr ${WriteEnvStr_RegKey} $0 $1
|
|
SendMessage ${HWND_BROADCAST} ${WM_WININICHANGE} \
|
|
0 "STR:Environment" /TIMEOUT=5000
|
|
|
|
WriteEnvStr_done:
|
|
Pop $2
|
|
Pop $0
|
|
Pop $1
|
|
FunctionEnd
|
|
|
|
#
|
|
# un.DeleteEnvStr - Removes an environment variable
|
|
# Note: Win9x systems requires reboot
|
|
#
|
|
# Example:
|
|
# Push "HOMEDIR" # name
|
|
# Call un.DeleteEnvStr
|
|
#
|
|
Function un.DeleteEnvStr
|
|
Exch $0 ; $0 now has the name of the variable
|
|
Push $1
|
|
Push $2
|
|
Push $3
|
|
Push $4
|
|
Push $5
|
|
|
|
Call un.IsNT
|
|
Pop $1
|
|
StrCmp $1 1 DeleteEnvStr_NT
|
|
; Not on NT
|
|
StrCpy $1 $WINDIR 2
|
|
FileOpen $1 "$1\autoexec.bat" r
|
|
GetTempFileName $4
|
|
FileOpen $2 $4 w
|
|
StrCpy $0 "SET $0="
|
|
SetRebootFlag true
|
|
|
|
DeleteEnvStr_dosLoop:
|
|
FileRead $1 $3
|
|
StrLen $5 $0
|
|
StrCpy $5 $3 $5
|
|
StrCmp $5 $0 DeleteEnvStr_dosLoop
|
|
StrCmp $5 "" DeleteEnvStr_dosLoopEnd
|
|
FileWrite $2 $3
|
|
Goto DeleteEnvStr_dosLoop
|
|
|
|
DeleteEnvStr_dosLoopEnd:
|
|
FileClose $2
|
|
FileClose $1
|
|
StrCpy $1 $WINDIR 2
|
|
Delete "$1\autoexec.bat"
|
|
CopyFiles /SILENT $4 "$1\autoexec.bat"
|
|
Delete $4
|
|
Goto DeleteEnvStr_done
|
|
|
|
DeleteEnvStr_NT:
|
|
DeleteRegValue ${WriteEnvStr_RegKey} $0
|
|
SendMessage ${HWND_BROADCAST} ${WM_WININICHANGE} \
|
|
0 "STR:Environment" /TIMEOUT=5000
|
|
|
|
DeleteEnvStr_done:
|
|
Pop $5
|
|
Pop $4
|
|
Pop $3
|
|
Pop $2
|
|
Pop $1
|
|
Pop $0
|
|
FunctionEnd
|
|
|
|
!ifndef IsNT_KiCHiK
|
|
!define IsNT_KiCHiK
|
|
|
|
#
|
|
# [un.]IsNT - Pushes 1 if running on NT, 0 if not
|
|
#
|
|
# Example:
|
|
# Call IsNT
|
|
# Pop $0
|
|
# StrCmp $0 1 +3
|
|
# MessageBox MB_OK "Not running on NT!"
|
|
# Goto +2
|
|
# MessageBox MB_OK "Running on NT!"
|
|
#
|
|
!macro IsNT UN
|
|
Function ${UN}IsNT
|
|
Push $0
|
|
ReadRegStr $0 HKLM \
|
|
"SOFTWARE\Microsoft\Windows NT\CurrentVersion" CurrentVersion
|
|
StrCmp $0 "" 0 IsNT_yes
|
|
; we are not NT.
|
|
Pop $0
|
|
Push 0
|
|
Return
|
|
|
|
IsNT_yes:
|
|
; NT!!!
|
|
Pop $0
|
|
Push 1
|
|
FunctionEnd
|
|
!macroend
|
|
!insertmacro IsNT ""
|
|
!insertmacro IsNT "un."
|
|
|
|
!endif ; IsNT_KiCHiK
|
|
|
|
!endif ; _WriteEnvStr_nsh
|
|
|