From 9c2ea2c320ffa235777c85e0e9fd5e4002873ac0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Enrico=20Tr=C3=B6ger?= Date: Sun, 14 Apr 2024 13:51:54 +0200 Subject: [PATCH] Windows installer: Prefer Geany installation directory over user's HOME If no explicit installation directory was specified and an existing, Geany installation was found, then use its installation directory. Closes #1321. --- build/geany-plugins.nsi | 25 ++++++++++++++----------- 1 file changed, 14 insertions(+), 11 deletions(-) diff --git a/build/geany-plugins.nsi b/build/geany-plugins.nsi index cee98b3f2..87f829f1b 100644 --- a/build/geany-plugins.nsi +++ b/build/geany-plugins.nsi @@ -73,7 +73,7 @@ ManifestSupportedOS all OutFile "${GEANY_PLUGINS_INSTALLER_NAME}" -Var Answer +Var UserIsAdmin Var UserName Var GEANY_INSTDIR Var UNINSTDIR @@ -154,7 +154,7 @@ SectionEnd Section -Post WriteUninstaller "$INSTDIR\uninst-plugins.exe" WriteRegStr SHCTX "${PRODUCT_DIR_REGKEY}" Path "$INSTDIR" - ${if} $Answer == "yes" ; if user is admin + ${if} $UserIsAdmin == "yes" WriteRegStr SHCTX "${PRODUCT_UNINST_KEY}" "DisplayName" "$(^Name)" WriteRegStr SHCTX "${PRODUCT_UNINST_KEY}" "UninstallString" "$INSTDIR\uninst-plugins.exe" WriteRegStr SHCTX "${PRODUCT_UNINST_KEY}" "DisplayIcon" "$INSTDIR\bin\Geany.exe" @@ -376,16 +376,13 @@ FunctionEnd Function .onInit ; (from http://jabref.svn.sourceforge.net/viewvc/jabref/trunk/jabref/src/windows/nsis/setup.nsi) ; If the user does *not* have administrator privileges, abort - StrCpy $Answer "" + StrCpy $UserIsAdmin "" StrCpy $UserName "" - !insertmacro IsUserAdmin $Answer $UserName ; macro from LyXUtils.nsh - ${if} $Answer == "yes" + !insertmacro IsUserAdmin $UserIsAdmin $UserName ; macro from LyXUtils.nsh + ${if} $UserIsAdmin == "yes" SetShellVarContext all ; set that e.g. shortcuts will be created for all users ${else} SetShellVarContext current - ; TODO is this really what we want? $PROGRAMFILES is not much better because - ; probably the unprivileged user can't write it anyways - StrCpy $INSTDIR "$PROFILE\$(^Name)" ${endif} ; prevent running multiple instances of the installer @@ -401,6 +398,12 @@ Function .onInit StrCpy $INSTDIR "$GEANY_INSTDIR" ${EndIf} + ; if $INSTDIR has not been set yet above, set it to the profile directory for non-admin users + ${If} $INSTDIR == "" + ${AndIf} $UserIsAdmin != "yes" + StrCpy $INSTDIR "$PROFILE\$(^Name)" + ${EndIf} + ; warn about a new install over an existing installation ReadRegStr $R0 SHCTX "${PRODUCT_UNINST_KEY}" "UninstallString" StrCmp $R0 "" finish @@ -431,9 +434,9 @@ FunctionEnd Function un.onInit ; If the user does *not* have administrator privileges, abort - StrCpy $Answer "" - !insertmacro IsUserAdmin $Answer $UserName - ${if} $Answer == "yes" + StrCpy $UserIsAdmin "" + !insertmacro IsUserAdmin $UserIsAdmin $UserName + ${if} $UserIsAdmin == "yes" SetShellVarContext all ${else} ; check if the Geany has been installed with admin permisions