[prev in list] [next in list] [prev in thread] [next in thread] 

List:       nsis-commits
Subject:    [NSIS-commits] SF.net SVN: nsis:[7160] NSIS/trunk
From:       anders_k--- via NSIS-commits <nsis-commits () lists ! sourceforge ! net>
Date:       2020-03-24 2:01:12
Message-ID: 1585015272.587334.5326 () sfp-scm-7 ! v30 ! lw ! sourceforge ! com
[Download RAW message or body]

Revision: 7160
          http://sourceforge.net/p/nsis/code/7160
Author:   anders_k
Date:     2020-03-24 02:01:11 +0000 (Tue, 24 Mar 2020)
Log Message:
-----------
* Added MULTIUSER_INSTALLMODEPAGE_SHOWUSERNAME
* Decoupled the page from MUI
* Try FOLDERID_UserProgramFiles

Modified Paths:
--------------
    NSIS/trunk/Contrib/Language files/English.nsh
    NSIS/trunk/Contrib/MultiUser/MultiUser.nsh
    NSIS/trunk/Contrib/MultiUser/Readme.html
    NSIS/trunk/Docs/src/history.but

Modified: NSIS/trunk/Contrib/Language files/English.nsh
===================================================================
--- NSIS/trunk/Contrib/Language files/English.nsh	2020-03-18 21:27:58 UTC (rev 7159)
+++ NSIS/trunk/Contrib/Language files/English.nsh	2020-03-24 02:01:11 UTC (rev 7160)
@@ -123,7 +123,7 @@
 !ifdef MULTIUSER_INSTALLMODEPAGE
   ${LangFileString} MULTIUSER_TEXT_INSTALLMODE_TITLE "Choose Users"
   ${LangFileString} MULTIUSER_TEXT_INSTALLMODE_SUBTITLE "Choose for which users you \
                want to install $(^NameDA)."
-  ${LangFileString} MULTIUSER_INNERTEXT_INSTALLMODE_TOP "Select whether you want to \
install $(^NameDA) for yourself only or for all users of this computer. \
$(^ClickNext)" +  ${LangFileString} MULTIUSER_INNERTEXT_INSTALLMODE_TOP "Select \
whether you want to install $(^NameDA) only for yourself or for all users of this \
computer. $(^ClickNext)"  ${LangFileString} MULTIUSER_INNERTEXT_INSTALLMODE_ALLUSERS \
"Install for anyone using this computer"  ${LangFileString} \
                MULTIUSER_INNERTEXT_INSTALLMODE_CURRENTUSER "Install just for me"
 !endif

Modified: NSIS/trunk/Contrib/MultiUser/MultiUser.nsh
===================================================================
--- NSIS/trunk/Contrib/MultiUser/MultiUser.nsh	2020-03-18 21:27:58 UTC (rev 7159)
+++ NSIS/trunk/Contrib/MultiUser/MultiUser.nsh	2020-03-24 02:01:11 UTC (rev 7160)
@@ -9,9 +9,8 @@
 */
 
 !ifndef MULTIUSER_INCLUDED
-!define MULTIUSER_INCLUDED
-!verbose push
-!verbose 3
+!define MULTIUSER_INCLUDED 20200319
+!verbose push 3
 
 ;Standard NSIS header files
 
@@ -18,11 +17,16 @@
 !ifdef MULTIUSER_MUI
   !include MUI2.nsh
 !endif
-!include nsDialogs.nsh
 !include LogicLib.nsh
 !include WinVer.nsh
 !include FileFunc.nsh
 
+!if ${NSIS_PTR_SIZE} > 4
+!define /IfNDef MULTIUSER_MINWIN 0x501
+!else
+!define /IfNDef MULTIUSER_MINWIN 0x400
+!endif
+
 ;Variables
 
 Var MultiUser.Privileges
@@ -123,39 +127,46 @@
 !macro MULTIUSER_INSTALLMODE_CURRENTUSER UNINSTALLER_PREFIX UNINSTALLER_FUNCPREFIX
 
   ;Install mode initialization - per-user
-  
-  ${if} ${IsNT}  
-  
+
+  !if ${MULTIUSER_MINWIN} < 0x500
+  ${if} ${IsNT}
+  !endif
+
     StrCpy $MultiUser.InstallMode CurrentUser
