使用 Pyinstaller 打包为 windows exe程序 添加管理员权限的多种方式

news/2024/11/27 13:41:47/文章来源:https://www.cnblogs.com/yqbaowo/p/18571879

使用 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, # 在最后增加这句
)

打包后,在包体图标右下角,会有个 管理员权限 标识
image

运行后,不一定会弹出 UAC 权限确认,但是确实也是用的管理员权限运行
image

方法二:在代码中直接提升 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

打包后,在包体图标右下角,不会有管理员权限标识
image

运行后,不一定会弹出 UAC 权限确认,但是确实也是用的管理员权限运行
image

方法三:通过 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主页

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/842271.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

DSPf28335-时钟及控制系统

外部晶振30Mhz,经过十倍频与二分频得到150Mhz系统时钟系统时钟在供给外设,为不同的外设提供不同的时钟频率,进行不同程度的分频分别供给SPI-A,SCI-A;I2C-A;eCAN-A/B;ePWM;eCAP等外设进行系统控制;

【嵌入式开发】log.c:一个非常轻量的嵌入式日志库

log.c简介github链接: https://github.com/rxi/log.clog.c是一个轻量级的日志库。一个用 C99 实现的简单日志库,这意味着它应该可以在任何支持 C99 标准的平台上编译和运行,如我们的嵌入式系统中。 特点: 使用C99标准,适用于嵌入式。 支持静默模式。 支持日志级别设置。 支…

Day1.了解MarkDown

Markdown学习 标题 三级 四级 +空格+文字=标题 几个#就是几级标题 字体 Hello World! 两边各一个*,斜体 Hello World! 两边各两个*,加粗 Hello World! 两边各三个*,斜体+加粗 Hello World! 两边各两个~~,划去 引用每天学一点,早晚成大佬。 一个箭头符号<或>分割…

kubectl 命令行快速操作

集群安装完成后,查看集群信息 [root@k8s-master1 images]# kubectl version [root@k8s-master1 images]# kubectl cluster-info[root@k8s-master1 images]# kubectl version Client Version: version.Info{Major:"1", Minor:"14", GitVersion:"…

vxe-table grid 分享实现单元格编辑表格表尾合计实时计算

在使用 vxe-grid 时,需要实现表尾合计功能,通过单元格编辑之后,实时自动计算表尾合计的值,自动更新表尾合计数据,实现方式通过监听change 事件,从而实现实时更新合计功能。 官网:https://vxetable.cn可以使用插槽模板,也可以使用配置式,下面是配置式的用法: <temp…

zabbix搭建完,web端显示“zabbix服务器端运行中 不”

abbix搭建完,web端显示“zabbix服务器端运行中 不”如下图: 但是查看服务器的状态是running然后查日志/var/log/zabbix/zabbix-server.log 问过度娘之后,发现需要修改/etc/zabbix/zabbix_server.conf文件,在其中添加:DBSocket=/usr/local/mysql/mysql.sock然后重启还是不行…

在VS Code里写C#

Visual Studio下载安装比较耗时,耗磁盘空间,创建C#工程慢。今天尝试了一下在VS Code里创建C#工程,并且跑起来,体验挺轻量的,后面有小的练习,直接在VS Code里测试,应该有不错的体验。 本文是参考了 Get started with C# and .NET in Visual Studio Code。 步骤: 1. 下载…

python 多进程multiprocessing 内存占用 物理内存 虚拟内存 windows 分析

只有 import time time.sleep(10) 前边加上 from torch.utils.data import Dataset import torch# 检查是否支持 CUDA if torch.cuda.is_available():print("CUDA is available!")print(f"Device count: {torch.cuda.device_count()}")print(f"Curre…

【日记】我得承认,我在看到她消息的一瞬间,确实心跳加速了(2437 字)

正文昨天晚上又去玩儿了一会儿,发现自己的基本功大崩溃。都快忘光了。今天没怎么看书,聊了一会儿天。当然最重要的这个事情之后再说。下午一脸懵地被叫去检查组了。骂得好狠。“客户报过来的资料你们都不看一下的吗?” 内控的那个更年期主管如是说。这个问题是内控部门另一个…

Spring Data JPA自动生成表时列顺序混乱的解决办法(最新版)

最近把Spring Boot的版本升级到了3.3.5,突然发现一个问题:当使用Spring Data JPA自动生成表的时候,所产生的列顺序与Entity类中的变量顺序不一致了。比如,有一个下面这样的Entity: @Data @Entity(name = "t_config") @EntityListeners(AuditingEntityListener.c…

服务器为什么要托管,放在自己公司不行吗?

#服务器#服务器托管是指将服务器设备交由专业的数据中心或托管服务商进行管理和维护,而不是放在自己公司内部。因为放在公司的话,公司自行管理服务器在技术支持、成本投入、安全与稳定性以及扩展性等方面都会存在一定挑战和限制:专业技术支持与维护的挑战公司自行管理服务器…

【小米微电机 CyberGear】 拆解

拆开非转轴输出侧的封盖,露出PCBA。PCBA细节图主控应该是GD32F303RET6,接口时AMASS的XT30(2+2)。 拆下固定PCB的螺丝,可以看到里面的线圈背面细节图: