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)