使用Python请求管理员权限(UAC)


代码转载自Stack Overflow的问答

当我们希望使用Python调用CMD命令时,有时候会遇到需要管理员权限的情况。便捷的方法是在一个具有管理员权限Shell里运行命令python example.py

但是这并不够优雅,用户需要去主动打开另一个窗口,而最好的方法是让Python自己弹出一个框来请求管理员权限。

这里转载一个Stack Overflow上的代码段,它很好的满足了这一需要

1
2
3
4
5
6
7
8
9
10
11
12
13
import ctypes, sys

def 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, " ".join(sys.argv), None, 1)

需要注意的是,如果程序员希望把这个程序打包成exe使用,需要将最后一行的sys.argv改成sys.argv[1:]

PS:如果希望在写bat文件时达到一样的效果,只需要在文件前面加入以下语句

1
%1 mshta vbscript:CreateObject("Shell.Application").ShellExecute("cmd.exe","/c ""%~s0"" ::","","runas",1)(window.close)&&exit

该内容采用 CC BY-NC-ND 4.0 许可协议,著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。