-    
     SetShellVarContext current
   
     !if "${UNINSTALLER_PREFIX}" != UN
       ;Set default installation location for installer  
       !ifdef MULTIUSER_INSTALLMODE_INSTDIR
+        !if ${MULTIUSER_MINWIN} < 0x490
         ${if} ${AtLeastWin2000}
-          StrCpy $INSTDIR "$LOCALAPPDATA\${MULTIUSER_INSTALLMODE_INSTDIR}"
+        !endif
+          GetKnownFolderPath $INSTDIR {5CD7AEE2-2219-4A67-B85D-6C9CE15660CB} ; \
FOLDERID_UserProgramFiles +          StrCmp $INSTDIR "" 0 +2
+          StrCpy $INSTDIR "$LocalAppData\Programs" ; Fallback directory
+          StrCpy $INSTDIR "$INSTDIR\${MULTIUSER_INSTALLMODE_INSTDIR}"
+        !if ${MULTIUSER_MINWIN} < 0x490
         ${else}
           StrCpy $INSTDIR "$PROGRAMFILES\${MULTIUSER_INSTALLMODE_INSTDIR}"
         ${endif}
+        !endif
       !endif
     !endif
   
     !ifdef MULTIUSER_INSTALLMODE_INSTDIR_REGISTRY_KEY & \
                MULTIUSER_INSTALLMODE_INSTDIR_REGISTRY_VALUENAME
-  
       ReadRegStr $MultiUser.InstDir HKCU \
"${MULTIUSER_INSTALLMODE_INSTDIR_REGISTRY_KEY}" \
                "${MULTIUSER_INSTALLMODE_INSTDIR_REGISTRY_VALUENAME}"
-  
       ${if} $MultiUser.InstDir != ""
         StrCpy $INSTDIR $MultiUser.InstDir
       ${endif}
-  
     !endif
-  
+
     !ifdef MULTIUSER_INSTALLMODE_${UNINSTALLER_PREFIX}FUNCTION
       Call "${MULTIUSER_INSTALLMODE_${UNINSTALLER_PREFIX}FUNCTION}"
     !endif
-  
+
+  !if ${MULTIUSER_MINWIN} < 0x500
   ${endif}
+  !endif
 
 !macroend
 
@@ -203,18 +214,10 @@
     !define /ReDef MULTIUSER_TMPSTR_CAPTION "$(^Name)"
   !endif
 
-  !ifndef MULTIUSER_INIT_TEXT_ADMINREQUIRED
-    !define MULTIUSER_INIT_TEXT_ADMINREQUIRED "${MULTIUSER_TMPSTR_CAPTION} requires \
                administrator privileges."
-  !endif
+  !define /IfNDef MULTIUSER_INIT_TEXT_ADMINREQUIRED "${MULTIUSER_TMPSTR_CAPTION} \
requires administrator privileges." +  !define /IfNDef \
MULTIUSER_INIT_TEXT_POWERREQUIRED "${MULTIUSER_TMPSTR_CAPTION} requires at least \
Power User privileges." +  !define /IfNDef MULTIUSER_INIT_TEXT_ALLUSERSNOTPOSSIBLE \
"Your user account does not have sufficient privileges to install $(^Name) for all \
users of this computer."  
-  !ifndef MULTIUSER_INIT_TEXT_POWERREQUIRED
-    !define MULTIUSER_INIT_TEXT_POWERREQUIRED "${MULTIUSER_TMPSTR_CAPTION} requires \
                at least Power User privileges."
-  !endif
-
-  !ifndef MULTIUSER_INIT_TEXT_ALLUSERSNOTPOSSIBLE
-    !define MULTIUSER_INIT_TEXT_ALLUSERSNOTPOSSIBLE "Your user account does not have \
                sufficient privileges to install $(^Name) for all users of this \
                computer."
-  !endif
-
   !undef MULTIUSER_TMPSTR_CAPTION
 
 !macroend
@@ -228,7 +231,9 @@
   UserInfo::GetAccountType
   Pop $MultiUser.Privileges
   
+  !if ${MULTIUSER_MINWIN} < 0x500
   ${if} ${IsNT}
+  !endif
   
     ;Check privileges
   
@@ -324,46 +329,50 @@
   
     !endif
 
-  !if ${NSIS_PTR_SIZE} <= 4
+  !if ${MULTIUSER_MINWIN} < 0x500
   ${else}
   
     ;Not running Windows NT, per-user installation not supported
     Call ${UNINSTALLER_FUNCPREFIX}MultiUser.InstallMode.AllUsers
 
+  ${endif}
   !endif
-  ${endif}
 
 !macroend
 
 !macro MULTIUSER_INIT
-  !verbose push
-  !verbose 3
-  
-  !insertmacro MULTIUSER_INIT_CHECKS "" ""
-  
+  !verbose push 3
+  !ifdef __UNINSTALL__
+    !insertmacro MULTIUSER_UNINIT
+  !else
+    !insertmacro MULTIUSER_INIT_CHECKS "" ""
+  !endif
   !verbose pop 
 !macroend
 
 !ifndef MULTIUSER_NOUNINSTALL
-
 !macro MULTIUSER_UNINIT
-  !verbose push
-  !verbose 3
-  
+  !verbose push 3
   !insertmacro MULTIUSER_INIT_CHECKS Un un.
-  
   !verbose pop 
 !macroend
-
 !endif
 
 /*
 
-Modern UI 2 page
+Mode selection page
 
 */
 
-!ifdef MULTIUSER_MUI
+!macro MULTIUSER_PAGE_FUNCTION_CUSTOM TYPE
+  !ifmacrodef MUI_PAGE_FUNCTION_CUSTOM
+    !insertmacro MUI_PAGE_FUNCTION_CUSTOM "${TYPE}"
+  !endif
+  !ifdef MULTIUSER_PAGE_CUSTOMFUNCTION_${TYPE}
+    Call "${MULTIUSER_PAGE_CUSTOMFUNCTION_${TYPE}}"
+    !undef MULTIUSER_PAGE_CUSTOMFUNCTION_${TYPE}
+  !endif
+!macroend
 
 !macro MULTIUSER_INSTALLMODEPAGE_INTERFACE
 
@@ -375,30 +384,30 @@
     
     Var MultiUser.InstallModePage.AllUsers
     Var MultiUser.InstallModePage.CurrentUser
-    
-    Var MultiUser.InstallModePage.ReturnValue
+
   !endif
 
 !macroend
 
-!macro MULTIUSER_PAGEDECLARATION_INSTALLMODE
+!macro MULTIUSER_PAGEDECLARATION_INSTALLMODE UNPREFIX UNIQUEID
 
-  !insertmacro MUI_SET MULTIUSER_${MUI_PAGE_UNINSTALLER_PREFIX}INSTALLMODEPAGE ""
+  !define /ReDef MULTIUSER_${UNPREFIX}INSTALLMODEPAGE "" ; Unlock strings in the \
                language file(s)
   !insertmacro MULTIUSER_INSTALLMODEPAGE_INTERFACE
 
-  !insertmacro MUI_DEFAULT MULTIUSER_INSTALLMODEPAGE_TEXT_TOP \
                "$(MULTIUSER_INNERTEXT_INSTALLMODE_TOP)"
-  !insertmacro MUI_DEFAULT MULTIUSER_INSTALLMODEPAGE_TEXT_ALLUSERS \
                "$(MULTIUSER_INNERTEXT_INSTALLMODE_ALLUSERS)"
-  !insertmacro MUI_DEFAULT MULTIUSER_INSTALLMODEPAGE_TEXT_CURRENTUSER \
"$(MULTIUSER_INNERTEXT_INSTALLMODE_CURRENTUSER)"   +  !define /IfNDef \
MULTIUSER_INSTALLMODEPAGE_TEXT_TOP "$(MULTIUSER_INNERTEXT_INSTALLMODE_TOP)" +  \
!define /IfNDef MULTIUSER_INSTALLMODEPAGE_TEXT_ALLUSERS \
"$(MULTIUSER_INNERTEXT_INSTALLMODE_ALLUSERS)" +  !define /IfNDef \
MULTIUSER_INSTALLMODEPAGE_TEXT_CURRENTUSER \
"$(MULTIUSER_INNERTEXT_INSTALLMODE_CURRENTUSER)"    
   PageEx custom
 
