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

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

时间:2023-12-19 09:34:01浏览次数:46  
标签:exe Python runas value 管理员 path

需求

有些应用每次启动都需要用管理员权限运行,比如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
From: https://www.cnblogs.com/kanadeblisst/p/17912888.html

相关文章

  • 期末复习-基于python的数据整理
    一、pandas数据合并pd.concat()append()pd.merge()1.1pd.concat()函数pandas的pd.concat函数和numpy的np.concatenate函数类似1)简单的合并defmake_df(indexs,columns):data=[[str(j)+str(i)forjincolumns]foriinindexs]df=pd.DataFrame(data=data......
  • Python + AI:完美抠图,更换背景
    以下内容为本人的学习笔记,如需要转载,请声明原文链接微信公众号「ENG八戒」https://mp.weixin.qq.com/s/7BdEjWTF9S0kGMgWnudSNA翻看家里的老照片,发现一只小dog,很趣致吧,这眼神汪汪地~(背景是在厨房)。有时候就想把某些照片里的人物或者主角抠出来,然后贴到喜欢的背景图里,比如你想......
  • PyCharm中New Directory 和 New Python Package的区别
    如题,这是一个很简单也很基础的问题,先看不同操作的结果有什么不同结果1:项目下出现了一个空“文件夹” 结果2:项目下多了一个“PythonPackage”,该package下包含了一个“__init__.py”文件,该py文件是空的如果把该py文件删掉后,package也就变成了directory  所以什么是__in......
  • 查看mvn版本:cannot execute binary file
    一、现象二、原因网络资料上大部分的原因是因为jdk不是46位导致失败。其实我这边的原因也查不多,目前使用的是MacM2芯片的电脑但是还安装之前的jdk版本,将其替换为macosarm版本即可。三、操作JDK下载官网下载、解压并更新环境变量四、修复......
  • Python 使用 platform 判断检测操作系统的方法
    ​ 在Python中,可以使用platform模块来获取操作系统的信息。其中,platform.system()方法可以获取操作系统的名称。详细文档:Python使用platform判断检测操作系统的方法-CJavaPy使用platform.system()方法判断操作系统以下是一个使用platform.system()方法判断操作......
  • Python NumPy 图像处理
    ​ 1、读取图像需要使用图像处理库来读取图像文件,如Pillow,并将其转换为NumPy数组。示例代码:PythonNumPy图像处理-CJavaPy2、保存图像使用NumPy处理后的图像可以再次转换为Pillow图像 示例代码:PythonNumPy图像处理-CJavaPy3、转换为灰度图可以通过将RGB值转换为......
  • Python:设计模式
    一、设计模式与面向对象1.1设计模式  软件设计阶段针对反复出现的问题提出的统一解决方案。每类问题的解决方案都被系统的命名为XX设计模式。1.2面向对象  按照一件事的组成元素分别制作进行组装。这些元素分为属性与接口。1.2.1三大特性  封装:将对象封装为类,将对......
  • 自动化文件管理:使用Python创建匹配Excel数据的文本文件
    介绍在日常工作中,我们经常需要处理大量的数据和文件。尤其是在处理涉及多层嵌套目录和数据文件时,手动操作变得极其繁琐和耗时。为了提高效率,自动化这一过程显得尤为重要。本博客介绍了一个实用的Python脚本,它能够自动读取Excel表格中的数据,并在相应的文件夹中创建文本文件。这个......
  • *Python 下载视频
    python下载文件的三种方法_python下载文件_xiaoyaozi2020的博客-CSDN博客......
  • Python获取时间戳
    一、获取时间戳importtimeimportdatetimet=time.time()print(t)#原始时间数据print(int(t))#秒级时间戳print(int(round(t*1000)))#毫秒级时间戳print(int(round(t*1000000)))#微秒级时间戳#输出#16488......