本篇文章属于《518抽奖软件开发日志》系列文章的一部分。 我在开发《518抽奖软件》(www.518cj.net)的时候,NSIS安装包脚本里,需要判断当前是否管理员权限运行,代码如下。
- Function IsUserAdmin
- Push $R0
- Push $R1
- Push $R2
- ClearErrors
- UserInfo::GetName
- IfErrors Win9x
- Pop $R1
- UserInfo::GetAccountType
- Pop $R2
- StrCmp $R2 "Admin" 0 Continue
- ; Observation: I get here when running Win98SE. (Lilla)
- ; The functions UserInfo.dll looks for are there on Win98 too,
- ; but just don't work. So UserInfo.dll, knowing that admin isn't required
- ; on Win98, returns admin anyway. (per kichik)
- ; MessageBox MB_OK 'User "$R1" is in the Administrators group'
- StrCpy $R0 "true"
- Goto Done
- Continue:
- ; You should still check for an empty string because the functions
- ; UserInfo.dll looks for may not be present on Windows 95. (per kichik)
- StrCmp $R2 "" Win9x
- StrCpy $R0 "false"
- ;MessageBox MB_OK 'User "$R1" is in the "$R2" group'
- Goto Done
- Win9x:
- ; comment/message below is by UserInfo.nsi author:
- ; This one means you don't need to care about admin or
- ; not admin because Windows 9x doesn't either
- ;MessageBox MB_OK "Error! This DLL can't run under Windows 9x!"
- StrCpy $R0 "true"
- Done:
- ;MessageBox MB_OK 'User= "$R1" AccountType= "$R2" IsUserAdmin= "$R0"'
- Pop $R2
- Pop $R1
- Exch $R0
- FunctionEnd
Copy the Code
|