Browse Source

Merge branch 'cpack-nsis-uninstaller' into release-3.23

Merge-request: !7774
Brad King 3 years ago
parent
commit
d82e2d557e
1 changed files with 14 additions and 5 deletions
  1. 14 5
      Modules/Internal/CPack/NSIS.template.in

+ 14 - 5
Modules/Internal/CPack/NSIS.template.in

@@ -931,11 +931,20 @@ Function .onInit
 ;Run the uninstaller
 uninst:
   ClearErrors
-  StrCpy $2 $0 1
-  StrCmp '"' $2 0 +3 ; checks if string is quoted (CPack before v3.20.6 did not quote it)
-  ExecWait '$0 /S'
-  Goto +2
-  ExecWait '"$0" /S'
+  # $0 should _always_ be quoted, however older versions of CMake did not
+  # do this.  We'll conditionally remove the begin/end quotes.
+  # Remove first char if quote
+  StrCpy $2 $0 1 0      # copy first char
+  StrCmp $2 "$\"" 0 +2  # if char is quote
+  StrCpy $0 $0 "" 1     # remove first char
+  # Remove last char if quote
+  StrCpy $2 $0 1 -1     # copy last char
+  StrCmp $2 "$\"" 0 +2  # if char is quote
+  StrCpy $0 $0 -1       # remove last char
+
+  StrLen $2 "\@[email protected]"
+  StrCpy $3 $0 -$2 # remove "\@[email protected]" from UninstallString to get path
+  ExecWait '"$0" /S _?=$3' ;Do not copy the uninstaller to a temp file
 
   IfErrors uninst_failed inst
 uninst_failed: