2012年9月28日 星期五

執行Windows 8 Modern UI 風格應用程式的條件與相關設定(Notes to run Windows 8 applications)

Windows 8 介紹了新的動態磚風格Metro介面(目前已正式更名為Modern UI)和Metro應用程式(目前已正式更名為Windows 8 Modern UI 風格應用程式),但許多使用者可能會遭遇到無法順利執行Windows 8 Modern UI 風格應用程式的問題,這通常發生在下列的情況:

  • 使用者停用了『使用者帳戶控制』(User Account Control;UAC)功能
  • 使用內建的administrator執行Windows 8 Modern UI 風格應用程式
  • 螢幕解析度低於1024x768。

基於安全性設計和開發原則,Windows 8 Modern UI 風格應用程式利用一種稱為"AppContainer"的執行時期沙箱(Sandbox)來保護用戶安全性,這項安全性功能需要使用強制性存取控制(Mandatory Access Control)(以便管理員可以使用較安全的Low或Medium Mandatory Level標籤執行 ),而且藉助UAC的管理員批准模式(Admin Approval Mode)下所使用的分隔存取權杖(Split token;full access token 和 filtered standard user access token)之做法來實現安全性保護,所以在Windows 8環境下想要順利的執行Windows 8 Modern UI 風格應用程式的基本條件為:

  • 啟用 UAC (不能以EnableLUA =0 的方式完全停用UAC)
  • 啟用管理權杖篩選功能 (FilterAdministratorToken) 或管理核准模式(Admin Approval Mode)

除此之外,有些Windows 8 Modern UI 風格應用程式還必需以Microsoft ID的身份登入才能夠順利執行使用。

Windows 8使用者若基於某些特定的理由(特別是測試用途的機器),需要在較少限制的Windows 8 環境下順利執行Windows 8 Modern UI 風格應用程式,有時需要做些調整設定。

設定administrator可以執行Windows 8 Modern UI 風格應用程式

Windows 8 預設安裝時並沒有啟用內建的administrator帳戶,所以如果您利用命令指令 "net user administrator /active:yes" 或經由『電腦管理』工具內的『本機使用者和群組』來啟用了administrator帳戶,然後利用此內建的administrator帳戶登入,企圖執行Windows 8 Modern UI 風格應用程式,通常螢幕上會顯示一個類似下圖的『無法開啟此應用程式』錯誤畫面:

admindeny
這項錯誤的原因在於內建的administrator帳戶並未啟用管理權杖篩選功能 (FilterAdministratorToken) 或管理核准模式(Admin Approval Mode)功能,因而內建的administrator帳戶是以完全的管理特權之存取權杖(Access Token)和High mandatory Level標籤執行任何應用程式,而基於安全保護的理由,這是Windows 8 Modern UI 風格應用程式所不允許的,所以如果您想要讓內建的administrator帳戶可以順利的執行Windows 8 Modern UI 風格應用程式,只要替內建的administrator帳戶啟用管理核准模式(Admin Approval Mode)即可,做法是:

  1. 請按【Windows鍵 + R】以啟動【執行】視窗,然後輸入 "secpol.msc"來啟動【本機安全性原則】工具。
    secpol
  2. 由左邊樹狀目錄,開啟『安全性設定 / 本機原則 / 安全性選項』目錄後,並在右側窗格找到『使用者帳戶控制:內建的Administrator帳戶的管理員核准模式』項目,預設為『已停用』,請將其變更為『已啟用』。
    approva12
  3. 設定完成後,請關閉【本機安全性原則】工具,如果Administrator帳戶目前已在登入狀況,請重新登入,即可正常執行Windows 8 Modern UI 風格應用程式。

另一個啟用administrator帳戶的管理員核准模式方法是利用登錄編輯器(regedit),編輯下列機碼與值

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\ Policies\System →  FilterAdministratorToken

將FilterAdministratorToken值設成 1,然後再重新登入administrator帳戶。
filtertoken

底下簡略的說明 Administrator帳戶是否啟用了UAC核准模式,其底層運作的主要差別在於:

(一)登入後的工作階段不同

未啟用UAC核准模式的administrator帳戶登入後,只有一個擁有完全管理權限的存取權杖,所以它只能每次均用完全管理的存取權杖來執行應用程式,這有較高的風險,也是Windows 8 Modern UI 風格應用程式的AppContainer沙箱執行環境所不允許的,而一旦啟用了UAC核准模式的administrator帳戶登入,他將擁有二個登入的工作階段,一個使用完全管理權限的存取權杖,另一個則是受限制特權的存取權杖,利用第二個工作階段的受限制管理特權的存取權杖可以降低風險,可用來執行Windows 8 Modern UI 風格應用程式。

下圖以sysinternals的logonsessions程式可以看出啟用UAC核准模式之前與之後的administrator帳戶擁有的工作階段的不同:

logonsessions

(二)啟用前後執行應用程式的存取權杖不同

下圖為使用whoami指令於啟用管理員核准模式之前與之後,administrator存取權杖內有關於MAC標籤的不同:

whoami0

