NSIS,判断安装包是否管理员身份运行的代码

本篇文章属于《518超市播音软件开发日志》系列文章的一部分。
我在开发《518超市播音软件》(http://www.518boyin.com/)的时候,用的NSIS打包制作安装包,安装的时候,需要确保是管理员权限的,不是的话,就提示需要管理员权限运行,然后退出。

 

Function un.onInit

  Call un.IsUserAdmin

  Pop $R0

  ${If} $R0 == "false"

    MessageBox MB_ICONEXCLAMATION|MB_OK|MB_TOPMOST|MB_SETFOREGROUND "需以管理员身份运行          $\n"

    Quit

  ${EndIf}

 

 

 

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

; Usage:

;   Call IsUserAdmin

;   Pop $R0   ; at this point $R0 is "true" or "false"

;

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

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

 


上一篇:vc++无进程式线程插入穿墙技术实现


下一篇:NSIS,判断安装包是否管理员身份运行的代码