[文章]解決User Account Control相容性問題

User Account Control(簡稱UAC)使用者帳戶控制
所有登入的使用者(就算是Administrator)都只先取得Standard User的token
避免惡意程式直接以最高權限執行造成嚴重的後果

User Account Control(簡稱UAC)使用者帳戶控制
所有登入的使用者(就算是Administrator)都只先取得Standard User的token
避免惡意程式直接以最高權限執行造成嚴重的後果
只要是有盾牌符號的按鈕或是安裝檔、執行檔都是受到UAC控管的

運作的實際情形是若使用一般使用者登入
僅會取得Standard User Token
若碰到需要Administrator Token的操作時(例如修改系統時間、變更電腦名稱等)
系統會跳出UAC確認視窗供使用者key擁有足夠權限的帳號密碼
驗證正確後才暫時取得Administrator Token

若是Administrator登入則系統會產生上述兩個Token
但只能先取得Standard User Token
Administrator Token會先被隱藏起來
當操作的動作需要最高權限時
系統才跳出UAC確認視窗供使用者確認
但此時僅需點選確認即可,不需輸入帳號密碼
因此處只是確認要把隱藏的Administrator Token提出使用

雖然可以調整UAC的提示設定
設定哪些動作需要提示驗證、哪些動作不需要
但建議不要修改此處,以免安全性降低

相容性問題就出在於有些程式並無法理解UAC的機制
當然在安裝時就會失敗或意外中止
此時有四種解決方法可以避免掉這個問題

1.在安裝檔或執行檔(例.exe或.msi等)上按右鍵,選擇"以系統管理員身份執行"
此時系統就會自動提出Administrator Token來執行驗證
當然因權限不足的問題就解決了
但這個方法是每次要執行時都要執行一次,較為麻煩

2.原理和上面的方法一樣,好處是只需設定一次即可
在安裝檔或執行檔上按右鍵進入內容,在相容性頁籤中的"特殊權限等級區塊"
勾選"以系統管理員的身份執行此程式",接著確定即可

3.自動偵測當檔名為setup、install、update等時
會自動提取Administrator Token(但若使用一般user身份登入還是要key擁有足夠權限的帳號密碼)

4.此為微軟官方建議的最佳解法:Manifest
在與安裝檔或執行檔同一個資料夾中建立同樣檔名但多.mmanifest副檔名的檔案
(例如在與MyAdminApp.exe同資料夾中建立MyAdminApp.exe.manifest)
其中寫入一段語法即可,語法如下
  <trustInfo xmlns="urn:schemas-microsoft-com:asm.v3">
    <security>
      <requestedPrivileges>
        <requestedExecutionLevel level="requireAdministrator" />
      </ requestedPrivileges>
    </ security>
  </ trustInfo>

若想將manifest嵌入.exe,可使用Windows SDK中的MT.exe工具,指令如下
Mt.exe -manifest yourapp.manifest -outputresource:yourapp.exe


從諮商輔導人心
到諮商輔導資訊系統及網路世界
雖繞了一大圈 但都是極具意義的事
秉持著過去所學 朝著自己的興趣
體驗著一輩子只有一次的人生~~