| !include WinMessages.nsh |
| |
| !ifdef ALL_USERS |
| !define WriteEnvStr_RegKey \ |
| 'HKLM "SYSTEM\CurrentControlSet\Control\Session Manager\Environment"' |
| !else |
| !define WriteEnvStr_RegKey 'HKCU "Environment"' |
| !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 $1 |
| Pop $0 |
| 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 |
| |
| |