From 686482262a96fb24591114e8eacb1d1c4ce10ac9 Mon Sep 17 00:00:00 2001 From: Rob Norris Date: Wed, 15 Oct 2014 00:44:36 +0100 Subject: [PATCH] [WINDOWS] Various install improvements. Use common settings for HKLM/HKCU -> SHCTX Set more values for install information: . Program icon . Work out the install size . URLs . Comment (with translations) Return to removing installed files rather than forced directory removal (as this may have bad side effects) --- win32/installer/langmacros.nsh | 2 + win32/installer/translations/english.nsh | 2 + win32/installer/translations/french.nsh | 2 + win32/installer/translations/spanish.nsh | 2 + win32/installer/viking-installer.nsi | 79 ++++++++++++++++++------ 5 files changed, 68 insertions(+), 19 deletions(-) diff --git a/win32/installer/langmacros.nsh b/win32/installer/langmacros.nsh index e4822cf6..d0029000 100644 --- a/win32/installer/langmacros.nsh +++ b/win32/installer/langmacros.nsh @@ -60,6 +60,8 @@ !insertmacro VIKING_MACRO_LANGSTRING_INSERT un.VIKING_UNINSTALL_ERROR_1 ${CUR_LANG} !insertmacro VIKING_MACRO_LANGSTRING_INSERT un.VIKING_UNINSTALL_ERROR_2 ${CUR_LANG} + !insertmacro VIKING_MACRO_LANGSTRING_INSERT VIKING_UNINSTALL_COMMENTS ${CUR_LANG} + !undef CUR_LANG !macroend diff --git a/win32/installer/translations/english.nsh b/win32/installer/translations/english.nsh index 043fc652..f8efcc11 100644 --- a/win32/installer/translations/english.nsh +++ b/win32/installer/translations/english.nsh @@ -44,3 +44,5 @@ ; Uninstall Section Prompts !insertmacro VIKING_MACRO_DEFAULT_STRING un.VIKING_UNINSTALL_ERROR_1 "The uninstaller could not find registry entries for Viking.$\rIt is likely that another user installed this application." !insertmacro VIKING_MACRO_DEFAULT_STRING un.VIKING_UNINSTALL_ERROR_2 "You do not have permission to uninstall this application." + +!insertmacro VIKING_MACRO_DEFAULT_STRING VIKING_UNINSTALL_COMMENTS "GPS data editor and analyser" diff --git a/win32/installer/translations/french.nsh b/win32/installer/translations/french.nsh index f70c4c3d..e394e9f2 100644 --- a/win32/installer/translations/french.nsh +++ b/win32/installer/translations/french.nsh @@ -45,3 +45,5 @@ ; Uninstall Section Prompts !define un.VIKING_UNINSTALL_ERROR_1 "Le programme de désinstallation n'a pas retrouvé les entrées de Viking dans la base de registres.$\rL'application a peut-être été installée par un utilisateur différent." !define un.VIKING_UNINSTALL_ERROR_2 "Vous n'avez pas les permissions pour supprimer cette application." + +!define VIKING_UNINSTALL_COMMENTS "D'édition et d'analyse de données GPS" diff --git a/win32/installer/translations/spanish.nsh b/win32/installer/translations/spanish.nsh index 4d2ef08a..cc27c48e 100644 --- a/win32/installer/translations/spanish.nsh +++ b/win32/installer/translations/spanish.nsh @@ -44,3 +44,5 @@ ; Uninstall Section Prompts !define un.VIKING_UNINSTALL_ERROR_1 "El programa de desinstalación no ha encontrado las entradas de Viking en la base de registros.$\rLa aplicación quizá haya sido instalada por un usuario distinto." !define un.VIKING_UNINSTALL_ERROR_2 "Usted no tiene los permisos necesarios para suprimir esta aplicación." + +!define VIKING_UNINSTALL_COMMENTS "Edición y de análisis de datos GPS" diff --git a/win32/installer/viking-installer.nsi b/win32/installer/viking-installer.nsi index 166c939e..3f5b5e08 100644 --- a/win32/installer/viking-installer.nsi +++ b/win32/installer/viking-installer.nsi @@ -202,6 +202,7 @@ Section -SecUninstallOldViking done: SectionEnd + ;-------------------------------- ;Viking Install Section @@ -218,28 +219,12 @@ Section $(VIKING_SECTION_TITLE) SecViking viking_hklm: WriteRegStr HKLM "${HKLM_APP_PATHS_KEY}" "" "$INSTDIR\viking.exe" WriteRegStr HKLM "${HKLM_APP_PATHS_KEY}" "Path" "$R1\bin" - WriteRegStr HKLM ${VIKING_REG_KEY} "" "$INSTDIR" - WriteRegStr HKLM ${VIKING_REG_KEY} "Version" "${VIKING_VERSION}" - WriteRegStr HKLM "${VIKING_UNINSTALL_KEY}" "DisplayName" "Viking" - WriteRegStr HKLM "${VIKING_UNINSTALL_KEY}" "DisplayVersion" "${VIKING_VERSION}" - WriteRegStr HKLM "${VIKING_UNINSTALL_KEY}" "HelpLink" "http://sourceforge.net/apps/mediawiki/viking/" - WriteRegDWORD HKLM "${VIKING_UNINSTALL_KEY}" "NoModify" 1 - WriteRegDWORD HKLM "${VIKING_UNINSTALL_KEY}" "NoRepair" 1 - WriteRegStr HKLM "${VIKING_UNINSTALL_KEY}" "UninstallString" "$INSTDIR\${VIKING_UNINST_EXE}" ; Sets scope of the desktop and Start Menu entries for all users. SetShellVarContext "all" Goto viking_install_files ;Install rights for Current User only viking_hkcu: - WriteRegStr HKCU ${VIKING_REG_KEY} "" "$INSTDIR" - WriteRegStr HKCU ${VIKING_REG_KEY} "Version" "${VIKING_VERSION}" - WriteRegStr HKCU "${VIKING_UNINSTALL_KEY}" "DisplayName" "Viking" - WriteRegStr HKCU "${VIKING_UNINSTALL_KEY}" "DisplayVersion" "${VIKING_VERSION}" - WriteRegStr HKCU "${VIKING_UNINSTALL_KEY}" "HelpLink" "http://sourceforge.net/apps/mediawiki/viking/" - WriteRegDWORD HKCU "${VIKING_UNINSTALL_KEY}" "NoModify" 1 - WriteRegDWORD HKCU "${VIKING_UNINSTALL_KEY}" "NoRepair" 1 - WriteRegStr HKCU "${VIKING_UNINSTALL_KEY}" "UninstallString" "$INSTDIR\${VIKING_UNINST_EXE}" Goto viking_install_files ;No install rights! @@ -249,7 +234,39 @@ Section $(VIKING_SECTION_TITLE) SecViking SetOutPath "$INSTDIR" SetOverwrite on - File /r .\bin\*.* + ; Common settings + WriteRegStr SHCTX ${VIKING_REG_KEY} "" "$INSTDIR" + WriteRegStr SHCTX ${VIKING_REG_KEY} "Version" "${VIKING_VERSION}" + WriteRegStr SHCTX "${VIKING_UNINSTALL_KEY}" "DisplayName" "Viking" + WriteRegStr SHCTX "${VIKING_UNINSTALL_KEY}" "DisplayVersion" "${VIKING_VERSION}" + WriteRegStr SHCTX "${VIKING_UNINSTALL_KEY}" "DisplayIcon" "$INSTDIR\viking_icon.ico" + WriteRegStr SHCTX "${VIKING_UNINSTALL_KEY}" "HelpLink" "http://sourceforge.net/p/viking/wikiallura" + WriteRegStr SHCTX "${VIKING_UNINSTALL_KEY}" "URLInfoAbout" "http://sourceforge.net/projects/viking/" + WriteRegStr SHCTX "${VIKING_UNINSTALL_KEY}" "Publisher" "The Viking developer community" + WriteRegStr SHCTX "${VIKING_UNINSTALL_KEY}" "Comments" "$(VIKING_UNINSTALL_COMMENTS)" + WriteRegDWORD SHCTX "${VIKING_UNINSTALL_KEY}" "NoModify" 1 + WriteRegDWORD SHCTX "${VIKING_UNINSTALL_KEY}" "NoRepair" 1 + WriteRegStr SHCTX "${VIKING_UNINSTALL_KEY}" "UninstallString" "$INSTDIR\${VIKING_UNINST_EXE}" + + ; Copy only specific items as now some components (e.g. GPSBabel) are optional. + ; This is mostly to get a more accurate install size value (especially as saved into the registry) + File .\bin\viking* + ; Not sure we really need any of the gtk executables but copy them anyway: + File .\bin\*.exe + File .\bin\*.dll + File .\bin\*.txt + File .\bin\magic.mgc + File /r .\bin\data + File /r .\bin\etc + File /r .\bin\gtk2-runtime + File /r .\bin\lib + File /r .\bin\locale + File /r .\bin\share + + ; Estimate install size based on files in $INSTDIR + ${GetSize} "$INSTDIR" "/S=0K" $0 $1 $2 + IntFmt $0 "0x%08X" $0 + WriteRegDWORD SHCTX "${VIKING_UNINSTALL_KEY}" "EstimatedSize" "$0" ; If we don't have install rights we're done StrCmp $R0 "NONE" done @@ -332,8 +349,32 @@ Section Uninstall cont_uninstall: - ;Simply wipe the Viking install dir - RMDir /r "$INSTDIR" + ; http://nsis.sourceforge.net/Docs/Chapter4.html + ; Don't use: + ;RMDir /r "$INSTDIR" + ; Warning: is not safe. Can delete entire Program Files directory! + + ; TODO try this method instead: + ; http://nsis.sourceforge.net/Uninstall_only_installed_files + + ; Specific remove files + ; Thus alsos leaves any files the user has saved (particularly .vik or .gpx) into the Viking directory + Delete "$INSTDIR\viking-cache.py" + Delete "$INSTDIR\viking.pdf" + Delete "$INSTDIR\viking_icon.ico" + Delete "$INSTDIR\*.exe" + Delete "$INSTDIR\*.dll" + Delete "$INSTDIR\*.txt" + Delete "$INSTDIR\magic.mgc" + Delete "$INSTDIR\data\*txt" + Delete "$INSTDIR\data\*xml" + RMDir "$INSTDIR\data" + RMDir /r "$INSTDIR\etc" + RMDir /r "$INSTDIR\gtk2-runtime" + RMDir /r "$INSTDIR\lib" + RMDir /r "$INSTDIR\locale" + RMDir /r "$INSTDIR\share" + RMDir "$INSTDIR" ; Shortcuts.. Delete "$DESKTOP\Viking.lnk" -- 2.39.5