在Python脚本中请求UAC高程?
我希望我的Python脚本在Vista上复制文件。当我从普通cmd.exe
窗口运行它时,不会生成任何错误,但不会复制文件。如果我以cmd.exe
“管理员身份”运行,然后运行我的脚本,则可以正常运行。
这是有道理的,因为用户帐户控制(UAC)通常会阻止许多文件系统操作。
我有没有办法从Python脚本中调用UAC提升请求(这些对话框中会说“诸如此类应用需要管理员访问权限,这样可以吗?”)
如果这不可能,那么我的脚本是否可以至少检测到未提升的脚本,从而可以正常地失败?
回答:
import ctypes, sysdef is_admin():
try:
return ctypes.windll.shell32.IsUserAnAdmin()
except:
return False
if is_admin():
# Code of your program here
else:
# Re-run the program with admin rights
ctypes.windll.shell32.ShellExecuteW(None, "runas", sys.executable, __file__, None, 1)
如果你使用的是Python 2.x,则应将最后一行替换为:
ctypes.windll.shell32.ShellExecuteW(None, u"runas", unicode(sys.executable), unicode(__file__), None, 1)
还要注意的是,如果你转换你的Python脚本到一个可执行文件(使用工具,如py2exe,cx_freeze,pyinstaller
),那么你应该更换第四个参数为空字符串(”“)。
这里的一些优点是:
- 不需要外部库(也不需要Python用于Windows扩展)。它仅从ctypes标准库使用。
- 适用于Python 2和Python 3。
- 无需修改文件资源或创建清单文件。
- 如果你不在if / else语句下添加代码,则该代码将永远不会执行两次。
- 如果用户拒绝UAC提示,则可以轻松地将其修改为特殊行为。
- 你可以指定参数来修改第四个参数。
- 你可以指定修改第六个参数的显示方法
以上是 在Python脚本中请求UAC高程? 的全部内容, 来源链接: utcz.com/qa/425652.html