Add update handling to installer and uninstaller
authorAndre Heinecke <aheinecke@intevation.de>
Wed, 10 Jan 2018 13:29:38 +0000 (14:29 +0100)
committerAndre Heinecke <aheinecke@intevation.de>
Wed, 10 Jan 2018 13:29:38 +0000 (14:29 +0100)
* src/gpg4win.nsi (is_update): New var.
* src/inst-gpg4win.nsi (SEC_gpg4win): Call uninstaller with is_update.
* src/inst-sections.nsi (SEC_gpa, SEC_kleopatra): Handle desktop links
depending on update.
* src/installer-finish.nsi: Don't delete desktop links on update.
* src/installer.nsi: Parse is update variable from cmd line.

--
For now this only adds proper Desktop shortcut handling. If
a user has explicitly deleted a desktop shortcut of Kleopatra
or GPA it does not add another one on update.
But in the future we could probably do more things differently
on update.

GnuPG-Bug-Id: T3729

src/gpg4win.nsi
src/inst-gpg4win.nsi
src/inst-sections.nsi
src/installer-finish.nsi
src/installer.nsi

index c12a992..c3b896a 100644 (file)
@@ -173,6 +173,7 @@ SetCompressor /SOLID lzma
 
 # Variables
 VAR is_minimal
+VAR is_update
 
 # Sections
 !include "Sections.nsh"
index dee3627..e7a8da9 100644 (file)
@@ -24,6 +24,7 @@ Section "-gpg4win" SEC_gpg4win
   SetOutPath "$INSTDIR"
   File "${BUILD_DIR}/../gpg4win-${VERSION}.tar.bz2"
 !else
+  StrCpy $is_update "0"
 # Start the slideshow.
   SetDetailsPrint none
 
@@ -48,8 +49,9 @@ Section "-gpg4win" SEC_gpg4win
   ReadRegStr $1 SHCTX "Software\Microsoft\Windows\CurrentVersion\Uninstall\GPG4Win" "InstallLocation"
   IfErrors skip_uninst 0
 
-  ExecWait '$0 /S _?=$1'
+  ExecWait '$0 /S /UPDATE=1 _?=$1'
 # Deleting here does not work?
+  StrCpy $is_update "1"
   Delete /REBOOTOK "$1\gpg4win-uninstall.exe"
   RmDir "$1"
 
index c865045..96c806f 100644 (file)
@@ -1042,6 +1042,7 @@ is_no_admin:
     SectionGetFlags ${SEC_gpa} $R0
     IntOp $R0 $R0 & ${SF_SELECTED}
     IntCmp $R0 ${SF_SELECTED} 0 no_gpa_desktop
+    StrCmp $is_update '1' no_gpa_desktop
     CreateShortCut "$DESKTOP\GPA.lnk" \
        "$INSTDIR\bin\gpa.exe" \
         "" "" "" SW_SHOWNORMAL "" $(DESC_Menu_gpa)
@@ -1052,6 +1053,7 @@ is_no_admin:
     SectionGetFlags ${SEC_kleopatra} $R0
     IntOp $R0 $R0 & ${SF_SELECTED}
     IntCmp $R0 ${SF_SELECTED} 0 no_kleopatra_desktop
+    StrCmp $is_update '1' no_kleopatra_desktop
     CreateShortCut "$DESKTOP\Kleopatra.lnk" \
        "$INSTDIR\bin\kleopatra.exe" \
         "" "$INSTDIR\bin\kleopatra.exe" "" SW_SHOWNORMAL "" $(DESC_Menu_kleopatra)
index 69808f1..9285128 100644 (file)
@@ -235,12 +235,14 @@ is_no_admin:
   Delete "$SMPROGRAMS\Kleopatra.lnk"
 
   # Delete Desktop links.
+  StrCmp $is_update '1' no_desktop_delete
 !ifdef HAVE_PKG_GPA
   Delete "$DESKTOP\GPA.lnk"
 !endif
 !ifdef HAVE_PKG_KLEOPATRA
   Delete "$DESKTOP\Kleopatra.lnk"
 !endif
+no_desktop_delete:
 
   Delete "$INSTDIR\${PACKAGE}-uninstall.exe"
 
index 5e52c8b..1613646 100644 (file)
@@ -721,6 +721,12 @@ Function un.onInit
 !endif
   # Remove the language preference.
   !insertmacro MUI_UNGETLANGUAGE
+  StrCpy $is_update "0"
+  ${un.GetParameters} $R0
+  ClearErrors
+  ${un.GetOptions} $R0 /UPDATE= $R1
+  IfErrors +2
+  StrCpy $is_update "1"
 FunctionEnd
 
 # This must be in a central place.  Urgs.