需求 有些應用每次啟動都需要用管理員許可權運行,比如Python註入dll時,編輯器或cmd就需要以管理員許可權運行,不然註入就會失敗。 這篇文章用編程怎麼修改配置實現打開某個軟體都是使用管理員運行,就不用每次都右鍵點擊以管理員身份運行此程式。主要是給小白配置,防止他忘了以管理員許可權運行,又跑過來問我為 ...
需求
有些應用每次啟動都需要用管理員許可權運行,比如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被修複了。如果有人測試成功的話,可以私聊我下原因