Python - 检查用户是否具有管理员权限

4 投票
4 回答
13611 浏览
提问于 2025-04-15 23:23

我正在用Python 3.x写一个小程序,作为自学项目。我的想法是让这个程序有两个文本输入框,用户可以在里面输入内容,然后把这些输入的内容放到两个特定的注册表键值里。

有没有简单的方法可以检查当前用户是否有权限访问注册表?我希望能干脆地告诉用户需要管理员权限,而不是让程序因为试图访问受限区域而崩溃。

我希望在程序启动时就进行这个检查,用户还没有任何输入选项的时候。需要什么代码来实现这个呢?

编辑:如果不明显的话,这个是针对Windows平台的。

4 个回答

4

这里有一篇简短的文章,介绍了如何判断一个应用程序是否需要提升权限

你可以使用pywin32或者ctypes来调用CreateProcess()这个函数。

我建议使用ctypes,因为它现在已经是Python的标准库了,而且这里有一个使用ctypes调用CreateProcess的好例子

7

使用 pywin32,你可以尝试下面这样的代码...:

import pythoncom
import pywintypes
import win32api
from win32com.shell import shell

if shell.IsUserAnAdmin():
   ...

而且,是的,pywin32 似乎支持 Python 3。

12

我需要一个简单的方法,能够在Windows和Posix系统上测试用户是否拥有文件系统的管理员权限,而不想安装第三方软件。我知道依赖环境变量可能会有一些安全隐患,但这对我来说是可以接受的。也许可以把这种方法扩展到读取或写入注册表。

我在WinXP、WinVista和Wine上用Python 2.6/2.7进行了测试。如果有人知道这个方法在Python 3.x和/或Win7上不适用,请告诉我。谢谢。

def has_admin():
    import os
    if os.name == 'nt':
        try:
            # only windows users with admin privileges can read the C:\windows\temp
            temp = os.listdir(os.sep.join([os.environ.get('SystemRoot','C:\\windows'),'temp']))
        except:
            return (os.environ['USERNAME'],False)
        else:
            return (os.environ['USERNAME'],True)
    else:
        if 'SUDO_USER' in os.environ and os.geteuid() == 0:
            return (os.environ['SUDO_USER'],True)
        else:
            return (os.environ['USERNAME'],False)

撰写回答