Permalink
Browse files

All users on the computer should now get their own copy of the themes…

… folder and personal files.

[#23 state:resolved]
  • Loading branch information...
Tobbe committed Mar 17, 2009
1 parent 8cb702a commit 943e3d762c0199070f95a495501bb511e16a9288
Showing with 828 additions and 93 deletions.
  1. +40 −13 BackupPersonal.nsh
  2. +324 −0 EnumLoginUsers.nsh
  3. +137 −0 EnumerateUsers.nsh
  4. +2 −1 Evars.nsh
  5. +24 −7 HiddenSectionTheme.nsh
  6. +32 −0 IndexOf.nsh
  7. +30 −5 LOSI.nsi
  8. +4 −4 LanguageStrings.nsh
  9. +84 −14 SectionCore.nsh
  10. +31 −19 SectionLOSI.nsh
  11. +22 −5 SectionTheme.nsh
  12. +98 −25 Uninstaller.nsh
View
@@ -1,15 +1,42 @@
+!include LogicLib.nsh
+
Function backupPersonal
- IfFileExists "$whereprofiles\personal\personal.rc" 0 end
-
- ; We got here, that means there are old personal files
- ; that we maybe should back up...
-
- MessageBox MB_ICONQUESTION|MB_YESNO|MB_DEFBUTTON1 $(BACKUP_PERSONAL) IDNO end
-
- CreateDirectory "$whereprofiles\personal\backup"
- CopyFiles "$whereprofiles\personal\*" "$whereprofiles\personal\backup\"
-
- MessageBox MB_OK $(BACKUP_DONE)
-
-end:
+ Push $0
+ Push $1
+ Push $2
+ Push $3
+
+ StrCpy $3 "not_asked"
+
+ ${whereprofilesarray->SizeOf} $R1 $R2 $R3
+ IntOp $0 $R3 - 1
+
+ ${For} $1 0 $0 ; $1 from 0 to size-1
+ ${whereprofilesarray->Read} $2 $1
+
+ ${If} ${FileExists} "$2\personal\personal.rc"
+
+ ; We got here, that means there are old personal files
+ ; that we maybe should backup...
+
+ ${If} $3 == "not_asked"
+ MessageBox MB_ICONQUESTION|MB_YESNO|MB_DEFBUTTON1 $(BACKUP_PERSONAL) IDNO end
+ StrCpy $3 "asked"
+ ${EndIf}
+
+ CreateDirectory "$2\personal\backup"
+ CopyFiles "$2\personal\*" "$2\personal\backup\"
+
+ StrCpy $langWhereProfiles $2
+
+ MessageBox MB_OK $(BACKUP_DONE)
+ ${EndIf}
+ ${Next}
+
+ end:
+
+ Pop $3
+ Pop $2
+ Pop $1
+ Pop $0
FunctionEnd
View
@@ -0,0 +1,324 @@
+!ifndef ENUM_LOGIN_USERS_NSH
+!define ENUM_LOGIN_USERS_NSH
+
+!include EnumerateUsers.nsh
+!include LogicLib.nsh
+!include IndexOf.nsh
+!include NSISArray.nsh
+
+${Array} EnumLoginUsersArray 5 ${NSIS_MAX_STRLEN}
+${ArrayFunc} Read
+${ArrayFunc} Write
+${ArrayFunc} Shift
+${ArrayFunc} SizeOf
+${ArrayFunc} Swap
+${ArrayFunc} Debug
+
+Function EnumLoginUsers
+ Push $0 ; Array name -- not used
+ Push $1 ; General return values
+ Push $2 ; Temp
+ Push $3 ; Temp
+ Push $4 ; Added user
+ Push $5
+ Push $6 ; Array index
+ Push $7 ; Number of users
+ Push $8 ; For loop counter
+ Push $9 ; User name
+
+ ; Done elsewhere ${EnumLoginUsersArray->Init}
+
+ StrCpy $6 0 ; Initialize array index
+ StrCpy $4 "FALSE" ; Initialize Added user value
+
+ ${EnumerateUsers} ""
+
+ ${EnumerateUsersArray->SizeOf} $1 $1 $1
+ IntOp $7 $1 - 1
+ ${For} $8 0 $7 ; $8 from 0 to size-1
+ StrCpy $4 "FALSE" ; Reset Added user value
+
+ ;NSISArray::Read /NOUNLOAD EnumLoginUsersUserArray $8
+ ;Pop $9 ; Store user name in $9
+ ${EnumerateUsersArray->Read} $9 $8
+
+ UserMgr::GetLocalizedStdAccountName "S-1-5-32-544" ; Administrators
+ Pop $1
+
+ ; Save everything to the right of the last backslash
+ ${RIndexOf} $2 $1 "\"
+ StrLen $3 $1
+ IntOp $3 $3 - $2
+ IntOp $3 $3 + 1
+ StrCpy $1 $1 "" $3
+
+ UserMgr::IsMemberOfGroup "$9" "$1" ; Is the user in the Administrators group?
+ Pop $1
+
+ ${If} $1 == "TRUE"
+ UserMgr::HasPrivilege "$9" "SeDenyInteractiveLogonRight"
+ Pop $1
+
+ ${If} $1 != "TRUE"
+ ;NSISArray::Write /NOUNLOAD $0 $6 "$9"
+ ${EnumLoginUsersArray->Write} $6 "$9"
+ IntOp $6 $6 + 1
+ ${EndIf}
+
+ StrCpy $4 "TRUE"
+ ${EndIf}
+
+ ${If} $4 == "FALSE"
+ UserMgr::GetLocalizedStdAccountName "S-1-5-32-545" ; Users
+ Pop $1
+
+ ; Save everything to the right of the last backslash
+ ${RIndexOf} $2 $1 "\"
+ StrLen $3 $1
+ IntOp $3 $3 - $2
+ IntOp $3 $3 + 1
+ StrCpy $1 $1 "" $3
+
+ UserMgr::IsMemberOfGroup "$9" "$1" ; Is the user in the Users group?
+ Pop $1
+
+ ${If} $1 == "TRUE"
+ UserMgr::HasPrivilege "$9" "SeDenyInteractiveLogonRight"
+ Pop $1
+
+ ${If} $1 != "TRUE"
+ ;NSISArray::Write /NOUNLOAD $0 $6 "$9"
+ ${EnumLoginUsersArray->Write} $6 "$9"
+ IntOp $6 $6 + 1
+ ${EndIf}
+
+ StrCpy $4 "TRUE"
+ ${EndIf}
+ ${EndIf}
+
+ ${If} $4 == "FALSE"
+ UserMgr::GetLocalizedStdAccountName "S-1-5-32-547" ; Power users
+ Pop $1
+
+ ; Save everything to the right of the last backslash
+ ${RIndexOf} $2 $1 "\"
+ StrLen $3 $1
+ IntOp $3 $3 - $2
+ IntOp $3 $3 + 1
+ StrCpy $1 $1 "" $3
+
+ UserMgr::IsMemberOfGroup "$9" "$1" ; Is the user in the Power users group?
+ Pop $1
+
+ ${If} $1 == "TRUE"
+ UserMgr::HasPrivilege "$9" "SeDenyInteractiveLogonRight"
+ Pop $1
+
+ ${If} $1 != "TRUE"
+ ;NSISArray::Write /NOUNLOAD $0 $6 "$9"
+ ${EnumLoginUsersArray->Write} $6 "$9"
+ IntOp $6 $6 + 1
+ ${EndIf}
+
+ StrCpy $4 "TRUE"
+ ${EndIf}
+ ${EndIf}
+ ${Next}
+
+
+ ; Move the name of the currently logged in used
+ ; to the start of the array
+
+ UserMgr::GetCurrentUserName
+ Pop $1
+
+ ${EnumLoginUsersArray->SizeOf} $2 $2 $2
+ IntOp $7 $2 - 1
+ StrCpy $3 -1
+ ${For} $8 0 $7 ; $8 from 0 to size-1
+ ${EnumLoginUsersArray->Read} $9 $8
+
+ ${If} $9 == $1
+ StrCpy $3 $8
+ IntOp $8 $7 + 1 ; End loop
+ ${EndIf}
+ ${Next}
+
+ ;NSISArray::Swap /NOUNLOAD $0 0 $3
+ ${EnumLoginUsersArray->Swap} 0 $3
+
+ Pop $9
+ Pop $8
+ Pop $7
+ Pop $6
+ Pop $5
+ Pop $4
+ Pop $3
+ Pop $2
+ Pop $1
+ Pop $0
+FunctionEnd
+
+!macro EnumLoginUsers
+ Call EnumLoginUsers
+!macroend
+
+!define EnumLoginUsers "!insertmacro EnumLoginUsers"
+
+
+
+${Array} un.EnumLoginUsersArray 5 ${NSIS_MAX_STRLEN}
+${ArrayFunc} Read
+${ArrayFunc} Write
+${ArrayFunc} Shift
+${ArrayFunc} SizeOf
+${ArrayFunc} Swap
+
+Function un.EnumLoginUsers
+ Push $0 ; Array name -- not used
+ Push $1 ; General return values
+ Push $2 ; Temp
+ Push $3 ; Temp
+ Push $4 ; Added user
+ Push $5
+ Push $6 ; Array index
+ Push $7 ; Number of users
+ Push $8 ; For loop counter
+ Push $9 ; User name
+
+ ${un.EnumLoginUsersArray->Init}
+
+ StrCpy $6 0 ; Initialize array index
+ StrCpy $4 "FALSE" ; Initialize Added user value
+
+ ${un.EnumerateUsers} ""
+
+ ${un.EnumerateUsersArray->SizeOf} $1 $1 $1
+ IntOp $7 $1 - 1
+ ${For} $8 0 $7 ; $8 from 0 to size-1
+ StrCpy $4 "FALSE" ; Reset Added user value
+
+ ;NSISArray::Read /NOUNLOAD EnumLoginUsersUserArray $8
+ ;Pop $9 ; Store user name in $9
+ ${un.EnumerateUsersArray->Read} $9 $8
+
+ UserMgr::GetLocalizedStdAccountName "S-1-5-32-544" ; Administrators
+ Pop $1
+
+ ; Save everything to the right of the last backslash
+ ${un.RIndexOf} $2 $1 "\"
+ StrLen $3 $1
+ IntOp $3 $3 - $2
+ IntOp $3 $3 + 1
+ StrCpy $1 $1 "" $3
+
+ UserMgr::IsMemberOfGroup "$9" "$1" ; Is the user in the Administrators group?
+ Pop $1
+
+ ${If} $1 == "TRUE"
+ UserMgr::HasPrivilege "$9" "SeDenyInteractiveLogonRight"
+ Pop $1
+
+ ${If} $1 != "TRUE"
+ ${un.EnumLoginUsersArray->Write} $6 "$9"
+ IntOp $6 $6 + 1
+ ${EndIf}
+
+ StrCpy $4 "TRUE"
+ ${EndIf}
+
+ ${If} $4 == "FALSE"
+ UserMgr::GetLocalizedStdAccountName "S-1-5-32-545" ; Users
+ Pop $1
+
+ ; Save everything to the right of the last backslash
+ ${un.RIndexOf} $2 $1 "\"
+ StrLen $3 $1
+ IntOp $3 $3 - $2
+ IntOp $3 $3 + 1
+ StrCpy $1 $1 "" $3
+
+ UserMgr::IsMemberOfGroup "$9" "$1" ; Is the user in the Users group?
+ Pop $1
+
+ ${If} $1 == "TRUE"
+ UserMgr::HasPrivilege "$9" "SeDenyInteractiveLogonRight"
+ Pop $1
+
+ ${If} $1 != "TRUE"
+ ${un.EnumLoginUsersArray->Write} $6 "$9"
+ IntOp $6 $6 + 1
+ ${EndIf}
+
+ StrCpy $4 "TRUE"
+ ${EndIf}
+ ${EndIf}
+
+ ${If} $4 == "FALSE"
+ UserMgr::GetLocalizedStdAccountName "S-1-5-32-547" ; Power users
+ Pop $1
+
+ ; Save everything to the right of the last backslash
+ ${un.RIndexOf} $2 $1 "\"
+ StrLen $3 $1
+ IntOp $3 $3 - $2
+ IntOp $3 $3 + 1
+ StrCpy $1 $1 "" $3
+
+ UserMgr::IsMemberOfGroup "$9" "$1" ; Is the user in the Power users group?
+ Pop $1
+
+ ${If} $1 == "TRUE"
+ UserMgr::HasPrivilege "$9" "SeDenyInteractiveLogonRight"
+ Pop $1
+
+ ${If} $1 != "TRUE"
+ ${un.EnumLoginUsersArray->Write} $6 "$9"
+ IntOp $6 $6 + 1
+ ${EndIf}
+
+ StrCpy $4 "TRUE"
+ ${EndIf}
+ ${EndIf}
+ ${Next}
+
+
+ ; Move the name of the currently logged in used
+ ; to the start of the array
+
+ UserMgr::GetCurrentUserName
+ Pop $1
+
+ ${un.EnumLoginUsersArray->SizeOf} $2 $2 $2
+ IntOp $7 $2 - 1
+ StrCpy $3 -1
+ ${For} $8 0 $7 ; $8 from 0 to size-1
+ ${un.EnumLoginUsersArray->Read} $9 $8
+
+ ${If} $9 == $1
+ StrCpy $3 $8
+ IntOp $8 $7 + 1 ; End loop
+ ${EndIf}
+ ${Next}
+
+ ${un.EnumLoginUsersArray->Swap} 0 $3
+
+ Pop $9
+ Pop $8
+ Pop $7
+ Pop $6
+ Pop $5
+ Pop $4
+ Pop $3
+ Pop $2
+ Pop $1
+ Pop $0
+FunctionEnd
+
+!macro un.EnumLoginUsers
+ Call un.EnumLoginUsers
+!macroend
+
+!define un.EnumLoginUsers "!insertmacro un.EnumLoginUsers"
+
+!endif
Oops, something went wrong.

0 comments on commit 943e3d7

Please sign in to comment.