UAC即Windows 用戶帳戶控制級別以及app.manifest清單選項,如何自動以管理員身份運行.NET程序


UAC即Windows 用戶帳戶控制級別以及app.manifest清單選項requestedExecutionLevel level=“requireAdministrator“ uiAccess=_LongtengGensSupreme博客-CSDN博客

 

UAC即Windows 用戶帳戶控制級別

UAC是專門控制用戶帳戶訪問控制的,簡單說UAC就是控制用戶可以訪問Windows系統中的中的哪些信息,不可以訪問哪些信息以及安裝時候UAC(用戶賬戶控制)會根據當前系統的用戶賬戶控制級別提示/不提示運行安裝信息

UAC(用戶賬戶控制)設置有2種方式

1、控制面板\用戶帳戶\用戶帳戶 選擇  更改用戶帳戶控制設置

 

2、通過程序處理app.manifest清單選項設置requestedExecutionLevel level

     通過程序處理app.manifest清單選項設置requestedExecutionLevel level,

    app.manifest清單選項文件創建有2種方式

         1、項目右鍵,點擊添加文件,找到程序清單文件 創建app.manifest清單文件

 

         2、可以通過  項目右鍵 選擇  屬性  安全性  勾選 啟用ClickOnce 安全設置(N)  自動生成一個app.manifest清單文件,然后取消勾選 啟用ClickOnce 安全設置(N)

 

上述2種方式創建app.manifest清單文件之后需要設置,如下:

 1、如果事想在程序運行的時候擁有管理員權限的話,需要設置requestedExecutionLevel level="requireAdministrator" uiAccess="false",設置以后就可以操作一寫需要特殊權限的文件了,如:C:\program files ,C:\program files x86 ,C:\Windows\system32,注冊表讀寫等等

 

 

 2、設置requestedExecutionLevel中的level可以設置需要的權限功能,而uiAccess可以用來做一些其他處理,例如 需要特殊權限的文件的讀寫,

可以設置requestedExecutionLevel level="requireAdministrator" uiAccess="false",uiAccess也可以設置程序窗體的置頂,

這里的程序置頂可以設置比系統界面更高的置頂,也就是說可以比一些系統級別的置頂還要高,如任務管理器一樣絕對置頂

 

 

 效果如下:

 

 

 

新建winform窗體項目,添加app.manifest清單文件之后需要設置 requestedExecutionLevel level="asInvoker" uiAccess="true",

App.Manifest 文件中設置 requestedExecutionLevel level="asInvoker" uiAccess="true"


 

設置窗體的2個屬性


 

 

注意:可能遇到的問題

 

 

解決方法是“以管理員權限啟動此程序”。

 

 

啟動效果如下:

 

原文參考鏈接:http://blog.walterlv.com/post/run-desktop-application-above-windows-application.html

讓你的程序置頂到比系統界面都更上層,就像任務管理器/放大鏡一樣絕對置頂

 

啟動系統自帶的放大鏡程序,我們會發現即便進了 Windows 8 的開始屏幕,或打開了 Windows 10 的開始菜單和消息中心,它也依然顯示在最頂層。如果你為任務管理器開啟置頂效果,你會發現它也能顯示到開始屏幕的頂層。這是怎么做到的呢?


順便解釋下“桌面應用程序”,指的是傳統 Win32 應用程序。解釋下“Windows 應用”,指的是開始屏幕/開始菜單/UAP/UWP 甚至是鎖屏界面這些。

方法

做到這些,需要四個步驟,缺一不可:

第一步:修改 Manifest

前往你程序的 App.Manifest 文件,設置 requestedExecutionLevel

 
1
<requestedExecutionLevel level="asInvoker" uiAccess="true" /> 

第二步:修改窗口屬性

這兩個屬性是必須設置的,否則無法達到目的。

 
1
2
ShowInTaskbar=true TopMost=true 

第三步:為程序簽名

參見此處 - 為程序簽名

第四步:將程序放到受信任的目錄下

 
 
