[Pkg-owncloud-commits] [owncloud-client] 361/498: NSIS: Fix NSIS error handling

Sandro Knauß hefee-guest at moszumanska.debian.org
Tue Aug 11 14:49:06 UTC 2015


This is an automated email from the git hooks/post-receive script.

hefee-guest pushed a commit to branch master
in repository owncloud-client.

commit b9edc6498279a4d4773fd2e84e604cdac8dd5854
Author: Daniel Molkentin <danimo at owncloud.com>
Date:   Fri Jun 5 08:43:16 2015 +0200

    NSIS: Fix NSIS error handling
---
 admin/win/nsi/l10n/English.nsh          |  1 +
 admin/win/nsi/l10n/declarations.nsh     |  1 +
 admin/win/nsi/l10n/pofiles/messages.pot |  4 ++
 cmake/modules/NSIS.template.in          | 78 +++++++++++++++++----------------
 4 files changed, 46 insertions(+), 38 deletions(-)

diff --git a/admin/win/nsi/l10n/English.nsh b/admin/win/nsi/l10n/English.nsh
index 5f7b613..e0140e6 100644
--- a/admin/win/nsi/l10n/English.nsh
+++ b/admin/win/nsi/l10n/English.nsh
@@ -37,5 +37,6 @@ StrCpy $UAC_ERROR_ELEVATE "Unable to elevate, error:"
 StrCpy $UAC_INSTALLER_REQUIRE_ADMIN "This installer requires admin access, try again"
 StrCpy $INIT_INSTALLER_RUNNING "The installer is already running."
 StrCpy $UAC_UNINSTALLER_REQUIRE_ADMIN "This uninstaller requires admin access, try again"
+StrCpy $UAC_ERROR_LOGON_SERVICE "Logon service is not running, aborting!"
 StrCpy $INIT_UNINSTALLER_RUNNING "The uninstaller is already running."
 StrCpy $SectionGroup_Shortcuts "Shortcuts"
diff --git a/admin/win/nsi/l10n/declarations.nsh b/admin/win/nsi/l10n/declarations.nsh
index 8709a6c..042f3c8 100644
--- a/admin/win/nsi/l10n/declarations.nsh
+++ b/admin/win/nsi/l10n/declarations.nsh
@@ -37,5 +37,6 @@ Var UAC_ERROR_ELEVATE
 Var UAC_INSTALLER_REQUIRE_ADMIN
 Var INIT_INSTALLER_RUNNING
 Var UAC_UNINSTALLER_REQUIRE_ADMIN
+Var UAC_ERROR_LOGON_SERVICE
 Var INIT_UNINSTALLER_RUNNING
 Var SectionGroup_Shortcuts
diff --git a/admin/win/nsi/l10n/pofiles/messages.pot b/admin/win/nsi/l10n/pofiles/messages.pot
index 1e6d24d..0d9a722 100644
--- a/admin/win/nsi/l10n/pofiles/messages.pot
+++ b/admin/win/nsi/l10n/pofiles/messages.pot
@@ -180,6 +180,10 @@ msgstr "The installer is already running."
 msgid "This uninstaller requires admin access, try again"
 msgstr "This uninstaller requires admin access, try again"
 
+#. UAC_ERROR_LOGON_SERVICE
+msgid "Logon service is not running, aborting!"
+msgstr "Logon service is not running, aborting!"
+
 #. INIT_UNINSTALLER_RUNNING
 msgid "The uninstaller is already running."
 msgstr "The uninstaller is already running."
diff --git a/cmake/modules/NSIS.template.in b/cmake/modules/NSIS.template.in
index 260f6d6..9da9662 100644
--- a/cmake/modules/NSIS.template.in
+++ b/cmake/modules/NSIS.template.in
@@ -719,25 +719,26 @@ Function .onInit
 
    ${MementoSectionRestore}
 
