管理員權限

既然微軟的啓發式安裝程序檢測這麼弱智,那麼我們只好自己麻煩一下,簡單地爲應用程序添加一個Manifest文件,告訴操作系統我們到底是不是安裝程序,是否需要請求管理員權限。如果應用程序的源代碼無法獲得,我們只需要在應用程序的同一目錄下爲應用程序添加一個外部Manifest文件。這個Manifest文件的名字應該是應用程序文件名加上“.manifest”後綴。例如,StockUpdater.exe的Manifest文件的文件名應該是StockUpdater.exe.manifest。這個Manifest文件應該指明此應用程序在運行的時候是否需要申請管理員權限,或者是否在普通用戶權限下就可以正常運行。

  一個典型的外部Manifest文件如下所示:

<?xmlversion="1.0"encoding="utf-8"?>
<asmv1:assemblymanifestVersion="1.0"xmlns="urn:schemas-microsoft-com:asm.v1"xmlns:asmv1="urn:schemas-microsoft-com:asm.v1"xmlns:asmv2="urn:schemas-microsoft-com:asm.v2"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    
<assemblyIdentityversion="1.0.0.0"name="MyApplication.app"/>
    
<trustInfoxmlns="urn:schemas-microsoft-com:asm.v2">
        
<security>
            
<requestedPrivilegesxmlns="urn:schemas-microsoft-com:asm.v3">
                
<!-- UAC Manifest 選項
          
<requestedExecutionLevel  level="asInvoker" uiAccess="false" />
          
<requestedExecutionLevel  level="requireAdministrator" uiAccess="false" />
          
<requestedExecutionLevel  level="highestAvailable" uiAccess="false" />
         
-->
         
         
<requestedExecutionLevellevel="asInvoker"uiAccess="false" />
              
</requestedPrivileges>
           
      
</security>
      
</trustInfo>
    
</asmv1:assembly>

 

  其中,requestedExecutionLevel屬性就表示我們的應用程序正確執行所需要的權限。它有這樣幾個可選值:

  • asInvoker – 它表示應用程序需要跟創建者相同的權限運行。也就是跟Windows Explorer相同的權限運行,通常就是普通用戶權限。這個應用程序不是安裝程序並且不會被啓發式安裝程序檢測錯誤地標記。

  • requireAdministrator – 它表示這個應用程序需要管理員權限才能正常運行。(它可能是一個安裝程序。)

  • highestAvailable – 它表示這個應用程序應該以儘可能高的權限運行。如果當前用戶是一個管理員用戶,那麼它就等同於requireAdministrator 。如果當前用戶是普通用戶,那麼它會在運行的時候請求管理員權限。

  當我們爲應用程序添加外部Manifest文件後,操作系統會根據Manifest文件中的定義爲應用程序制定相應的UAC規則。例如,我們可以通過外部Manifest文件,爲一個自定義的安裝程序在執行時請求管理員權限。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章