Python给exe添加以管理员运行的属性方法详解

 更新时间:2023年12月19日 09:14:42   作者:Python成长路  
这篇文章主要为大家介绍了Python给exe添加以管理员运行的属性方法详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

需求

有些应用每次启动都需要用管理员权限运行,比如Python注入dll时,编辑器或cmd就需要以管理员权限运行,不然注入就会失败。

这篇文章用编程怎么修改配置实现打开某个软件都是使用管理员运行,就不用每次都右键点击以管理员身份运行此程序。主要是给小白配置,防止他忘了以管理员权限运行,又跑过来问我为啥Hook失败了

非编程方式

如果是自己想修改的话:右键软件或桌面快捷方式,兼容性->然后勾选以管理身份运行此程序

编程方式

有代码的软件

如果你需要运行的软件是自己写的,想在运行时申请管理员权限,可以在清单文件里增加一行:

<requestedExecutionLevel level='requireAdministrator' uiAccess='true' />

在visual studio中,可以右键项目属性,链接器->清单文件,UAC执行级别改成requireAdministrator

其他软件

软件本身没有申请管理员权限,而你又想让他以管理员权限运行。那就得知道非编程方式勾选的那个配置实际保存在哪里,你可以直接修改它保存的位置也能达到一样的效果

经过搜索发现,这个配置是保存在注册表中。

当前用户对应的注册表路径

HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers

所有用户统一的配置路径

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers

当你在右键勾选这个选项时,当前用户的注册表路径下就会多出一个键来,键名是软件的绝对路径,值则是~ RUNASADMIN

如果你删除掉这个键,则在右键看的时候,选项是没有被勾选上的

另外,其他几个选项也是在这个路径下,分别对应不同的值,这里我就不演示了。

这里以Python为例修改注册表,让Python每次都以管理员权限启动,这种其实属于危险行为,因为Python也可以在你电脑上做任何事

import ctypes 
import sys
from winreg import *
def add_runas():
    exe_path = sys.executable
    # 判断当前运行的Python是否具有管理员权限,没有则申请
    if not ctypes.windll.shell32.IsUserAnAdmin():
        ctypes.windll.shell32.ShellExecuteW(None, "runas", exe_path, __file__, None, 1)
    reg_path = r"Software\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers"
    reg_key = OpenKey(HKEY_CURRENT_USER, reg_path, access=KEY_SET_VALUE | KEY_READ)
    runas_value = "~ RUNASADMIN"
    try:
        value = QueryValueEx(reg_key, exe_path)
    except FileNotFoundError:
        SetValueEx(reg_key, exe_path, 0, REG_SZ, runas_value)
    else:
        if runas_value[2:] not in value[0]:
            SetValueEx(reg_key, exe_path, 0, REG_SZ, value[0] + ' ' + runas_value[2:])
if __name__ == "__main__":
    add_runas()

其他方式

搜索的时候还看到可以通过修改快捷方式来达到这样的效果,不过我测试并不行,可能在最新的系统这个属于bug被修复了。如果有人测试成功的话,可以私聊我下原因

以上就是Python给exe添加以管理员运行的属性的详细内容,更多关于Python给exe添加以管理员运行的属性的资料请关注脚本之家其它相关文章!

相关文章

  • Python Pandas中布尔索引的用法详解

    Python Pandas中布尔索引的用法详解

    布尔索引是一种使用 DataFrame 中数据的实际值的索引。本文将通过一些示例为大家详细讲讲Python中布尔索引的用法,需要的可以参考一下
    2022-08-08
  • PyOD进行异常值检测使用实例

    PyOD进行异常值检测使用实例

    异常值检测各个领域的关键任务之一,PyOD是Python Outlier Detection的缩写,可以简化多变量数据集中识别异常值的过程,在本文中,我们将介绍PyOD包,并通过实际给出详细的代码示例
    2024-02-02
  • python开发之str.format()用法实例分析

    python开发之str.format()用法实例分析

    这篇文章主要介绍了python开发之str.format()用法,结合实例形式较为详细的分析了str.format()函数的功能,使用方法与相关注意事项,代码包含详尽的注释说明,需要的朋友可以参考下
    2016-02-02
  • Python3利用Dlib19.7实现摄像头人脸识别的方法

    Python3利用Dlib19.7实现摄像头人脸识别的方法

    这篇文章主要介绍了Python 3 利用 Dlib 19.7 实现摄像头人脸识别 ,利用python开发,借助Dlib库捕获摄像头中的人脸,提取人脸特征,通过计算欧氏距离来和预存的人脸特征进行对比,达到人脸识别的目的,感兴趣的小伙伴们可以参考一下
    2018-05-05
  • Python中Enum使用的几点注意事项

    Python中Enum使用的几点注意事项

    Python中的枚举是作为一个类存在的,这是与其他语言的一个较为鲜明的特征,下面这篇文章主要给大家介绍了关于Python中Enum使用的几点注意事项,需要的朋友可以参考下
    2022-02-02
  • Python机器学习NLP自然语言处理基本操作精确分词

    Python机器学习NLP自然语言处理基本操作精确分词

    本文是Python机器学习NLP自然语言处理系列文章,带大家开启一段学习自然语言处理 (NLP) 的旅程. 本文主要学习NLP自然语言处理基本操作之如何精确分词
    2021-09-09
  • 深度探索Python列表切片的高级应用与最佳实践

    深度探索Python列表切片的高级应用与最佳实践

    Python的切片语法是数据处理中最优雅的特性之一,它的基本形式是 list[start:stop:step],本文将和大家聊聊Python切片的相关应用,感兴趣的小伙伴可以了解下
    2026-02-02
  • 如何使用pyinstaller打包时引入自己编写的库

    如何使用pyinstaller打包时引入自己编写的库

    这篇文章主要介绍了如何使用pyinstaller打包时引入自己编写的库,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-02-02
  • 常见python正则用法的简单实例

    常见python正则用法的简单实例

    下面小编就为大家带来一篇常见python正则用法的简单实例。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-06-06
  • python使用psutil模块获取系统状态

    python使用psutil模块获取系统状态

    作为程序猿,大家可能都熟悉linux系统的基础信息获取方法都是通过shell来获取,但是在python中,我们还可以使用psutil模块来获取系统信息。psutil模块把shell查看系统基础信息的功能都包装了下,使用更加简单,功能丰富。
    2016-08-08

最新评论