UninstallMSI Function: Difference between revisions
From NSIS Wiki
Jump to navigationJump to search
(Function to Uninstall an MSI installation) |
No edit summary |
||
Line 4: | Line 4: | ||
==Includes Required== | ==Includes Required== | ||
[https://nsis.sourceforge.io/Registry_plug-in Registry] | *[https://nsis.sourceforge.io/Registry_plug-in Registry] | ||
[https://nsis.sourceforge.io/LogicLib LogicLib] | *[https://nsis.sourceforge.io/LogicLib LogicLib] | ||
x64 | *x64 | ||
StrFunc (Be sure to initialize StrRep earlier in your installer | *StrFunc (Be sure to initialize StrRep earlier in your installer) | ||
==Function== | ==Function== |
Revision as of 20:12, 22 April 2020
Author: Faroguy (talk, contrib) |
Description
I needed to have a robust function that would uninstall an arbitrary MSI installation. The other solution provided did not work because I did not know the GUID of the application, only its name.
Includes Required
Function
Function UninstallMSI Exch $R0 Push $0 Push $1 Push $2 Push $3 Push $4 Push $5 Push $6 ${If} ${RunningX64} Setregview 64 StrCpy $0 "HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall" ${Else} Setregview 32 StrCpy $0 "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall" ${EndIf} ${registry::Open} "$0" "/NI='$R0' /K=0 /T=REG_SZ" $1 StrCpy $6 0 ${While} $6 < 1 ${registry::Find} $1 $2 $3 $4 $5 ${If} $3 == "DisplayName" ${AndIf} $4 == "$R0" StrCpy $6 1 ${EndIf} ${If} $5 == "" StrCpy $6 1 ${EndIf} ${EndWhile} ${registry::Read} "HKEY_LOCAL_MACHINE\$2" "UninstallString" $4 $5 Push $4 Push '/I' Push '/quiet /x' Call StrRep Pop $4 ${If} $2 == "" ${OrIf} $4 == "" Goto msifail ${EndIf} ExecWait '$4' msifail: ${registry::Close} $1 Pop $6 Pop $5 Pop $4 Pop $3 Pop $2 Pop $1 Pop $0 Pop $R0 EndFunction
To call the function all you need to do is this:
Push "MyOldMSIName" Call UninstallMSI