Hi
I have an installer that installs my application and sets environment variables. I set these variables using kichik's script and the SetEnv.dll. I use SetEnv.dll to launch the application from the finish page. Everything work greats.
I've recently changed my script so now we uninstall any older versions of our application (if one is installed) and then install the newer one.
The problem is that the environment variables do not get set the second time around, for example:
(1) Install application (adds Environment variables).
(2) Uninstall the application using installer.exe, this removes the environment variables.
(3) Install application (DOES NOT add the Environment variables) therefore application cannot start.
Does anyone have any suggestions?
Regards
Paul
Installer not setting environment variables second time around.
9 posts
Did you execute the uninstaller from the installer? If so, the installer didn't get a chance to update its environment table and so it thinks the environment variable is still set and therefore doesn't set it again.
Yes I did execute the uninstaller from the installer. How do I get around this problem?
Regards
Paul
Regards
Paul
Manually modify the environment variables for the working installer as well. Use:
Sorry I don't quite get what your saying. Could you clarify what you meant please.
At the moment I use: http://nsis.sourceforge.net/Path_Manipulation
to set my environment variables, and this is done within a section.
I am already using:
in a function, and this function gets called from the active installer (i.e. finish page) so I can launch the application from the installer.
At the moment I use: http://nsis.sourceforge.net/Path_Manipulation
to set my environment variables, and this is done within a section.
I am already using:
in a function, and this function gets called from the active installer (i.e. finish page) so I can launch the application from the installer.
But you don't remove the path from the installer's environment after the uninstaller is executed.
Isn't that just solving one problem and creating another? If I don't clean up after an uninstall then after numerous installs each one representing a newer release I will be adding duplicate environment variables. I've just tested:
and it just concatenates to the end without any checking to determine if the environment variable your adding is already contained within.
Regards
Paul
and it just concatenates to the end without any checking to determine if the environment variable your adding is already contained within.
Regards
Paul
I have a solution, I'll post what I have done later as I don't have time right now.
I've taken this from a post last year.
Regards
Paul
I then use it like this in a section:
; This function allows us to add/remove directories to/from the system path.
!macro SetSystemPath un_
function ${un_}SetSystemPath
# stack top: <'string to add'> / <AppendFlag>
Exch $0 ; new string
Exch
Exch $1 ; append = 2, prefix = 1, remove = 0
Push $R0 ; saved working registers
ReadRegStr $R0 HKLM "${REGISTRY_ENVIRONMENT}" "Path"
${Select} $1
${Case} 0
${${un_}WordAdd} "$R0" ";" "-$0" $R0
${Case} 1
${${un_}WordAdd} "$0" ";" "+$R0" $R0
${Case} 2
${${un_}WordAdd} "$R0" ";" "+$0" $R0
${EndSelect}
WriteRegExpandStr HKLM "${REGISTRY_ENVIRONMENT}" "Path" "$R0"
Pop $R0 ; restore registers
Pop $1
Pop $0
SendMessage ${HWND_BROADCAST} ${WM_WININICHANGE} 0 "STR:Environment" /TIMEOUT=5000
functionEnd
!macroend
!insertmacro SetSystemPath ""
!insertmacro SetSystemPath "un."
and uninstall:
Push 2 ; 2 = append.
Push ${DLLS_ABSOLUTE_PATH}
Call SetSystemPath
WriteRegExpandStr HKLM "${REGISTRY_ENVIRONMENT}" "${ZANG_HOME}" "$INSTDIR"
SendMessage ${HWND_BROADCAST} ${WM_WININICHANGE} 0 "STR:Environment" /TIMEOUT=5000
WriteRegExpandStr HKLM "${REGISTRY_ENVIRONMENT}" "${FFMPEG_HOME}" "$INSTDIR\ffmpeg"
SendMessage ${HWND_BROADCAST} ${WM_WININICHANGE} 0 "STR:Environment" /TIMEOUT=5000
It's ugly but it works, if anyone has any further thoughts I'd appreciate them.
; Remove System variables.
Push 0 ; 0 = remove
Push ${DLLS_ABSOLUTE_PATH}
Call Un.SetSystemPath
; Remove User variables.
Push ${ZANG_HOME}
Push $INSTDIR
Call un.RemoveFromEnvVar
Push ${FFMPEG_HOME}
Push "$INSTDIR\ffmpeg"
Call un.RemoveFromEnvVar
Regards
Paul