My application can be installed more than once on the same system with different installation dirs, registry keys, ports, etc. for example
c:\Program Files\AAAA this is the default
c:\Program Files\XXXX
When I want to uninstall one of those I need to determine which instance should be removed.
I planned to do this by reading a file from $EXEDIR of the uninstaller. Unfortunately
c:\Program Files\XXXX\uninstall.exe
is first unpacked to a temp directory and then an executable Au_.exe is started. For this programm it is
$EXEDIR = c:\Temp\~nsu.tmp
$EXEPATH = c:\Temp\~nsu.tmp\Au_.exe
$INSTDIR = c:\Program Files\AAAA\uninstall.exe
the value of the default installation directory.
So how could I determine, which instance to remove?
Andy ideas?
Thanks, Andre
get INSTDIR in uninstaller.exe
10 posts
I am not sure to understand what you wanna do..... what the pb when reading from "$INSTDIR\foo.txt" ? ($INSTDIR contained in the uninstaller was set during the installation, so if it was installed in C:\Program Files\XXXX, it will read C:\Program Files\XXXX\foo.txt and not the C:\Program Files\AAAA\foo.txt one)
Gal'
Gal'
Thanks for pointing this out. I had seen this in the documentation, but it was not what my debugging code showed me.
Unfortunately I have overlooked something the previous programmer did:
ReadRegStr $INSTDIR HKLM "$REGKEY" Path
Removing this statement gave me what I need.
Thanks for the excellent answer,
Andre
Unfortunately I have overlooked something the previous programmer did:
ReadRegStr $INSTDIR HKLM "$REGKEY" Path
Removing this statement gave me what I need.
Thanks for the excellent answer,
Andre
was a pleasur'
I have a simmilar problem. When I run the uninstall.exe $INSTDIR is correct, but it I run an installer and it says I already have the program installed and choose to uninstall the existing version $INSTDIR seems to be the default value rather then where I installed it.
Originally posted by staffanOf course. Your installer doesn't know if you have already installed your soft in c:\Program Files\Already\. But, during the installation, if the uninstaller is generated at the end, the uninstaller keep the information "installed under C:\Program Files\Already".
I have a simmilar problem. When I run the uninstall.exe $INSTDIR is correct, but it I run an installer and it says I already have the program installed and choose to uninstall the existing version $INSTDIR seems to be the default value rather then where I installed it.
So, how can you do to know wether your soft is already installed or not ? Use Windows register keys to do that...
During the install process, check for the key existance (you can define some variables like version, company, install_path and so on...) then warn the user if already installed. In the end of the process, don't forget to write the key into the register with the good values....
That's all.
Gal'
Originally posted by galevskyYes, that's what I do. It's when the old version is to be uninstalled the problem occurs.
So, how can you do to know wether your soft is already installed or not ? Use Windows register keys to do that...
I think I've managed to find the problem. In PageLeaveReinstall it calls ExecWait '$R1 _?=$INSTDIR' and that means it calls C:\Dir\ActuallyInstalled\Uninstall.exe _?= C:\Dir\ThinkItsInstalled and that ofcourse gets all wrong.
Good.
I used to store tmp var in a tmp.ini file (deleted in the end) where I read/write all my persistent var.... so I am sure not to mix up.
Gal'
I used to store tmp var in a tmp.ini file (deleted in the end) where I read/write all my persistent var.... so I am sure not to mix up.
Gal'
I solved it by using the path from the old installation as
ReadRegStr $R1 HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${PRODUCT_NAME}" "UninstallString"
and then trimming it
${GetParent} "$R1" $R4
ExecWait '$R1 _?=$R4'
ReadRegStr $R1 HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${PRODUCT_NAME}" "UninstallString"
and then trimming it
${GetParent} "$R1" $R4
ExecWait '$R1 _?=$R4'
well-done.