Talk:Setting Environment Variables: Difference between revisions
From NSIS Wiki
Jump to navigationJump to search
No edit summary |
(→Obsolete? Confused.: new section) |
||
Line 1: | Line 1: | ||
Is this script compatible with Windows Vista ? Thank you. | Is this script compatible with Windows Vista ? Thank you. | ||
== Obsolete? Confused. == | |||
The article states that it is made obsolete by EnvVarUpdate | |||
except for win95 compatibility. I was a rather confused by this | |||
because EnvVarUpdate (which I also use) seems more suitable for | |||
appending/removing values from a directory path as opposed to just | |||
setting or deleting a plain environment variable. In the end, I wrote | |||
my own functions EnvVarSet / EnvVarUnset consistent to EnvVarUpdate | |||
In case someone is interested, append the following to EnvVarUpdate.nsh: | |||
<highlight-nsis> | |||
!macro _EnvVarSetConstructor EnvVarName Regloc EnvVarValue EnvVarExpand | |||
Push "${EnvVarName}" | |||
Push "${RegLoc}" | |||
Push "${EnvVarValue}" | |||
Push "${EnvVarExpand}" | |||
Call EnvVarSet | |||
!macroend | |||
!define EnvVarSet '!insertmacro "_EnvVarSetConstructor"' | |||
!macro _unEnvVarSetConstructor EnvVarName Regloc EnvVarValue EnvVarExpand | |||
Push "${EnvVarName}" | |||
Push "${RegLoc}" | |||
Push "${EnvVarValue}" | |||
Push "${EnvVarExpand}" | |||
Call un.EnvVarSet | |||
!macroend | |||
!define un.EnvVarSet '!insertmacro "_unEnvVarSetConstructor"' | |||
!macro _EnvVarUnsetConstructor EnvVarName Regloc | |||
Push "${EnvVarName}" | |||
Push "${RegLoc}" | |||
Push "" | |||
Push 0 | |||
Call EnvVarSet | |||
!macroend | |||
!define EnvVarUnset '!insertmacro "_EnvVarUnsetConstructor"' | |||
!macro _unEnvVarUnsetConstructor EnvVarName Regloc | |||
Push "${EnvVarName}" | |||
Push "${RegLoc}" | |||
Push "" | |||
Push 0 | |||
Call un.EnvVarSet | |||
!macroend | |||
!define un.EnvVarUnset '!insertmacro "_unEnvVarUnsetConstructor"' | |||
Var EVSName | |||
Var EVSRegLoc | |||
Var EVSValue | |||
Var EVSExpand | |||
!macro EnvVarSet UN | |||
Function ${UN}EnvVarSet | |||
Pop $EVSExpand | |||
Pop $EVSValue | |||
Pop $EVSRegLoc | |||
Pop $EVSName | |||
${If} $EVSRegLoc == HKLM | |||
${If} $EVSValue == "" | |||
DeleteRegValue ${hklm_all_users} $EVSName | |||
${Else} | |||
${If} $EVSExpand == "1" | |||
DetailPrint "Set $EVSName = $EVSValue (Expanding)" | |||
WriteRegExpandStr ${hklm_all_users} $EVSName $EVSValue | |||
${Else} | |||
DetailPrint "Set $EVSName = $EVSValue" | |||
WriteRegStr ${hklm_all_users} $EVSName $EVSValue | |||
${EndIf} | |||
${EndIf} | |||
${ElseIf} $EVSRegLoc == HKCU | |||
${If} $EVSValue == "" | |||
DeleteRegValue ${hkcu_current_user} $EVSName | |||
${Else} | |||
${If} $EVSExpand == "1" | |||
DetailPrint "Set $EVSName = $EVSValue" | |||
WriteRegExpandStr ${hkcu_current_user} $EVSName $EVSValue | |||
${Else} | |||
WriteRegStr ${hkcu_current_user} $EVSName $EVSValue | |||
${EndIf} | |||
${EndIf} | |||
${Else} | |||
DetailPrint 'ERROR: RegLoc is [$EVSRegLoc] but must be "HKLM" or HKCU"' | |||
${EndIf} | |||
; "Export" our change | |||
SendMessage ${HWND_BROADCAST} ${WM_WININICHANGE} 0 "STR:Environment" /TIMEOUT=5000 | |||
FunctionEnd | |||
!macroend | |||
!insertmacro EnvVarSet "" | |||
!insertmacro EnvVarSet "un." | |||
</highlight-nsis> | |||
[[User:Froesccn|Froesccn]] 13:30, 12 February 2009 (UTC) |
Revision as of 13:30, 12 February 2009
Is this script compatible with Windows Vista ? Thank you.
Obsolete? Confused.
The article states that it is made obsolete by EnvVarUpdate except for win95 compatibility. I was a rather confused by this because EnvVarUpdate (which I also use) seems more suitable for appending/removing values from a directory path as opposed to just setting or deleting a plain environment variable. In the end, I wrote my own functions EnvVarSet / EnvVarUnset consistent to EnvVarUpdate In case someone is interested, append the following to EnvVarUpdate.nsh:
!macro _EnvVarSetConstructor EnvVarName Regloc EnvVarValue EnvVarExpand Push "${EnvVarName}" Push "${RegLoc}" Push "${EnvVarValue}" Push "${EnvVarExpand}" Call EnvVarSet !macroend !define EnvVarSet '!insertmacro "_EnvVarSetConstructor"' !macro _unEnvVarSetConstructor EnvVarName Regloc EnvVarValue EnvVarExpand Push "${EnvVarName}" Push "${RegLoc}" Push "${EnvVarValue}" Push "${EnvVarExpand}" Call un.EnvVarSet !macroend !define un.EnvVarSet '!insertmacro "_unEnvVarSetConstructor"' !macro _EnvVarUnsetConstructor EnvVarName Regloc Push "${EnvVarName}" Push "${RegLoc}" Push "" Push 0 Call EnvVarSet !macroend !define EnvVarUnset '!insertmacro "_EnvVarUnsetConstructor"' !macro _unEnvVarUnsetConstructor EnvVarName Regloc Push "${EnvVarName}" Push "${RegLoc}" Push "" Push 0 Call un.EnvVarSet !macroend !define un.EnvVarUnset '!insertmacro "_unEnvVarUnsetConstructor"' Var EVSName Var EVSRegLoc Var EVSValue Var EVSExpand !macro EnvVarSet UN Function ${UN}EnvVarSet Pop $EVSExpand Pop $EVSValue Pop $EVSRegLoc Pop $EVSName ${If} $EVSRegLoc == HKLM ${If} $EVSValue == "" DeleteRegValue ${hklm_all_users} $EVSName ${Else} ${If} $EVSExpand == "1" DetailPrint "Set $EVSName = $EVSValue (Expanding)" WriteRegExpandStr ${hklm_all_users} $EVSName $EVSValue ${Else} DetailPrint "Set $EVSName = $EVSValue" WriteRegStr ${hklm_all_users} $EVSName $EVSValue ${EndIf} ${EndIf} ${ElseIf} $EVSRegLoc == HKCU ${If} $EVSValue == "" DeleteRegValue ${hkcu_current_user} $EVSName ${Else} ${If} $EVSExpand == "1" DetailPrint "Set $EVSName = $EVSValue" WriteRegExpandStr ${hkcu_current_user} $EVSName $EVSValue ${Else} WriteRegStr ${hkcu_current_user} $EVSName $EVSValue ${EndIf} ${EndIf} ${Else} DetailPrint 'ERROR: RegLoc is [$EVSRegLoc] but must be "HKLM" or HKCU"' ${EndIf} ; "Export" our change SendMessage ${HWND_BROADCAST} ${WM_WININICHANGE} 0 "STR:Environment" /TIMEOUT=5000 FunctionEnd !macroend !insertmacro EnvVarSet "" !insertmacro EnvVarSet "un."
Froesccn 13:30, 12 February 2009 (UTC)