ctypes.windll.shell32.IsUserAdmin() 在用户是管理员组时未返回1

2 投票
1 回答
4256 浏览
提问于 2025-04-17 06:07

我正在尝试使用

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是一样的。

撰写回答