Python給exe添加以管理員運(yùn)行的屬性方法詳解
需求
有些應(yīng)用每次啟動(dòng)都需要用管理員權(quán)限運(yùn)行,比如Python注入dll時(shí),編輯器或cmd就需要以管理員權(quán)限運(yùn)行,不然注入就會(huì)失敗。
這篇文章用編程怎么修改配置實(shí)現(xiàn)打開某個(gè)軟件都是使用管理員運(yùn)行,就不用每次都右鍵點(diǎn)擊以管理員身份運(yùn)行此程序。主要是給小白配置,防止他忘了以管理員權(quán)限運(yùn)行,又跑過來問我為啥Hook失敗了
非編程方式
如果是自己想修改的話:右鍵軟件或桌面快捷方式,兼容性->然后勾選以管理身份運(yùn)行此程序

編程方式
有代碼的軟件
如果你需要運(yùn)行的軟件是自己寫的,想在運(yùn)行時(shí)申請管理員權(quán)限,可以在清單文件里增加一行:
<requestedExecutionLevel level='requireAdministrator' uiAccess='true' />
在visual studio中,可以右鍵項(xiàng)目屬性,鏈接器->清單文件,UAC執(zhí)行級別改成requireAdministrator

其他軟件
軟件本身沒有申請管理員權(quán)限,而你又想讓他以管理員權(quán)限運(yùn)行。那就得知道非編程方式勾選的那個(gè)配置實(shí)際保存在哪里,你可以直接修改它保存的位置也能達(dá)到一樣的效果
經(jīng)過搜索發(fā)現(xiàn),這個(gè)配置是保存在注冊表中。
當(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)你在右鍵勾選這個(gè)選項(xiàng)時(shí),當(dāng)前用戶的注冊表路徑下就會(huì)多出一個(gè)鍵來,鍵名是軟件的絕對路徑,值則是~ RUNASADMIN

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

另外,其他幾個(gè)選項(xiàng)也是在這個(gè)路徑下,分別對應(yīng)不同的值,這里我就不演示了。
這里以Python為例修改注冊表,讓Python每次都以管理員權(quán)限啟動(dòng),這種其實(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()其他方式
搜索的時(shí)候還看到可以通過修改快捷方式來達(dá)到這樣的效果,不過我測試并不行,可能在最新的系統(tǒng)這個(gè)屬于bug被修復(fù)了。如果有人測試成功的話,可以私聊我下原因
以上就是Python給exe添加以管理員運(yùn)行的屬性的詳細(xì)內(nèi)容,更多關(guān)于Python給exe添加以管理員運(yùn)行的屬性的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
python開發(fā)之str.format()用法實(shí)例分析
這篇文章主要介紹了python開發(fā)之str.format()用法,結(jié)合實(shí)例形式較為詳細(xì)的分析了str.format()函數(shù)的功能,使用方法與相關(guān)注意事項(xiàng),代碼包含詳盡的注釋說明,需要的朋友可以參考下2016-02-02
Python3利用Dlib19.7實(shí)現(xiàn)攝像頭人臉識別的方法
這篇文章主要介紹了Python 3 利用 Dlib 19.7 實(shí)現(xiàn)攝像頭人臉識別 ,利用python開發(fā),借助Dlib庫捕獲攝像頭中的人臉,提取人臉特征,通過計(jì)算歐氏距離來和預(yù)存的人臉特征進(jìn)行對比,達(dá)到人臉識別的目的,感興趣的小伙伴們可以參考一下2018-05-05
Python中Enum使用的幾點(diǎn)注意事項(xiàng)
Python中的枚舉是作為一個(gè)類存在的,這是與其他語言的一個(gè)較為鮮明的特征,下面這篇文章主要給大家介紹了關(guān)于Python中Enum使用的幾點(diǎn)注意事項(xiàng),需要的朋友可以參考下2022-02-02
Python機(jī)器學(xué)習(xí)NLP自然語言處理基本操作精確分詞
本文是Python機(jī)器學(xué)習(xí)NLP自然語言處理系列文章,帶大家開啟一段學(xué)習(xí)自然語言處理 (NLP) 的旅程. 本文主要學(xué)習(xí)NLP自然語言處理基本操作之如何精確分詞2021-09-09
深度探索Python列表切片的高級應(yīng)用與最佳實(shí)踐
Python的切片語法是數(shù)據(jù)處理中最優(yōu)雅的特性之一,它的基本形式是 list[start:stop:step],本文將和大家聊聊Python切片的相關(guān)應(yīng)用,感興趣的小伙伴可以了解下2026-02-02
如何使用pyinstaller打包時(shí)引入自己編寫的庫
這篇文章主要介紹了如何使用pyinstaller打包時(shí)引入自己編寫的庫,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-02-02
python使用psutil模塊獲取系統(tǒng)狀態(tài)
作為程序猿,大家可能都熟悉linux系統(tǒng)的基礎(chǔ)信息獲取方法都是通過shell來獲取,但是在python中,我們還可以使用psutil模塊來獲取系統(tǒng)信息。psutil模塊把shell查看系統(tǒng)基礎(chǔ)信息的功能都包裝了下,使用更加簡單,功能豐富。2016-08-08

