- NSIS Discussion
- Calling Uninstaller from Installer...
Archive: Calling Uninstaller from Installer...
jcagle
25th July 2003 02:42 UTC
Calling Uninstaller from Installer...
Can someone give me a hand? I want to run the uninstaller from my installer, then continue with the installation. The catch is, if I call the uninstaller from the installer, I want to skip some things in the uninstaller. If I double click the uninstaller, I want to do everything in the uninstaller. So, below is what I have attempted. However, it doesn't appear to call the uninstaller. Any suggestions would be very welcomed!!! Thanks in advance!!!
In the Uninstall Section...
Call un.GetParameters
Pop $0
StrCmp $0 "upgrade" skipit
MessageBox MB_OK "I am here"
skipit:
Here is the call from the installer...
ExecWait '"$INSTDIR\uninstall.exe upgrade" _?=$INSTDIR'
I put the "_?=$INSTDIR" on this line because I read somewhere that that is needed to make the installer script wait for the uninstaller to finish. If that's not the case, please let me know.
kichik
25th July 2003 11:03 UTC
Get the word upgrade outside of the quotes, it's not part of the executable path.
jcagle
25th July 2003 13:58 UTC
Outside of the double quotes...correct? Not the single quotes?
Also, is it correct to have "_?=$INSTDIR"? I would like to delete the directory at the end of the uninstall...but, this might not allow it because the directory is not empty???
kichik
25th July 2003 14:04 UTC
Yes, outside of the double quotes. It should look like this:
ExecWait '"$INSTDIR\uninstall.exe" update _?=$INSTDIR'
It's OK to have the _?= part, and it must be there if you want the installer to really wait for the uninstaller. You won't be able to delete $INSTDIR from the uninstaller because the uninstaller won't copy itself because of the _?= part. If you want to delete it, copy the uninstaller to $TEMP yourself and then call it with _?= from temp. For example:
GetTempFileName $0
CopyFiles /SILENT $INSTDIR\uninstall.exe $0
ExecWait '"$0" update _?=$INSTDIR'
jcagle
25th July 2003 14:07 UTC
Cool, that actually makes sense to me!?!?!?! (I'm new, if you can't tell) :D
Is GetTempFilename a built-in function, or is it a function I must put in my script?
Thanks so much!!
kichik
25th July 2003 14:16 UTC
GetTempFileName is a built-in instruction. Functions that are not built-in are called using the Call instruction. For example:
Call myFunction
Another possibility of something that's not built-in is plug-ins. For example:
PluginName::FunctionName
Afrow UK
25th July 2003 14:23 UTC
There are all the cool functions and plugins on the NSIS Archive:
http://nsis.sourceforge.net/archive
-Stu :)
superwan
31st January 2005 18:10 UTC
hello... I'm sorry to "up" this topic, but I don't understand it really...
this is my code :
SetOutPath "$TEMP"
WriteUninstaller "$TEMP\setup_KTV_tmp.exe"
;écrit dans le KTVsetup.ini qu'il est en train d'installer
WriteIniStr "$TEMP\KTVsetup.ini" "setup" "type" "install"
;Lance le désinstalleur en fenêtre, cache l'autre fenêtre (qui de toute façon est déjà cachée avec le silentinstall silent)
HideWindow
ClearErrors
ExecWait '$TEMP\setup_KTV_tmp.exe _?=$TEMP'
IfErrors no_remove_uninstaller
ReadRegStr $0 HKLM Software\K!TV ""
StrCpy $INSTDIR "$0"
SetOutPath $INSTDIR
WriteUninstaller "$INSTDIR\UninstKTV.exe"
BringToFront
no_remove_uninstaller:
Delete "$TEMP\setup_KTV_tmp.exe"
and my execwait doesn't wait :L
where is my error ?
thx for your answers ;)
superwan
31st January 2005 18:17 UTC
sorry....
this works :) :
ExecWait '"$TEMP\setup_KTV_tmp.exe" _?=$TEMP'
(quoting problem)
(i'm really dumb :D )