ctypes.windll.shell32.IsUserAdmin() 在用户是管理员组时未返回1
我正在尝试使用
ctypes.windll.shell32.IsUserAdmin()
来判断当前运行的程序是否是由管理员组的用户启动的,但我得到的结果有时不一致,有时还不正确。
在一台安装了Windows 7专业版的电脑上,当我以一个不是管理员但属于管理员组的用户身份登录时,我得到的结果是
>>> ctypes.windll.shell32.IsUserAnAdmin()
0
但这个用户确实在管理员组里。
而在一台Windows Server 2008的机器上,当我以管理员身份登录时,我得到了预期的结果;
>>> ctypes.windll.shell32.IsUserAnAdmin()
1
有没有人知道为什么我在Windows 7的电脑上得到的结果是0,即使这个用户在管理员组里?
- 我在想这个问题是否可能是因为本地管理员和域管理员/组之间的某种互动造成的,但我对此的了解实在有限……
谢谢,
Matt。
1 个回答
11
这就是用户帐户控制(UAC)。如果你以管理员身份运行程序,你会看到你期待的行为。但是在UAC下,如果使用标准权限的用户,即使这个用户在管理员组里,他也没有管理员权限。
对于特殊的管理员用户账户,UAC是不适用的,这个特殊用户下运行的程序总是会获得更高的权限。所以你看到的区别不是操作系统的问题,而是用户的问题。你可以用Windows 7的特殊管理员账户登录,看看它的表现和服务器2008是一样的。