題 強製程序運行*沒有*管理員權限或UAC?


有什麼方法可以強制通常需要管理員權限(通過UAC)的程序在沒有它們的情況下運行嗎? (即:沒有UAC提示和 沒有系統範圍的訪問。)

補充:不修改可執行文件本身。


儘管詹姆斯的回答,我已經找到了一些方法 幾乎 完成:

  1. 通過修改可執行文件我可以刪除 trustInfo 清單中的條目(或完全清單,所以我可以使用外部清單),允許程序在沒有UAC的情況下啟動。不幸的是,這會修改可執行文件,因此在內部校驗和測試後不久就會退出。
  2. 通過使用Process Explorer,我可以將其作為受限用戶啟動。然而,這似乎比我想要的更多地限制它(它像保護模式IE一樣運行,所以可以訪問明顯少於我的標準未提升用戶可以)。

103
2017-08-04 13:49


起源


您指定不修改可執行文件,但修改.exe是您嘗試過的方法之一嗎? - cutrightjm
@ekaj我只指定了 後 我發現它不起作用;) - Andrew Russell
您是否可以指定該程序,即使您不再使用它?這可能有助於人們知道它想要訪問的內容需要管理員權限 - cutrightjm
@ekaj不幸的是沒有。然而,它並不是特別相關:UAC是由一個在創建過程期間要求提升的程序觸發的(通常的方式 - 就像在這種情況下一樣 - 帶有清單)。一旦進程啟動,它就無法更改其提升狀態 - 無論它嘗試訪問哪些受限資源。 - Andrew Russell
如果程序沒有清單並且拒絕在沒有管理員權限的情況下運行,則很可能是由於UAC安裝程序檢測。我發布了這個問題,misha256有一個很好的解決方案。我測試了它,我可以確認它有效。 superuser.com/questions/857616/... 我做了一些研究,發現安裝程序檢測沒有理由存在。請注意,如果管理員權限是由清單中的信任信息條目引起的,那麼顯然這不起作用。 - user1258361


答案:


Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT\*\shell\forcerunasinvoker]
@="Run without privilege elevation"

[HKEY_CLASSES_ROOT\*\shell\forcerunasinvoker\command]
@="cmd /min /C \"set __COMPAT_LAYER=RUNASINVOKER && start \"\" \"%1\"\""

保存此文本 <name_of_file>.reg 並將其添加到Windows註冊表。 (雙擊它應該可以解決問題。)

然後,右鍵單擊要在沒有管理權限的情況下運行的應用程序,然後選擇“無權限提昇運行”。

在某些情況下 - 少量0.1%的程序可能會詢問有關UAC提示的兩次。


62
2017-07-18 15:20



我以前使用應用程序兼容性工具包墊片,但這對於每個可執行文件來說都是很多工作,並且在註冊表中也為每個文件留下了垃圾。這種方法有效,我更喜歡它。 - Ben Voigt
接受這個似乎是最直接的方法,而且我(最後!)能夠驗證它。還具有非常好的特性,可以作為一次性命令行使用(刪除外部命令行) " 然後轉 \" 成 ")。 - Andrew Russell
@Vom - 你知道一個簡單的方法來獲取多次詢問的程序嗎?謝謝! - Derek
我有與@Derek相同的問題,應用程序似乎不斷重新詢問UAC,我不相信它與系統範圍的訪問,但我需要它的功能.. - Gizmo
@ jpmc26我覺得 /min 是一個錯誤。沒有它,解決方案的工作方式完全相同。 Vom必須混淆了 cmd 和 start 開關。看起來 cmd.exe 不抱怨錯誤的開關。嘗試 cmd /whatever, 例如。 - cdlvcdlv


存到 nonadmin.bat

cmd /min /C "set __COMPAT_LAYER=RUNASINVOKER && start "" %1"

現在,您可以將程序拖放到此處,無需管理員即可運行它們。

這不需要管理員權限,因為更改該註冊表項。此外,您不會混淆上下文菜單。

基於Vom的 回答


更新: 現在應該使用名稱中也包含空格的程序。


35
2017-10-02 11:27



我嘗試了一些需要訪問我的驅動器的程序,它無法檢測到它們或者首先沒有工作:/(rufus rufus.akeo.ie 例如) - keinabel
@keinabel那可能是因為他們實際上需要管理員工作。此腳本適用於需要管理員權限而無需實際執行需要管理權限的程序。對驅動器的原始訪問是一種典型的管理方式。 - Hjulle
很簡約!能夠使用此方法安裝XAMPP。 - Krishnaraj
對於我來說,對於“C:\ Program Files \ ...”目錄中的任何可執行文件,這似乎都不起作用。我得到了 Windows cannot find 'C:\Program'. Make sure you typed the name correctly, and then try again。我已經嘗試了幾次這個命令,但有輕微的變化,沒有運氣。有任何想法嗎? - Jake Smith
我有同樣的問題,文件的位置在空格的文件夾中。解決了它刪除一些雙引號:cmd / min / C“set __COMPAT_LAYER = RUNASINVOKER && start”“%1” - ragnar


我希望我參加派對的時間不會太晚,但我一直在尋找類似的問題而且沒有在這裡找到答案,我發現Windows內置了 RunAs命令,當以管理員身份運行時,可以使用 /trustlevel 開關。

RUNAS /trustlevel:<TrustLevel> program

/showtrustlevels  displays the trust levels that can be used
                  as arguments to /trustlevel.
/trustlevel       <Level> should be one of levels enumerated
                  in /showtrustlevels.

這適用於我的情況。 具有諷刺意味的是,在沒有提升的情 需要提升的命令提示符。去搞清楚。 :) 我希望它對你有所幫助。


