我正在用Python 3.x编写一个小程序作为自学项目。 我的想法是让程序允许两个字段的文本input到用户,然后将用户的input插入两个特定registry项的值。
有没有简单的方法来检查当前用户是否可以访问registry? 我宁愿它干净地告诉用户他/她需要pipe理员权限比程序疯狂和崩溃,因为它试图访问一个禁区。
我希望在程序启动后立即进行检查,然后给用户任何input选项。 这需要什么代码?
编辑:如果不明显,这是为Windows平台。
用pywin32 ,像下面的东西应该工作…:
import pythoncom import pywintypes import win32api from win32com.shell import shell if shell.IsUserAnAdmin(): ...
是的,似乎pywin32确实支持Python 3。
我需要一个简单的Windows / Posix解决方案来测试用户是否对文件系统具有root / admin权限,而无需安装第三方解决方案。 我知道依靠环境变量存在漏洞,但它们适合我的目的。 有可能扩展这种方法来读取/写入注册表。
我在WinXP,WinVista和Wine上用Python 2.6 / 2.7测试了这个。 如果有人知道这将无法在Pyton 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)
这里有一篇关于如何确定应用程序是否需要提升权限的简短文章。
您可以使用pywin32或ctypes来执行CreateProcess()调用。
我建议ctypes,因为它现在是python的标准,并且在这里有一个很好的使用ctypes的CreateProcess的例子 。
最直接的方法是尝试在开始时更改密钥,也许是存根值 – 如果失败,则捕获错误并告诉用户。