-    PageCallbacks MultiUser.InstallModePre_${MUI_UNIQUEID} \
MultiUser.InstallModeLeave_${MUI_UNIQUEID} +    PageCallbacks \
MultiUser.InstallModePre_${UNIQUEID} MultiUser.InstallModeLeave_${UNIQUEID}  
-    Caption " "
+    !define /IfNDef MULTIUSER_INSTALLMODEPAGE_CAPTION " "
+    Caption "${MULTIUSER_INSTALLMODEPAGE_CAPTION}"
 
   PageExEnd
 
-  !insertmacro MULTIUSER_FUNCTION_INSTALLMODEPAGE \
MultiUser.InstallModePre_${MUI_UNIQUEID} MultiUser.InstallModeLeave_${MUI_UNIQUEID} + \
!insertmacro MULTIUSER_FUNCTION_INSTALLMODEPAGE MultiUser.InstallModePre_${UNIQUEID} \
MultiUser.InstallModeLeave_${UNIQUEID}  
   !undef MULTIUSER_INSTALLMODEPAGE_TEXT_TOP
   !undef MULTIUSER_INSTALLMODEPAGE_TEXT_ALLUSERS
@@ -408,18 +417,17 @@
 
 !macro MULTIUSER_PAGE_INSTALLMODE
 
-  ;Modern UI page for install mode
-
-  !verbose push
-  !verbose 3
+  !verbose push 3
   
   !ifndef MULTIUSER_EXECUTIONLEVEL_ALLUSERS
     !error "A mixed-mode installation requires MULTIUSER_EXECUTIONLEVEL to be set to \
                Admin, Power or Highest."
   !endif
+
+  !ifmacrodef MUI_PAGE_INIT
+    !insertmacro MUI_PAGE_INIT
+  !endif
+  !insertmacro MULTIUSER_PAGEDECLARATION_INSTALLMODE "" ${__COUNTER__}
   
-  !insertmacro MUI_PAGE_INIT
-  !insertmacro MULTIUSER_PAGEDECLARATION_INSTALLMODE
-  
   !verbose pop
 
 !macroend
@@ -426,34 +434,49 @@
 
 !macro MULTIUSER_FUNCTION_INSTALLMODEPAGE PRE LEAVE
 
-  ;Page functions of Modern UI page
+  !include nsDialogs.nsh
 
   Function "${PRE}"
-  
+
+    !if ${MULTIUSER_MINWIN} < 0x500
     ${ifnot} ${IsNT}
       Abort
     ${endif}
-  
+    !endif
+
     ${if} $MultiUser.Privileges != "Power"
       ${andif} $MultiUser.Privileges != "Admin"
       Abort
     ${endif}
-    
-    !insertmacro MUI_PAGE_FUNCTION_CUSTOM PRE
-    !insertmacro MUI_HEADER_TEXT_PAGE $(MULTIUSER_TEXT_INSTALLMODE_TITLE) \
                $(MULTIUSER_TEXT_INSTALLMODE_SUBTITLE)
-    
+
+    !insertmacro MULTIUSER_PAGE_FUNCTION_CUSTOM PRE
+    !ifmacrodef MUI_HEADER_TEXT_PAGE
+      !insertmacro MUI_HEADER_TEXT_PAGE $(MULTIUSER_TEXT_INSTALLMODE_TITLE) \
$(MULTIUSER_TEXT_INSTALLMODE_SUBTITLE) +    !endif
+
     nsDialogs::Create 1018
     Pop $MultiUser.InstallModePage
 
-    ${NSD_CreateLabel} 0u 0u 300u 40u "${MULTIUSER_INSTALLMODEPAGE_TEXT_TOP}"
+    ${NSD_CreateLabel} 0 2u 100% 42u "${MULTIUSER_INSTALLMODEPAGE_TEXT_TOP}"
     Pop $MultiUser.InstallModePage.Text
 
