如何在沒有管理員權限的情況下運行程序並繞過 UAC 提示
啟動時,某些程序需要權限提升(應用程序圖標旁邊的盾牌),但實際上,它們的正常操作不需要管理員權限。例如,您可以手動為用戶授予對 ProgramFiles 中的應用程序文件夾和/或程序使用的註冊表項的權限。如果計算機上啟用了用戶帳戶控制,如果您嘗試以標準用戶身份運行此類程序,則會出現 UAC 提示,並且 Windows 會要求用戶輸入管理員密碼。
為了繞過此機制,許多管理員只需禁用 UAC 或通過將用戶帳戶添加到本地組“管理員”來授予管理員權限。當然,這兩種方法都不安全。這兩種方法都不建議廣泛使用,因為它們會降低 Windows 的安全性。在本文中,我們將了解如何以標準用戶身份運行需要管理員權限的程序並抑制 UAC 提升提示。
內容:
- 配置非管理員用戶運行程序的權限
- 允許標準用戶運行需要管理員權限的程序
- 如何使用 CMD 中的 RunAsInvoker 選項繞過 UAC?
- 在 EXE 文件清單中啟用 RunAsInvoker 模式
- 創建一個快捷方式以使用保存的管理員密碼運行程序
配置非管理員用戶運行程序的權限
如果出現以下情況,Windows 程序在啟動時可能會要求您提供管理員權限:
- 程序需要訪問未授予非特權用戶NTFS權限的系統目錄或文件;
- 如果程序是使用特殊標誌編譯的,需要在啟動時提升(
requireAdministrator)。
在第一種情況下,解決問題所需要做的就是授予程序目錄或所需系統目錄/文件的RW或完全控制用戶權限。例如,程序將其文件(日誌、配置文件等)存儲在其自己的文件夾中C:Program Files (x86)SomeApp或者一些系統目錄。用戶必須有權寫入這些文件才能使程序正常工作。為了使該程序正常運行,需要管理員權限。
要允許程序以非管理員用戶身份運行,只需手動授予用戶(或內置用戶組)在 NTFS 文件系統級別修改/寫入文件/目錄的權限即可

