WIN7/WIN8/WIN10, Vista提供的UAC機制,它的主要目的是防止對于操作系統本身的惡意修改。
對于Delphi程序的影響,UAC主要在于以下幾點:
1、由于UAC機制,Delphi對于系統的操作可能無聲的失敗,而同樣的程序,在2000/X下面可能運行正常。譬如注冊表的改動。。。
2、為了避免這樣的情況,Delphi程序必須支持Vista UAC標注,也就是說,在UAC程序的圖標下面顯示盾牌標志。這樣可以在需要系統更高權限的時候,提醒用戶。
為了讓程序顯示UAC標志,現在看來Vista是通過讀取程序的資源(Resource)里面的MANIFEST資源,來決定是否顯示“UAC盾牌”。
為了支持UAC,Delphi程序必須在資源里面嵌入MANIFEST信息。
1、首先編輯一個文件,內容如下:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
<trustInfo xmlns="urn:schemas-microsoft-com:asm.v3"><security><requestedPrivileges><requestedExecutionLevel level="requireAdministrator"/></requestedPrivileges></security>
</trustInfo>
</assembly>
保持為UAC.manifest,這里文件是隨意的。特別注意紅色的“requireAdministrator”,這個表示程序需要管理員(Administrator)才能正常運行。
?UAC Manifest 選項:
<requestedExecutionLevel level="asInvoker" uiAccess="false" /><requestedExecutionLevel level="requireAdministrator" uiAccess="false" /><requestedExecutionLevel level="highestAvailable" uiAccess="false" />
2、然后編輯一個RC文件,名為uac.rc
1 24 UAC.manifest其中:<p>1-代表資源編號,24-資源類型為RTMAINIFEST,UAC.manifest-前面的文件名稱
</p>
3、用brcc32編譯這個rc文件為res文件brcc32 uac.rc -fouac.res
其中 -fo 設置輸出文件名
4、在Project程序里面加入:
{$R uac.res}
或者將3,4合并為:
{$R 'uac.res' 'uac.rc'},但是必須將uac.rc添加到項目中去。
讓Delphi編譯的時候,把uac.res編譯進exe文件
程序圖標下面顯示UAC盾牌標志了。
5、注意,這個程序不能運行在subst 虛擬驅動器上,否則會提示“指定路徑不存在”
6、在編譯時若產生錯誤:在project->options->application->enable runtime themes前面的勾取消,再編譯就可以了!