-   UAC_Elevate:
-      !insertmacro UAC_RunElevated
-      StrCmp 1223 $0 UAC_ElevationAborted ; UAC dialog aborted by user?
-      StrCmp 0 $0 0 UAC_Err ; Error?
-      StrCmp 1 $1 0 UAC_Success ;Are we the real deal or just the wrapper?
-      Quit
-
-   UAC_Err:
-      MessageBox MB_ICONSTOP "$UAC_ERROR_ELEVATE $0"
-      Abort
-
-   UAC_ElevationAborted:
-      Abort
-
-   UAC_Success:
-      StrCmp 1 $3 +4 ;Admin?
-      StrCmp 3 $1 0 UAC_ElevationAborted ;Try again?
-      MessageBox MB_ICONSTOP $UAC_INSTALLER_REQUIRE_ADMIN
-      goto UAC_Elevate
+   UAC_TryAgain:
+      ${Switch} $0
+      ${Case} 0
+          ${IfThen} $1 = 1 ${|} Quit ${|} ;we are the outer process, the inner process has done its work, we are done
+          ${IfThen} $3 <> 0 ${|} ${Break} ${|} ;we are admin, let the show go on
+          ${If} $1 = 3 ;RunAs completed successfully, but with a non-admin user
+             MessageBox mb_YesNo|mb_ICONEXCLAMATION|MB_TOPMOST|MB_SETFOREGROUND $UAC_INSTALLER_REQUIRE_ADMIN /SD IDNO IDYES UAC_TryAgain IDNO 0
+          ${EndIf}
+          ;fall-through and die
+      ${Case} 1223
+         MessageBox MB_ICONSTOP|MB_TOPMOST|MB_SETFOREGROUND $UAC_INSTALLER_REQUIRE_ADMIN
+         Quit
+      ${Case} 1062
+         MessageBox MB_ICONSTOP|MB_TOPMOST|MB_SETFOREGROUND $UAC_ERROR_LOGON_SERVICE
+         Quit
+      ${Default}
+         MessageBox MB_ICONSTOP "$UAC_ERROR_ELEVATE $0"
+         Abort
+         Quit
+      ${EndSwitch}
 
    ;Prevent multiple instances.
    System::Call 'kernel32::CreateMutexA(i 0, i 0, t "${APPLICATION_SHORTNAME}Installer") i .r1 ?e'
@@ -782,25 +783,26 @@ FunctionEnd
 Function un.onInit
    Call un.SetLang
 
-   UAC_Elevate:
-      !insertmacro UAC_RunElevated
-      StrCmp 1223 $0 UAC_ElevationAborted ; UAC dialog aborted by user?
-      StrCmp 0 $0 0 UAC_Err ; Error?
-      StrCmp 1 $1 0 UAC_Success ;Are we the real deal or just the wrapper?
-      Quit
-
-   UAC_Err:
-      MessageBox MB_ICONSTOP "$UAC_ERROR_ELEVATE $0"
-      Abort
-
-   UAC_ElevationAborted:
-      Abort
-
-   UAC_Success:
-      StrCmp 1 $3 +4 ;Admin?
-      StrCmp 3 $1 0 UAC_ElevationAborted ;Try again?
-      MessageBox MB_ICONSTOP $UAC_UNINSTALLER_REQUIRE_ADMIN
-      goto UAC_Elevate
+   UAC_TryAgain:
+      ${Switch} $0
+      ${Case} 0
+          ${IfThen} $1 = 1 ${|} Quit ${|} ;we are the outer process, the inner process has done its work, we are done
+          ${IfThen} $3 <> 0 ${|} ${Break} ${|} ;we are admin, let the show go on
+          ${If} $1 = 3 ;RunAs completed successfully, but with a non-admin user
+             MessageBox mb_YesNo|mb_ICONEXCLAMATION|MB_TOPMOST|MB_SETFOREGROUND $UAC_UNINSTALLER_REQUIRE_ADMIN /SD IDNO IDYES UAC_TryAgain IDNO 0
+          ${EndIf}
+          ;fall-through and die
+      ${Case} 1223
+         MessageBox MB_ICONSTOP|MB_TOPMOST|MB_SETFOREGROUND $UAC_UNINSTALLER_REQUIRE_ADMIN
+         Quit
+      ${Case} 1062
+         MessageBox MB_ICONSTOP|MB_TOPMOST|MB_SETFOREGROUND $UAC_ERROR_LOGON_SERVICE
+         Quit
+      ${Default}
+         MessageBox MB_ICONSTOP "$UAC_ERROR_ELEVATE $0"
+         Abort
+         Quit
+      ${EndSwitch}
 
    ;Prevent multiple instances.
    System::Call 'kernel32::CreateMutexA(i 0, i 0, t "${APPLICATION_SHORTNAME}Uninstaller") i .r1 ?e'

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-owncloud/owncloud-client.git



More information about the Pkg-owncloud-commits mailing list