日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > python >内容正文

python

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

發(fā)布時間:2023/12/24 python 40 coder
生活随笔 收集整理的這篇文章主要介紹了 Python给exe添加以管理员运行的属性 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

需求

有些應(yīng)用每次啟動都需要用管理員權(quán)限運(yùn)行,比如Python注入dll時,編輯器或cmd就需要以管理員權(quán)限運(yùn)行,不然注入就會失敗。

這篇文章用編程怎么修改配置實(shí)現(xiàn)打開某個軟件都是使用管理員運(yùn)行,就不用每次都右鍵點(diǎn)擊以管理員身份運(yùn)行此程序。主要是給小白配置,防止他忘了以管理員權(quán)限運(yùn)行,又跑過來問我為啥Hook失敗了

非編程方式

如果是自己想修改的話:右鍵軟件或桌面快捷方式,兼容性->然后勾選以管理身份運(yùn)行此程序

編程方式

有代碼的軟件

如果你需要運(yùn)行的軟件是自己寫的,想在運(yùn)行時申請管理員權(quán)限,可以在清單文件里增加一行:
<requestedExecutionLevel level='requireAdministrator' uiAccess='true' />

在visual studio中,可以右鍵項(xiàng)目屬性,鏈接器->清單文件,UAC執(zhí)行級別改成requireAdministrator

其他軟件

軟件本身沒有申請管理員權(quán)限,而你又想讓他以管理員權(quán)限運(yùn)行。那就得知道非編程方式勾選的那個配置實(shí)際保存在哪里,你可以直接修改它保存的位置也能達(dá)到一樣的效果

經(jīng)過搜索發(fā)現(xiàn),這個配置是保存在注冊表中。

當(dāng)前用戶對應(yīng)的注冊表路徑
HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers
所有用戶統(tǒng)一的配置路徑
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers

當(dāng)你在右鍵勾選這個選項(xiàng)時,當(dāng)前用戶的注冊表路徑下就會多出一個鍵來,鍵名是軟件的絕對路徑,值則是~ RUNASADMIN

如果你刪除掉這個鍵,則在右鍵看的時候,選項(xiàng)是沒有被勾選上的

另外,其他幾個選項(xiàng)也是在這個路徑下,分別對應(yīng)不同的值,這里我就不演示了。

這里以Python為例修改注冊表,讓Python每次都以管理員權(quán)限啟動,這種其實(shí)屬于危險(xiǎn)行為,因?yàn)镻ython也可以在你電腦上做任何事

import ctypes 
import sys
from winreg import *


def add_runas():
    exe_path = sys.executable
    # 判斷當(dāng)前運(yùn)行的Python是否具有管理員權(quán)限,沒有則申請
    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() 

其他方式

搜索的時候還看到可以通過修改快捷方式來達(dá)到這樣的效果,不過我測試并不行,可能在最新的系統(tǒng)這個屬于bug被修復(fù)了。如果有人測試成功的話,可以私聊我下原因

總結(jié)

以上是生活随笔為你收集整理的Python给exe添加以管理员运行的属性的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。