完全關閉 Windows 8 的UAC功能,等同停用Windows 8 Modern UI 風格應用程式

前面已經說明了Windows 8 Modern UI 風格應用程式的沙箱安全性保護功能需要使用者存取控制(UAC)功能,所以一旦您將Windows 8的UAC功能全部關閉,將意謂著系統會禁止執行Windows 8 Modern UI 風格應用程式,不過Windows 8 的UAC功能關閉方法與先前的Windows 7有些不同,因為在前版的Windows 7 使用者只要利用【控制台\使用者帳戶和家庭安全\使用者戶】內的『使用者帳戶控制設定』對話方塊,將滑標移至最下方的『不要通知』即可完整的關閉UAC。

不過在Windows 8 環境下,由於新型態的Windows 8 Modern UI 風格應用程式需要UAC 才能夠順利的執行,所以雖然您仍可以如同Windows 7的做法於『使用者帳戶控制設定』對話方塊,將滑標移至最下方的『不要通知』,但這並無法完整關閉UAC,而只是將UAC功能會出現的提示視窗降至最低,UAC的功能仍然存在運作。

我們可以利用sysinternals的process explorer或內建命令whoami就可以證實 Windows 8在僅設定『不要通知』的情況下並不會把UAC功能關閉,下圖為作者先利用『使用者帳戶控制設定』對話方塊,將滑標移至最下方的『不要通知』後,執行任何應用程式(在此例執行筆記本)後,再啟動 process explorer可觀察得之,具有管理員身份的使用者並未以最高完全管理特權的存取權杖來執行,這可從其使用的為Medium Mandatory Level整合等級看出,也意謂著UAC的功能仍然存在。

uacdeny

那麼Windows 8下應該如何完整的停用UAC功能,答案是透過登錄編輯器 (regedit),設定下列路徑的EnableLUA值為 0後,重新開機即可。

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System]
"EnableLUA"=dword:00000000

下圖說明了一旦完成上述的登錄資料庫設定後,再以process explorer工具驗證執行的程式,可知其使用完整管理權限的存取權杖執行之,表示UAC已經關閉了。

reguac

不過當您真的利用登錄編輯器將UAC功能關閉之後,任何人再也無法執行任何Windows 8 Modern UI 風格應用程式,會出現如下圖般的錯誤訊息。

denymetrop

總之,停用UAC不僅等同禁止執行Windows 8 Modern UI 風格應用程式,而且具較高的網路使用風險,一般並不建議如此的做法。

Windows 8 Modern UI 風格應用程式的解析度限制

執行Modern UI風格的應用程式還有一個螢幕解析度上的限制,亦即Windows 8 Modern UI 風格應用程式無法在解析度低於1024x768以下的螢幕執行,如果在解析度太低時執行Windows 8 Modern UI 風格應用程式將會得到如下圖的錯誤畫面:

screenlow

對於目前可能執行Windows 8的電腦設備,使用高於1024x768的螢幕解析度應該不是問題,但市面上有些較舊的小筆電(netbook)可能還在使用1024x600解析度,這樣的解析度通常無法執行Windows 8 Modern UI 風格應用程式,不過如果您真的使用這種低解析度的小筆電並且需要安裝執行Windows 8,倒是有個技巧可以試著騙過Windows 8系統,讓它以為您具有合格的解析度而允許執行Windows 8 Modern UI 風格應用程式,這項嘗試性的方法為:

  1. 執行登錄編輯器(regedit)。
  2. 由『編輯 / 尋找』選項來啟動『尋找』對話方塊,開始搜尋字串 "display1_downscalingsupported"。
    screenlow1
  3. 您可能會找到一個或一個以上符合的字串,如果有的話請將其值改為 1。 (若找不到此關鍵字那可能無法使用此一做法)。
  4. 重新開機
  5. 開機後重新登入,在螢幕解析度設定畫面中,就可以找到1024x768這個Windows 8 Modern UI 風格應用程式所支援的最低解析度,設定套用後即可執行Windows 8 Modern UI 風格應用程式。

上述的設定方式,並不見的適用所有小筆電,這通常和螢幕驅動程式有關,所以有些解析度不足的小筆電也可能無法使用。

結語

本文探討微軟Windows 8 作業系統所新介紹的Windows 8 Modern UI 風格應用程式的執行限制與條件問題,由於未來許多Windows 8 Modern UI 風格應用程式將會由網際網路下載安裝,所以具有較高的風險,微軟為了保護Windows 8 Modern UI 風格應用程式的執行安全性,因而採用了沙箱的程式設計架構,要求必須啟用 UAC 和管理核准模式(Admin Approval Mode)下才允許執行Windows 8 Modern UI 風格應用程式,所以除非您確認絕對不會在Windows 8系統上執行Windows 8 Modern UI 風格應用程式而且亦無安全性的顧忌,否則並不建議關閉UAC,若須要降低UAC的同意確認視窗次數,提升管理員執行的順暢度,只需要利用『使用者帳戶控制設定』對話方塊,將滑標移至最下方的『不要通知』即可。