要查找程序正在訪問的文件、文件夾和註冊表項的列表,請使用過程監控器(https://learn.microsoft.com/en-us/sysinternals/downloads/procmon)。啟用按程序進程名稱過濾並查找所有資源,如果嘗試訪問它們,則會顯示“訪問被拒絕”。授予文件夾/文件/註冊表項必要的權限。


筆記。實際上,不建議將更改的應用程序數據存儲在 C:Program Files 目錄中。最好將應用程序數據存儲在用戶配置文件中。但這是應用程序開發人員的懶惰和無能的問題。
允許標準用戶運行需要管理員權限的程序
之前我們描述瞭如何使用以下命令禁用特定程序的 UAC 提示人類召喚者範圍。但這種方法不夠靈活。
讓我們看看一種更簡單的方法,強制任何程序在沒有管理員權限(無需輸入管理員密碼)且啟用 UAC(UAC 滑塊的級別 4、3 或 2)的情況下運行。
讓我們以註冊表編輯器為例——註冊表編輯器(它位於 C:Windows 文件夾中)。請注意應用程序圖標旁邊的 UAC 盾牌。此圖標表示需要 UAC 提升才能運行此應用程序。
![]()
![]()
當你跑步時regedit.exe,您將看到一個用戶帳戶控制提示,要求輸入管理員憑據(Do you want to allow this app to make changes to your device?)。如果您不提供密碼且不確認提升,應用程序將不會啟動。


讓我們嘗試繞過該程序的UAC 請求。創建文本文件以非管理員身份運行.bat桌面上包含以下代碼:
cmd /min /C "set __COMPAT_LAYER=RUNASINVOKER && start "" %1"
要強制 regedit.exe 在沒有管理員權限的情況下運行並抑制 UAC 提示,只需將要運行的 EXE 文件拖到桌面上的此 BAT 文件中即可。


註冊表編輯器應在沒有 UAC 提示且無需輸入管理員密碼的情況下啟動。如果您打開任務管理器並添加高架列中,您將看到存在沒有提升狀態的 regedit.exe 進程(以非管理員用戶權限運行)。


嘗試編輯 HKEY_LOCAL_MACHINE 註冊表配置單元下的任何項目。如您所見,用戶無法編輯此註冊表項中的項目(用戶沒有系統註冊表項的寫入權限)。但是,您可以在用戶配置單元 (HKEY_CURRENT_USER) 中添加或編輯註冊表項和參數。


同樣,您可以使用 BAT 文件運行任何應用程序。只需指定可執行文件的路徑即可。
運行應用程序作為非管理員.bat
Set ApplicationPath="C:Program FilesSomeApptestapp.exe"
cmd /min /C "set __COMPAT_LAYER=RUNASINVOKER && start "" %ApplicationPath%"
您還可以添加一個上下文菜單,允許在不提升權限的情況下運行所有應用程序。為此,請創建以用戶身份運行.REG文件中,將以下代碼複製到其中,保存並通過雙擊 reg 文件將其導入 Windows 註冊表(您需要管理員權限才能應用此更改)。
Windows Registry Editor Version 5.00 [HKEY_CLASSES_ROOT*shellforcerunasinvoker] @="Run as user without UAC privilege elevation" [HKEY_CLASSES_ROOT*shellforcerunasinvokercommand] @="cmd /min /C "set __COMPAT_LAYER=RUNASINVOKER && start "" "%1"""


之後,要在沒有管理員權限的情況下運行任何應用程序,只需選擇“以沒有 UAC 權限提升的用戶身份運行”從 Windows 文件資源管理器上下文菜單。
您可以通過使用 GPO 導入註冊表參數來將此菜單項部署到域中的所有計算機。


我想提醒您,使用RUNASINVOKER該程序的模式不允許您提升權限。 RunAsInvoker 抑制 UAC 提示並告訴程序它應該以當前用戶的權限運行,而不是要求提升權限。如果程序確實需要提升權限來編輯系統設置或文件,它將無法工作或會再次請求管理員權限。
如何使用 CMD 中的 RunAsInvoker 選項繞過 UAC?
__COMPAT_LAYER 環境變量允許您為應用程序設置不同的兼容性級別(相容性EXE 文件屬性中的選項卡)。此變量允許您指定要運行程序的兼容性設置。例如,要在 Windows 8 兼容模式下以 640×480 分辨率啟動應用程序,請設置以下內容:
set __COMPAT_LAYER=Win8RTM 640x480


__COMPAT_LAYER變量有一些我們感興趣的選項。有以下參數:
- 人類召喚者– 使用父進程的權限運行應用程序,而無需出現 UAC 提示;
- 跑得最高– 以用戶可用的最高級別權限運行程序(如果用戶具有管理員權限,則會出現UAC提示);
- 以管理員身份運行– 以管理員身份運行應用程序(UAC 提示將始終出現)。
這意味著 RunAsInvoker 參數不會授予管理員權限,它只是抑制 UAC 提示。
以下命令為當前進程啟用 RunAsInvoker 模式並在不提升的情況下運行指定的程序:
set __COMPAT_LAYER=RUNASINVOKER
start "" "C:Program FilesMyApptestapp.exe"
在 EXE 文件清單中啟用 RunAsInvoker 模式
如上所述,Windows 會為需要提升權限才能運行的程序顯示 UAC 盾牌圖標。開發者在程序中編譯應用程序時設置了這個要求顯現
您可以編輯任何 EXE 文件的清單並禁用在提升模式下運行程序的要求。
使用免費的資源黑客編輯程序清單的工具。在 Resource Hacker 中打開可執行程序。
在此示例中,我將編輯Autologon.exeSysinternals 提供的工具,可用於無需密碼自動登錄 Windows。
在左邊的樹中,轉到顯現部分並打開程序清單。請注意以下 XML 部分:
<requestedPrivileges> <requestedExecutionLevel level="requireAdministrator" uiAccess="false"/> </requestedPrivileges>
隨著需要管理員啟用該選項後,Windows 始終以管理員權限運行該程序。
將 requireAdministrator 更改為作為調用者並將更改保存到 .exe 文件。

請注意,現在 UAC 盾牌已從程序圖標中消失,您可以以當前用戶身份運行它,而無需詢問管理員密碼。
![]()
![]()
如果可執行應用程序文件使用數字簽名(代碼簽名證書)進行簽名,那麼在修改exe文件後,它可能會停止工作或顯示警告。
在這種情況下,您可以強製程序使用外部清單文件。創建純文本文件應用程序名稱.exe.manifest(例如,Autologon.exe.manifest)在包含 exe 文件的目錄中,並將 Resource Hacker 中的清單代碼複製到其中。將 requireAdministrator 替換為作為調用者。保存清單文件。
閱讀更多:如何在沒有密碼的情況下獲得 Windows 管理員權限
要使 Windows 在啟動 EXE 文件時始終嘗試使用外部清單文件,請啟用特殊的註冊表參數:
REG ADD "HKLMSOFTWAREMicrosoftWindowsCurrentVersionSideBySide" /v PreferExternalManifest /t REG_DWORD /d 1 /f
重新啟動 Windows 並確保該程序正在使用外部清單文件並且在沒有管理員權限的情況下運行。
創建一個快捷方式以使用保存的管理員密碼運行程序
如果運行程序的方法是人類召喚者標誌不適用於您的舊應用程序,您可以嘗試使用保存的管理員憑據在用戶會話中運行此類應用程序。這是在不授予用戶本地管理員權限的情況下運行程序的最不安全的方法,因此我們故意將其保留在最後。
要打開該程序,請在桌面上創建一個新的快捷方式。指定計算機名稱、本地管理員名稱以及目標應用程序可執行文件的完整路徑。
例如:
runas /user:wks-123root /savecred "C:CorpAppmyapp.exe"


當您第一次運行該程序時,它將打開一個命令提示符,要求您輸入管理員密碼。


RunAs 命令,當使用/SaveCRED選項,將用戶名和密碼保存到 Windows 憑據管理器。
下次運行快捷方式時,runas 工具將自動從憑據管理器獲取保存的密碼,並使用它在指定的本地管理員帳戶下運行應用程序(每次打開快捷方式時都不會提示您輸入密碼)。
以下命令列出了憑據管理器中保存的密碼:
RunDll32.exe keymgr.dll,KRShowKeyMgr


在 Windows 11 上啟動此類快捷方式時出現錯誤:
RUNAS ERROR: Unable to run - C:CorpAppmyapp.exe 740: The requested operation requires elevation.


要解決此問題,請更改快捷方式屬性中的命令。將其替換為:
C:WindowsSystem32runas /profile /user:WKS-123root /savecred "cmd.exe /C C:CorpAppmyapp.exe"


正如我們上面提到的,使用 /savecred 選項並不安全。這是因為在其個人資料中保存了管理員密碼的用戶可以使用它來運行任何具有提升權限的程序或命令,甚至重置管理員帳戶密碼。存儲在憑證管理器中的密碼也可以通過 Mimikatz 等工具以純文本形式轉儲,因此最好禁用已保存的密碼。
在 Windows 上,您可以使用組策略選項禁用在憑據管理器中保存密碼網絡訪問:不允許存儲網絡身份驗證的密碼和憑據(計算機配置 -> Windows 設置 -> 安全設置 -> 本地策略 -> 安全選項)。
有幾個第三方工具可以讓您解決在 runas 中使用存儲的管理員密碼的缺點。例如,管理員鏈接,搶奪者,運行方式Spc。這些應用程序允許您存儲加密的管理員密碼並以管理員權限安全地運行程序。這些工具不允許用戶使用保存的憑據運行任何應用程序或命令,因為它們在啟動時檢查可執行文件的路徑和校驗和。
