Windows Python 脚本运行时自动请求管理员权限
写注册表、改系统目录、装驱动时需要管理员权限。可以在脚本启动时自检,并在必要时触发 UAC 提权。
脚本内提权
import ctypes, os, sys
def is_admin() -> bool:
try: return bool(ctypes.windll.shell32.IsUserAnAdmin())
except Exception: return False
def run_as_admin() -> None:
script = os.path.abspath(sys.argv[0])
params = " ".join(f'"{arg}"' for arg in sys.argv[1:])
ctypes.windll.shell32.ShellExecuteW(None, "runas", sys.executable, f'"{script}" {params}', None, 1)
def main():
print("以管理员权限执行业务逻辑")
if __name__ == "__main__":
if not is_admin():
print("权限不足,尝试提权重启...")
run_as_admin(); sys.exit(0)
main()
打包时直接要 UAC
pyinstaller -F -w --uac-admin main_script.py
注意
- 提权会弹 UAC,用户点否就会失败,要有提示。
- 提权后旧进程应
sys.exit(0),避免双开。 - 路径和参数含空格时必须加引号。
- 能不提权就不提权,缩小攻击面。
本文是原创文章,采用 CC BY-NC-ND 4.0 协议,完整转载请注明来自 HT Notes