C:\program files
C:\program files x86
C:\Windows\system32

可能遇到的問題

從服務器返回了一個參照

A referral was returned from the server.

從服務器返回了一個參照

感謝 胡承 提供的錯誤和解決方法!

你可能會在按照以上步驟操作后,在執行程序時遇到這樣的錯誤,解決方法是“以管理員權限啟動此程序”。


參考資料

How to make Windows 8 desktop apps shown in Metro UI (like Task Manager)?
https://stackoverflow.com/questions/12873323/how-to-make-windows-8-desktop-apps-shown-in-metro-ui-like-task-manager

Code Signing Notes
http://techsupt.winbatch.com/webcgi/webbatch.exe?techsupt/nftechsupt.web+WinBatch/Manifest+Manifest~Faqs.txt

UIAccess in Manifest Files
https://social.msdn.microsoft.com/Forums/windowsdesktop/en-US/4d2e1358-af95-4f4f-b239-68ec7e2525a9/uiaccess-in-manifest-files

Debug Applications with uiAccess Set to “True”
http://blogs.techsmith.com/inside-techsmith/devcorner-debug-uiaccess/

Debugging with uiAccess=true
https://social.msdn.microsoft.com/forums/windowsdesktop/en-us/7a42efab-5ce8-456f-8a58-dfedbc2cefcb/debugging-with-uiaccesstrue

本文會經常更新,請閱讀原文: https://blog.walterlv.com/post/run-desktop-application-above-windows-application.html ,以避免陳舊錯誤知識的誤導,同時有更好的閱讀體驗。

知識共享許可協議

本作品采用 知識共享署名-非商業性使用-相同方式共享 4.0 國際許可協議 進行許可。歡迎轉載、使用、重新發布,但務必保留文章署名 呂毅 (包含鏈接: https://blog.walterlv.com ),不得用於商業目的,基於本文修改后的作品務必以相同的許可發布。如有任何疑問,請 與我聯系 (walter.lv@qq.com) 。

如何自動以管理員身份運行.NET程序

 windows 7和vista提高的系統的安全性,同時需要明確指定“以管理員身份運行”才可賦予被運行軟件比較高級的權限,比如訪問注冊表等。否則,當以普通身份運行的程序需要訪問較高級的系統資源時,將會拋出異常。

  如何讓程序在啟動時,自動要求“管理員”權限了,我們只需要修改app.manifest文件中的配置項即可。

  app.manifest文件默認是不存在的,我們可以通過以下操作來自動添加該文件。

(1)進入項目屬性頁。

(2)選擇“安全性”欄目。

(3)將“啟用ClickOnce安全設置”勾選上。

  現在,在Properties目錄下就自動生成了app.manifest文件,打開該文件,將trustInfo/security/requestedPrivileges節點的requestedExecutionLevel的level的值修改為requireAdministrator即可。如下所示:

  1. <requestedPrivileges xmlns="urn:schemas-microsoft-com:asm.v3">
  2. <!-- UAC 清單選項
  3. 如果要更改 Windows 用戶帳戶控制級別,請用以下節點之一替換
  4. requestedExecutionLevel 節點。
  5. <requestedExecutionLevel level="asInvoker" uiAccess="false" /> 此項默認
  6. <requestedExecutionLevel level="requireAdministrator" uiAccess="false" />
  7. <requestedExecutionLevel level="highestAvailable" uiAccess="false" />
  8. 指定 requestedExecutionLevel 節點將會禁用文件和注冊表虛擬化。
  9. 如果要利用文件和注冊表虛擬化實現向后
  10. 兼容性,則刪除 requestedExecutionLevel 節點。
  11. -->
  12. <!--<requestedExecutionLevel level="asInvoker" uiAccess="false" />-->
  13. <requestedExecutionLevel level="requireAdministrator" uiAccess="false" />
  14. </requestedPrivileges>

  記住,如果不需要ClickOnce,可以回到項目屬性頁將“啟用ClickOnce安全設置”不勾選。   

  接下來,重新編譯你的程序就OK了。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM