pcsx2/nsis/IsUserAdmin.nsi

60 lines
1.7 KiB
Plaintext

Function IsUserAdmin
ClearErrors
UserInfo::GetName
IfErrors Win9x
Pop $0
UserInfo::GetAccountType
Pop $1
# GetOriginalAccountType will check the tokens of the original user of the
# current thread/process. If the user tokens were elevated or limited for
# this process, GetOriginalAccountType will return the non-restricted
# account type.
# On Vista with UAC, for example, this is not the same value when running
# with `RequestExecutionLevel user`. GetOriginalAccountType will return
# "admin" while GetAccountType will return "user".
UserInfo::GetOriginalAccountType
Pop $2
; Windows9x can sometimes return empty strings...
StrCmp $1 "" 0 +2
Goto Win9x
StrCmp $1 "Admin" 0 +3
DetailPrint '(UAC) User "$0" is in the Administrators group'
Goto done
StrCmp $1 "Power" 0 +3
DetailPrint '(UAC) User "$0" is in the Power Users group'
Goto done
StrCmp $1 "User" 0 +3
DetailPrint '(UAC) User "$0" is just a regular user'
Goto done
StrCmp $1 "Guest" 0 +3
; Guest account? Probably doomed to failure, but might as well try, just in case some shit
; is being mis-reported.
DetailPrint '(UAC) User "$0" is a guest -- this installer is probably going to fail. Good luck.'
Goto done
;MessageBox MB_OK "Unknown error while trying to detect "
DetailPrint "(UAC) Unknown error while trying to detect account type; assuming USER mode."
StrCpy $1 "User"
Goto done
Win9x:
# This one means you don't need to care about admin or
# not admin because Windows 9x doesn't either
MessageBox MB_OK "Error! PCSX2 requires Windows 2000 or newer to install and run!"
Quit
done:
; How to return the admin modeas a variable? NSIS confuses me -- air
;Exch $R0
FunctionEnd