diff --git a/win/NSIS.template.in b/win/NSIS.template.in index c31488c44..8b6b142ea 100644 --- a/win/NSIS.template.in +++ b/win/NSIS.template.in @@ -470,21 +470,21 @@ FunctionEnd !insertmacro StrStr "un." Function Trim ; Added by Pelaca - Exch $R1 - Push $R2 + Exch $R1 + Push $R2 Loop: - StrCpy $R2 "$R1" 1 -1 - StrCmp "$R2" " " RTrim - StrCmp "$R2" "$\n" RTrim - StrCmp "$R2" "$\r" RTrim - StrCmp "$R2" ";" RTrim - GoTo Done + StrCpy $R2 "$R1" 1 -1 + StrCmp "$R2" " " RTrim + StrCmp "$R2" "$\n" RTrim + StrCmp "$R2" "$\r" RTrim + StrCmp "$R2" ";" RTrim + GoTo Done RTrim: - StrCpy $R1 "$R1" -1 - Goto Loop + StrCpy $R1 "$R1" -1 + Goto Loop Done: - Pop $R2 - Exch $R1 + Pop $R2 + Exch $R1 FunctionEnd Function ConditionalAddToRegistry @@ -937,11 +937,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 "\@CPACK_NSIS_UNINSTALL_NAME@.exe" + StrCpy $3 $0 -$2 # remove "\@CPACK_NSIS_UNINSTALL_NAME@.exe" from UninstallString to get path + ExecWait '"$0" /S _?=$3' ;Do not copy the uninstaller to a temp file IfErrors uninst_failed inst uninst_failed: @@ -978,7 +987,7 @@ inst: ;MessageBox MB_OK 'User "$0" is in the Admin group' StrCpy $SV_ALLUSERS "AllUsers" Goto done - StrCmp $1 "Power" 0 +4 + StrCmp $1 "Power" 0 +3 SetShellVarContext all ;MessageBox MB_OK 'User "$0" is in the Power Users group' StrCpy $SV_ALLUSERS "AllUsers"