-    ${NSD_CreateRadioButton} 20u 50u 280u 10u \
"${MULTIUSER_INSTALLMODEPAGE_TEXT_ALLUSERS}" +    ${NSD_CreateRadioButton} 15u 50u \
-15u 10u "${MULTIUSER_INSTALLMODEPAGE_TEXT_ALLUSERS}"  Pop \
                $MultiUser.InstallModePage.AllUsers
-    
-    ${NSD_CreateRadioButton} 20u 70u 280u 10u \
"${MULTIUSER_INSTALLMODEPAGE_TEXT_CURRENTUSER}" +
+    !ifdef MULTIUSER_INSTALLMODEPAGE_SHOWUSERNAME
+    !ifdef NOSYSTEMCALLS
+    ReadEnvStr $0 USERNAME
+    !else
+    System::Call 'ADVAPI32::GetUserName(t""r0,*i${NSIS_MAX_STRLEN})'
+    !endif
+    StrCmp $0 "" +2
+      StrCpy $0 " ($0)"
+    ${NSD_CreateRadioButton} 15u 70u -15u 10u \
"${MULTIUSER_INSTALLMODEPAGE_TEXT_CURRENTUSER}$0" +    !else
+    ${NSD_CreateRadioButton} 15u 70u -15u 10u \
"${MULTIUSER_INSTALLMODEPAGE_TEXT_CURRENTUSER}" +    !endif
     Pop $MultiUser.InstallModePage.CurrentUser
-    
+
     ${if} $MultiUser.InstallMode == "AllUsers"
       SendMessage $MultiUser.InstallModePage.AllUsers ${BM_SETCHECK} ${BST_CHECKED} \
0  ${else}
@@ -460,27 +483,26 @@
       SendMessage $MultiUser.InstallModePage.CurrentUser ${BM_SETCHECK} \
${BST_CHECKED} 0  ${endif}
     
-    !insertmacro MUI_PAGE_FUNCTION_CUSTOM SHOW
+    !insertmacro MULTIUSER_PAGE_FUNCTION_CUSTOM SHOW
     nsDialogs::Show
-    !insertmacro MUI_PAGE_FUNCTION_CUSTOM DESTROYED
+    !insertmacro MULTIUSER_PAGE_FUNCTION_CUSTOM DESTROYED
     
   FunctionEnd
 
   Function "${LEAVE}"
-     SendMessage $MultiUser.InstallModePage.AllUsers ${BM_GETCHECK} 0 0 \
$MultiUser.InstallModePage.ReturnValue +     SendMessage \
$MultiUser.InstallModePage.AllUsers ${BM_GETCHECK} 0 0 $0  
-     ${if} $MultiUser.InstallModePage.ReturnValue = ${BST_CHECKED}
+     ${if} $0 = ${BST_CHECKED}
         Call MultiUser.InstallMode.AllUsers
      ${else}
         Call MultiUser.InstallMode.CurrentUser
      ${endif}
   
-    !insertmacro MUI_PAGE_FUNCTION_CUSTOM LEAVE
+    !insertmacro MULTIUSER_PAGE_FUNCTION_CUSTOM LEAVE
   FunctionEnd
 
 !macroend
 
-!endif
 
 !verbose pop
 !endif

Modified: NSIS/trunk/Contrib/MultiUser/Readme.html
===================================================================
--- NSIS/trunk/Contrib/MultiUser/Readme.html	2020-03-18 21:27:58 UTC (rev 7159)
+++ NSIS/trunk/Contrib/MultiUser/Readme.html	2020-03-24 02:01:11 UTC (rev 7160)
@@ -4,6 +4,9 @@
     <title>Multi-User Header File (MultiUser.nsh)</title>
     <meta http-equiv="Content-Type" content="text/html; charset=us-ascii" />
     <style type="text/css">