31
2018-01-05 08:15



我可以確認這不起作用。我剛測試它並得到一個錯誤:“RUNAS ERROR:無法運行 - (程序名稱在這裡)。請求的操作需要提升”。 - user1258361
@ user1258361你必須從提升的提示符運行這個命令,就像我用粗體寫的那樣... - Mxx
它似乎不需要在Windows 7上提升提示... - SamB
使用提升的提示測試,使用命令行runas / trustlevel:0x20000(程序),程序仍以管理員身份運行。作為參考,0x20000是基本用戶。 - user1258361
需要提升的命令提示符......當然可以。否則你就是 已經 沒有管理員權限,你啟動的任何進程也將缺乏它們。 - Twisty Impersonator


如果您希望始終在沒有UAC的情況下運行特定應用程序,則可以使用註冊表將其定位(將文本添加到REG文件並將其導入註冊表):

Windows Registry Editor Version 5.00

[HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers]
"C:\\example\\application.exe"="RunAsInvoker"

不像這個答案,此解決方案不需要替代點擊或更改用戶交互。

微軟稱此過程添加了 RunAsInvoker  “兼容性墊片”


9
2017-09-09 20:16



一個不同但相關的問題的答案 為這個答案提供了靈感。 - palswim
非常感謝你!這是唯一對我有用的東西!我有從Windows上下文菜單調用的應用程序,它始終以管理員身份出現,儘管從其他地方正確調用它。完成此修復後,應用程序開始被正確調用。 - user
謝謝。另一個解決方案對我來說很好,但很高興看到墊片使用的底層機制是如何 應用的 到可執行文件。 - 0xC0000022L


我今天使用MS應用程序自定義工具包解決了這個問題。

我按照科技共和國文章中的說明操作: http://www.techrepublic.com/blog/window-on-windows/selectively-disable-uac-for-your-trusted-vista-applications/635

基本上:

1)你從MS獲得了 這裡 。

2)單擊“修復”

3)選擇 RunAsInvoker 選項

4)右鍵單擊該修復,然後選擇“安裝”


2
2018-05-18 01:05



你的答案與預期的效果完全相反。最初的問題是如何強制要求提升權限的應用程序在沒有提升的情況下運行。您的答案仍然使用UAC,但只是禁用該提示。對於這個問題,這是一個錯誤的答案。 - Mxx
@mxx實際上沒有。如果當前用戶受限(或者您已啟用UAC),則該過程將以完全有限的權限啟動。 - LogicDaemon
@LogicDaemon如果你真的讀過這篇文章,你會發現它解釋瞭如果你按照這些步驟, 您將在沒有UAC提示的情況下以管理員身份運行應用程序。這與OP要求的相反。 - Mxx
@mxx不。請繼續閱讀 的TechNet RunAsInvoker實際上做了什麼。這確實是開始要求的主題,儘管這僅適用於較舊的應用程序。 - LogicDaemon
只要Explorer,非管理員cmd或任何其他標准進程是父進程,RunAsInvoker將以相同的有限權限運行。 (資源管理器默認情況下運行受限制,否則它永遠不會要求你提升刪除文件。)它實際上似乎甚至可以用於新的應用程序。 RunAsInvoker意味著它繼承了完全相同的ACL令牌。 - SilverbackNet


我通過更改包含該程序的文件夾的權限來解決此問題。

我添加了每個將運行該程序的用戶並給予他們“完全控制”特權。這解決了問題,我沒有選中“以管理員身份運行”。

對於將運行該程序的用戶,我沒有任何安全問題。


0
2018-04-20 04:28





雖然安德魯在他的問題中表示以下內容並不奏效:

通過修改可執行文件,我可以從中刪除trustInfo條目   清單(或完全清單,所以我可以使用外部清單),   允許程序在沒有UAC的情況下啟動。不幸的是,這會改變   可執行文件,因此在內部校驗和後不久就會退出   測試。

我能夠修改我正在使用和更改的軟件的外部.manifest文件

<ms_asmv2:requestedExecutionLevel level="requireAdministrator" uiAccess="false" />

<ms_asmv2:requestedExecutionLevel level="asInvoker" uiAccess="false" />

原來我使用的軟件並不真正需要管理員權限,因此我可以在沒有UAC或管理員密碼的標準用戶帳戶上運行它。謝謝!


0
2017-07-21 02:56





不,如果一個程序需要UAC,那麼它正試圖訪問其沙箱之外的東西。沒有提升訪問權限,程序將無法正常運行。

如果您只想刪除通知,則可以禁用UAC。

在Windows Vista上禁用UAC:單擊“開始”,鍵入“user”。單擊“用戶帳戶”。在彈出的窗口中,單擊“用戶帳戶控制設置”,然後關閉UAC。

在Windows 7上禁用UAC:啟動,鍵入“user”。單擊“用戶帳戶控制設置”。將選擇欄一直拖到底部“從不通知”。


-3
2017-08-04 14:09



禁用UAC不是我想要實現的。另外:您對UAC如何工作的描述僅在一般意義上是正確的。當程序不嚴格需要時,程序可以請求UAC。 UAC在程序啟動之前發生 - 一旦程序運行,如果超出其權限,它將只是獲得權限拒絕錯誤。 - Andrew Russell
除了語義之外,您不能“禁用”特定程序的UAC通知,同時仍限制其訪問權限。 - James Watt
詹姆斯:實際上 - 看起來你可以 - 我已經更新了我的問題。 - Andrew Russell
如果找不到程序代碼本身,我很想知道一個有效的解決方案。 - James Watt