使用 Pyinstaller 打包为 windows exe程序 添加管理员权限的多种方式
本文提供几种在使用 Pyinstaller
打包后,为包体 exe
提升管理员权限的方式。
注意事项:
管理员权限的必要性:确保程序确实需要
管理员权限,否则用户可能会质疑程序的安全性。
数字签名:最好对生成的 .exe
文件进行数字签名,否则某些杀毒软件可能会误报。
准备测试脚本
准备一个测试用脚本,用于检查是否真的拥有管理员权限
#!/usr/bin/env python3
# -*- coding: UTF-8 -*-
"""
@ File : administrator_rights.py
@ Author : yqbao
@ Version : V1.0.0
@ Description : 测试用脚本
"""
import os
import timedef test_admin_privileges():try:with open(r"C:\Windows\System32\test_admin.txt", "w") as f:f.write("测试管理员权限")print("程序已以管理员权限运行")os.remove(r"C:\Windows\System32\test_admin.txt") # 清理测试文件except PermissionError:print("程序未以管理员权限运行,请使用管理员权限启动")time.sleep(3) # 休眠,方便查看if __name__ == "__main__":test_admin_privileges()
方法一:使用 --uac-admin 参数(推荐)
直接在打包时,应用参数
# 最简化的打包参数使用方法,
pyinstaller -F --uac-admin .\administrator_rights.pypyinstaller -D --uac-admin .\administrator_rights.py
或者你也可以直接修改 .spec 文件
... # 省略
exe = EXE(... # 省略uac_admin=True, # 在最后增加这句
)
打包后,在包体图标右下角,会有个 管理员权限
标识
运行后,不一定会弹出 UAC 权限确认,但是确实也是用的管理员权限运行
方法二:在代码中直接提升 UAC 权限
修改测试脚本,增加下面的内容
#!/usr/bin/env python3
# -*- coding: UTF-8 -*-
"""
@ File : administrator_rights.py
@ Author : yqbao
@ Version : V1.0.0
@ Description :
"""
import ctypes
import os
import sys
import timedef test_admin_privileges():... # 忽略,无变化if __name__ == "__main__":if not ctypes.windll.shell32.IsUserAnAdmin(): # 检查是否拥有管理员权限# 如果不是管理员权限,则重新以管理员权限运行ctypes.windll.shell32.ShellExecuteW(None, "runas", sys.executable, " ".join(sys.argv), None, 1)sys.exit()test_admin_privileges()
使用最简化的打包
pyinstaller -F .\administrator_rights.pypyinstaller -D .\administrator_rights.py
打包后,在包体图标右下角,不会有管理员权限标识
运行后,不一定会弹出 UAC 权限确认,但是确实也是用的管理员权限运行
方法三:通过 manifest 文件指定(但是这种方式,并未成功,不过也记录在这里)
1.创建一个 manifest 文件
新建一个名为 your_script.manifest
的文件,内容如下
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0"><trustInfo xmlns="urn:schemas-microsoft-com:asm.v3"><security><requestedPrivileges><requestedExecutionLevel level="requireAdministrator" uiAccess="false" /></requestedPrivileges></security></trustInfo>
</assembly>
2. 通过 PyInstaller 添加 manifest 文件
pyinstaller --manifest your_script.manifest -F .\administrator_rights.py
本文章的原文地址
GitHub主页