Python给exe添加以管理员运行的属性
需求
有些應(yīng)用每次啟動都需要用管理員權(quán)限運行,比如Python注入dll時,編輯器或cmd就需要以管理員權(quán)限運行,不然注入就會失敗。
這篇文章用編程怎么修改配置實現(xiàn)打開某個軟件都是使用管理員運行,就不用每次都右鍵點擊以管理員身份運行此程序。主要是給小白配置,防止他忘了以管理員權(quán)限運行,又跑過來問我為啥Hook失敗了
非編程方式
如果是自己想修改的話:右鍵軟件或桌面快捷方式,兼容性->然后勾選以管理身份運行此程序
編程方式
有代碼的軟件
如果你需要運行的軟件是自己寫的,想在運行時申請管理員權(quán)限,可以在清單文件里增加一行:<requestedExecutionLevel level='requireAdministrator' uiAccess='true' />
在visual studio中,可以右鍵項目屬性,鏈接器->清單文件,UAC執(zhí)行級別改成requireAdministrator
其他軟件
軟件本身沒有申請管理員權(quán)限,而你又想讓他以管理員權(quán)限運行。那就得知道非編程方式勾選的那個配置實際保存在哪里,你可以直接修改它保存的位置也能達到一樣的效果
經(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)你在右鍵勾選這個選項時,當(dāng)前用戶的注冊表路徑下就會多出一個鍵來,鍵名是軟件的絕對路徑,值則是~ RUNASADMIN
如果你刪除掉這個鍵,則在右鍵看的時候,選項是沒有被勾選上的
另外,其他幾個選項也是在這個路徑下,分別對應(yīng)不同的值,這里我就不演示了。
這里以Python為例修改注冊表,讓Python每次都以管理員權(quán)限啟動,這種其實屬于危險行為,因為Python也可以在你電腦上做任何事
import ctypes
import sys
from winreg import *
def add_runas():
exe_path = sys.executable
# 判斷當(dāng)前運行的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()
其他方式
搜索的時候還看到可以通過修改快捷方式來達到這樣的效果,不過我測試并不行,可能在最新的系統(tǒng)這個屬于bug被修復(fù)了。如果有人測試成功的話,可以私聊我下原因
總結(jié)
以上是生活随笔為你收集整理的Python给exe添加以管理员运行的属性的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【UniApp】-uni-app-pin
- 下一篇: 采用模块化设计,Sharkoon 推出新