+        body { background-color: #fefefe; color: #050505; }
+        code { background-color: #f6f6f6; }
+        pre { background-color: inherit; }
         td
         {
             padding: 5px;
@@ -107,7 +110,7 @@
         Insert the MULTIUSER_INIT and MULTIUSER_UNINT macros in the .onInit and \
                un.onInit
         function to verify these privileges. If no uninstaller is created in the \
script,  set MULTIUSER_NOUNINSTALL.</p>
-    <blockquote>
+    <code>
         <pre>!define MULTIUSER_EXECUTIONLEVEL Highest
 ;!define MULTIUSER_NOUNINSTALL ;Uncomment if no uninstaller is created
 !include MultiUser.nsh
@@ -121,7 +124,7 @@
 Function un.onInit
   !insertmacro MULTIUSER_UNINIT
 FunctionEnd</pre>
-    </blockquote>
+    </code>
     <p>
         Whether the required privileges can be obtained depends on the user that \
starts  the installer:</p>
@@ -260,7 +263,7 @@
             installation mode. To use this page, define MULTIUSER_MUI before \
                including User.nsh.
             Then, the MULTIUSER_PAGE_INSTALLMODE macro can be used just like a \
                normal Modern
             UI page (this page will automatically be skipped when running Windows \
                95/98/Me):</p>
-        <pre>!define MULTIUSER_EXECUTIONLEVEL Highest
+        <code><pre>!define MULTIUSER_EXECUTIONLEVEL Highest
 <b>!define MULTIUSER_MUI</b>
 !define MULTIUSER_INSTALLMODE_COMMANDLINE
 !include MultiUser.nsh
@@ -281,7 +284,7 @@
 Function un.onInit
   !insertmacro MULTIUSER_UNINIT
 FunctionEnd
-</pre>
+</pre></code>
         <p>
             The MULTIUSER_INSTALLMODE_COMMANDLINE setting that also appears in this \
                example
             enables the installation mode to be set using the /AllUsers or \
/CurrentUser command @@ -291,37 +294,25 @@
             to the general Modern UI page settings):</p>
         <table>
             <tr>
-                <td>
-                    <b>Setting</b>
-                </td>
-                <td>
-                    <b>Description</b>
-                </td>
+                <td><b>Setting</b></td>
+                <td><b>Description</b></td>
             </tr>
             <tr>
-                <td>
-                    MULTIUSER_INSTALLMODEPAGE_TEXT_TOP
-                </td>
-                <td>
-                    Text to display on the top of the page.
-                </td>
+                <td>MULTIUSER_INSTALLMODEPAGE_TEXT_TOP</td>
+                <td>Text to display on the top of the page.</td>
             </tr>
             <tr>
-                <td>
-                    MULTIUSER_INSTALLMODEPAGE_TEXT_ALLUSERS
-                </td>
-                <td>
-                    Text to display on the combo button for a per-machine \
                installation.
-                </td>
+                <td>MULTIUSER_INSTALLMODEPAGE_TEXT_ALLUSERS</td>
+                <td>Text to display on the radio button for a per-machine \
installation.</td>  </tr>
             <tr>
-                <td>
-                    MULTIUSER_INSTALLMODEPAGE_TEXT_CURRENTUSER
-                </td>
-                <td>
-                    Text to display on the combo button for a per-user installation.
-                </td>
+                <td>MULTIUSER_INSTALLMODEPAGE_TEXT_CURRENTUSER</td>
+                <td>Text to display on the radio button for a per-user \
installation.</td>  </tr>
+            <tr>
+                <td>MULTIUSER_INSTALLMODEPAGE_SHOWUSERNAME</td>
+                <td>Append the username to the per-user radio button.</td>
+            </tr>
         </table>
         <h3>
             Installation Mode Initalization</h3>

Modified: NSIS/trunk/Docs/src/history.but
===================================================================
--- NSIS/trunk/Docs/src/history.but	2020-03-18 21:27:58 UTC (rev 7159)
+++ NSIS/trunk/Docs/src/history.but	2020-03-24 02:01:11 UTC (rev 7160)
@@ -20,6 +20,8 @@
 
 \# Undocumented: \b Added GetShellVarContext, IfAltRegView and GetRegView | \
Documenting these would require documenting the parameter name to number mapping  
+\b MultiUser: Fixed INSTALLMODE_FUNCTION and added INSTALLMODEPAGE_SHOWUSERNAME
+
 \H{v3.05} 3.05
 
 Released on December 15th, 2019

This was sent by the SourceForge.net collaborative development platform, the world's \
largest Open Source development site.



_______________________________________________
NSIS-commits mailing list
NSIS-commits@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/nsis-commits


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic