天天看點

讓VC程式在Win7下獲得管理者權限

VC編譯出來的應用程式在win7或vista下運作,有可能因為權限問題,不能成功運作。

用下面的辦法,給應用程式添加一個manifest檔案,程式運作時系統就會跳出UAC對話框,獲得管理權限。

1.打開應用程式的源代碼工程

2.添加一個“custom”資源,"resource type"填24,把資源ID改為1,然後把以下内容複制到資源内容中儲存

<?xml version="1.0" encoding="UTF-8" standalone="yes"?> 
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0"> 
<assemblyIdentity 
  version="1.0.0.0" 
  processorArchitecture="X86" 
  name="mulitray.exe.manifest" 
  type="win32" 
/> 
<trustInfo xmlns="urn:schemas-microsoft-com:asm.v3"> 
  <security> 
    <requestedPrivileges> 
        <requestedExecutionLevel level="requireAdministrator" uiAccess="false"/> 
    </requestedPrivileges> 
  </security> 
</trustInfo> 
</assembly> 
           

3.重新編譯應用程式,此時會發現,廣用程式的圖示在Win7下會多出一個小盾标志。

這時輕按兩下的運作的時候,就會跳出框提示,擷取管理者運作。

--------------------------------------------------------------------------------------------------

上面的資源檔案裡有一個配置選項叫requestedExecutionLevel,  這個項用于配置目前應用請求的執行權限級别。這個項有3個值可供選擇,如下所示:

asInvoker : 如果選這個,應用程式就是以目前的權限運作。

highestAvailable: 這個是以目前使用者可以獲得的最高權限運作。

requireAdministrator: 這個是僅以系統管理者權限運作。

預設情況下是 asInvoker。highestAvailable 和 requireAdministrator 這兩個選項都可以提示使用者擷取系統管理者權限。那麼這兩個選項的差別在哪裡呢?他們的差別在于,如果我們不是以管理者帳号登入,那麼如果應用程式設定為 requireAdministrator ,那麼應用程式就直接運作失敗,無法啟動。而如果設定為 highestAvailable,則應用程式可以運作成功,但是是以目前帳号的權限運作而不是系統管理者權限運作。如果我們希望程式在非管理者帳号登入時也可以運作(這種情況下應該某些功能受限制) ,那麼建議采用 highestAvailable 來配置。

關于requestedExecutionLevel 設定的權威文檔請參考下面連結:

Create and Embed an Application Manifest (UAC)

繼續閱讀