首页 > 编程语言 >Python给exe添加以管理员运行的属性

Python给exe添加以管理员运行的属性

时间:2023-12-18 19:31:34浏览次数:37  
标签:__ exe Python runas value 管理员 path reg

需求

有些应用每次启动都需要用管理员权限运行,比如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被修复了。如果有人测试成功的话,可以私聊我下原因

标签:__,exe,Python,runas,value,管理员,path,reg
From: https://blog.51cto.com/u_12300749/8876930

相关文章

  • Python实现模块热加载
    为什么需要热加载在某些情况,你可能不希望关闭Python进程并重新打开,或者你无法重新启动Python,这时候就需要实现实时修改代码实时生效,而不用重新启动Python在我的需求下,这个功能非常重要,我将Python注入到了其他进程,并作为一个线程运行。如果我想关闭Python,要么杀死Python相关的线......
  • python flask 生产环境部署,基于gunicorn(centos 6.5)
    1.安装gunicorn,部分生产服务器会存在多个pip版本,一般用pip和pip3区分,本文中用pippipinstallgunicorn2.启动程序cd/usr/appgunicorn--workers2-b0.0.0.0:5056app:app 因为我的项目文件名称为app.py所以为app:如果是其他的文件名称注意修改,验证项目正常后继续如下......
  • Scale-Prior Deformable Convolution for Exemplar-Guided Class-Agnostic Counting
    Scale-PriorDeformableConvolutionforExemplar-GuidedClass-AgnosticCounting初读印象comment::(计数用的一个网络)提出了一个标度优先的可变形卷积,将典范的信息,例如标度,整合到计数网络主干中。动机本文考虑的是类别无关的计数,其中计数模型预测由一组查询图像中的少数......
  • python 命名切片
    问题你的程序已经出现一大堆已无法直视的硬编码切片下标,然后你想清理下代码。解决方案假定你有一段代码要从一个记录字符串中几个固定位置提取出特定的数据字段(比如文件或类似格式):######0123456789012345678901234567890123456789012345678901234567890'record='..........
  • Python 中如何编写类型提示
    哈喽大家好,我是咸鱼我们知道Python是一门具有动态特性的语言,在编写Python代码的时候不需要显式地指定变量的类型这样做虽然方便,但是降低了代码的可阅读性,在后期review代码的时候容易对变量的类型产生混淆,需要查阅大量上下文,导致后期维护困难为了提高代码的可读性、可维护......
  • python123——numpy、scipy、pandas、matplotlib的读书报告
     一、函数的基本用法numpyNumPy(NumericalPython)是Python的一种开源的数值计算扩展。这种工具可用来存储和处理大型矩阵,比Python自身的嵌套列表(nestedliststructure)结构要高效的多(该结构也可以用来表示矩阵(matrix)),支持大量的维度数组与矩阵运算,此外也针对数组运算提供大量的......
  • Python 如何读取 Excel 表内容
    在数据处理和分析中,Excel是一个常用的工具,而使用Python读取Excel表内容可以更方便地进行数据分析和处理。本文将介绍几种常见的Python库和方法,帮助您实现读取Excel表内容的操作。使用openpyxl库读取Excel表内容openpyxl是一个用于读写Excel文件的Python库,支持Excel2010及以上版本......
  • python怎么统计文档中字母出现的次数
    当你需要统计文档中字母出现的次数时,Python提供了许多方法和库来方便地完成这个任务。下面将介绍两种常见的方法:使用纯Python和使用第三方库。方法一:使用纯Python使用纯Python的方法可以帮助你统计文档中字母出现的次数。以下是一个简单的示例代码:```python#打开文档并读取内容wi......
  • python self是什么意思?怎么使用?
    在Python中,self是一个特殊的参数,通常用作方法的第一个参数。它表示对类实例自身的引用,类似于其他编程语言中的this关键字。self参数的命名可以是任意合法的标识符,但按照惯例,大多数开发者都使用self。为什么需要self参数?使用self参数的目的是允许类的实例访问其自身的属性和方法。通......
  • Python 删除行列的操作方法有哪些
    在Python中,删除行和列的操作通常用于处理二维数组、矩阵或数据框等数据结构。通过删除不需要的行列,可以使数据结构更加紧凑和易于处理。本文将介绍几种Python中删除行列的操作方法。删除行在Python中,删除行的操作方法有多种,以下是其中的几种方法:方法一:使用`del`关键字使用`del`关键......