Skip to content

Commit e425020

Browse files
authored
feat: add custom macro for checking uninstallation results (#5712)
1 parent 0dbc956 commit e425020

File tree

2 files changed

+39
-8
lines changed

2 files changed

+39
-8
lines changed

packages/app-builder-lib/templates/nsis/include/installUtil.nsh

+36-8
Original file line numberDiff line numberDiff line change
@@ -105,6 +105,36 @@ Var /GLOBAL isTryToKeepShortcuts
105105
${endif}
106106
!macroend
107107

108+
Function handleUninstallResult
109+
Var /GLOBAL rootKey_uninstallResult
110+
Exch $rootKey_uninstallResult
111+
112+
${if} "$rootKey_uninstallResult" == "SHELL_CONTEXT"
113+
!ifmacrodef customUnInstallCheck
114+
!insertmacro customUnInstallCheck
115+
Return
116+
!endif
117+
${elseif} "$rootKey_uninstallResult" == "HKEY_CURRENT_USER"
118+
!ifmacrodef customUnInstallCheckCurrentUser
119+
!insertmacro customUnInstallCheckCurrentUser
120+
Return
121+
!endif
122+
${endif}
123+
124+
IfErrors 0 +3
125+
DetailPrint `Uninstall was not successful. Not able to launch uninstaller!`
126+
Return
127+
128+
${if} $R0 != 0
129+
DetailPrint `Uninstall was not successful. Uninstaller error code: $R0.`
130+
${endif}
131+
FunctionEnd
132+
133+
!macro handleUninstallResult ROOT_KEY
134+
Push "${ROOT_KEY}"
135+
Call handleUninstallResult
136+
!macroend
137+
108138
# http://stackoverflow.com/questions/24595887/waiting-for-nsis-uninstaller-to-finish-in-nsis-installer-either-fails-or-the-uni
109139
Function uninstallOldVersion
110140
Var /GLOBAL uninstallerFileName
@@ -116,12 +146,16 @@ Function uninstallOldVersion
116146
ClearErrors
117147
Exch $rootKey
118148

149+
Push 0
150+
Pop $R0
151+
119152
!insertmacro readReg $uninstallString "$rootKey" "${UNINSTALL_REGISTRY_KEY}" UninstallString
120153
${if} $uninstallString == ""
121154
!ifdef UNINSTALL_REGISTRY_KEY_2
122155
!insertmacro readReg $uninstallString "$rootKey" "${UNINSTALL_REGISTRY_KEY_2}" UninstallString
123156
!endif
124157
${if} $uninstallString == ""
158+
ClearErrors
125159
Goto Done
126160
${endif}
127161
${endif}
@@ -140,6 +174,7 @@ Function uninstallOldVersion
140174

141175
${if} $installationDir == ""
142176
${andIf} $uninstallerFileName == ""
177+
ClearErrors
143178
Goto Done
144179
${endif}
145180

@@ -172,17 +207,10 @@ Function uninstallOldVersion
172207
!insertmacro copyFile "$uninstallerFileName" "$uninstallerFileNameTemp"
173208

174209
ExecWait '"$uninstallerFileNameTemp" /S /KEEP_APP_DATA $0 _?=$installationDir' $R0
175-
ifErrors 0 ExecErrorHandler
210+
ifErrors 0 Done
176211
# the execution failed - might have been caused by some group policy restrictions
177212
# we try to execute the uninstaller in place
178213
ExecWait '"$uninstallerFileName" /S /KEEP_APP_DATA $0 _?=$installationDir' $R0
179-
ifErrors 0 ExecErrorHandler
180-
# this also failed...
181-
DetailPrint `Aborting, uninstall was not successful. Not able to launch uninstaller!`
182-
ExecErrorHandler:
183-
${if} $R0 != 0
184-
DetailPrint `Aborting, uninstall was not successful. Uninstaller error code: $R0.`
185-
${endif}
186214
Done:
187215
FunctionEnd
188216

packages/app-builder-lib/templates/nsis/installSection.nsh

+3
Original file line numberDiff line numberDiff line change
@@ -47,8 +47,11 @@ ${if} $isTryToKeepShortcuts == "true"
4747
${endif}
4848

4949
!insertmacro uninstallOldVersion SHELL_CONTEXT
50+
!insertmacro handleUninstallResult SHELL_CONTEXT
51+
5052
${if} $installMode == "all"
5153
!insertmacro uninstallOldVersion HKEY_CURRENT_USER
54+
!insertmacro handleUninstallResult HKEY_CURRENT_USER
5255
${endIf}
5356

5457
SetOutPath $INSTDIR

0 commit comments

Comments
 (0)