在 Windows 8 中,我們全新引入了 WinRT 平台,帶給用戶包含動態磁貼和沉浸式用戶體驗的 Modern Apps。
如果您是企業用戶,有公司的代理服務器環境,或者您是開發人員,相信您已經發現了在本地連接更換代理後,所有 Modern Apps 都不再能訪問網絡。這是由於新的 WinRT 運行時的網絡隔離設計造成的。
為了實施新的安全性策略,讓 WinRT 平台上的應用更加安全,Modern Apps 在使用某項功能時,必須事先由開發者聲明。例如要使用網絡連接,就需要聲明,不僅要聲明需要網絡連接,還得聲明清楚需要哪一種類型的連接方式。由於實施了網絡隔離,所有的 Modern Apps 默認就不能使用IP環回地址進行進程間通信。當我們在 Internet 設置的連接設置裡,為 LAN 指定了代理服務器之後,Modern Apps 也就不能上網了,此時只有桌面版的應用程序才能通過代理服務器上網。(WinRT 有一定的能力能夠檢測到本地網絡的默認代理服務器從而使 Modern Apps 訪問 Internet,但像手動指定了 LAN 代理後,它就不能自動檢測到了。)
有時候,當公司裡面的默認網絡代理服務器不工作時,IT 管理員可能會要求用戶手動指定另外的 LAN 代理服務器,此時, Modern Apps 都不能上網了,著實郁悶,其實,我們有兩種辦法解除網絡隔離的限制,讓 Modern Apps 在特殊時期也能上網:
法一:使用組策略為網絡隔離環境指定 Internet 代理
打開本地組策略編輯器,展開"計算機配置"-"管理模版"-"網絡"-"網絡隔離",我們可以看見如下幾個設置項:
我們可以編輯"應用的 Internet 代理服務器",來指定一個 Internet 代理。注意,這裡指定的代理得與你在桌面IE選項的連接設置裡指定的LAN代理一致,這樣 Modern Apps 才能具備訪問互聯網的基礎。沒錯,這只是個基礎,因為,僅指定這一項的話,你添加的代理與系統檢測到的代理是一個並集,由於自動檢測的優先,而在桌面指定了 LAN 代理後,自動檢測的代理與手動指定的 LAN 代理不一致,結果還是不能上網。所以為了 Modern Apps 能上網,我們還需啟用"代理定義權威"這一項,讓 Modern Apps 只使用這裡指定的代理。
法二:使用 Win8 內置的調試命令集為具體 App 添加網絡隔離排除
Windows 8 內置了一個命令行工具,是為了方便 Modern Apps 開發者診斷網絡問題的。我們可以利用它來把某些 Modern Apps 添加到網絡隔離排除列表:
這裡我們使用其中的 LoopbackExempt 參數即可實現我們的需求。對於這個參數,它的使用還有具體的二級參數需要指定。
程序幫助說的很明確了,因此這裡不再列表贅述。這裡,我想提醒大家的是,由於 AppContainer 或者程序包的 SID 較難尋找(需要借助注冊表),我個人建議大家使用 –n=[Name] 的方式來通過 AppContainer 或者程序包名來操作網絡隔離豁免。因為獲取名稱的方式很簡單,只要你打開 %LocalAppData%Packages 路徑,下面的各個文件夾的名稱就是各個 Modern Apps 的名稱,可供使用, 方便復制粘貼。
從圖中可以看出,識別這些 App 究竟對應開始屏幕裡面哪個 Modern App 其實並不難,因為文件夾的部分就是該程序的名稱。例如我們可以看見最後一個,"WinStore_cw5n1h2txyewy",它無疑就是"應用商店"這個應用的內部名稱。
這裡,我們假設現在默認的代理服務器壞了,我在桌面環境設置了 LAN 代理,這時,我需要使用應用商店更新我的幾個應用程序,那麼,我就要為它添加網絡隔離豁免了:執行"CheckNetIsolation.exe LoopbackExempt -a -n=WinStore_cw5n1h2txyewy",便將應用商店添加到豁免列表了。
要驗證豁免列表,我們使用"CheckNetIsolation.exe LoopbackExempt -a -s"命令即可:
要刪除某個豁免,將添加豁免的命令中的 -a 參數換為 -d 即可,要快速全部清除列表內容,執行"CheckNetIsolation.exe LoopbackExempt -c"。
比較以上兩種辦法,我個人還是建議大家使用第二種辦法。原因有兩個:
其一,組策略法中,無法為隔離網絡指定代理服務器的代理端口,所以,使用非80口的應用可能還是不能正常工作。例如,應用商店在這樣設置時,只能浏覽應用,無法更新軟件和下載軟件。
其二,使用 CheckNetIsolation 可以方便地控制和查閱豁免情況,而且,沒有什麼端口的限制,程序功能完全正常。而且,對於 IT 專業人士而言,這個可以集成到代碼中去,並且代碼可復用,可自動化控制。
而在第二種方式裡面,建議大家使用 -n=[AppName] 的形式添加刪除豁免比使用 -p=[AppSID] 不僅要好在上面提到過的便捷性,而且,像 Store 這樣的特殊 Modern App,它在注冊表的 HKCUSoftwareClassesLocal SettingsSoftwareMicrosoftWindowsCurrentVersionAppContainerMappings 下面根本就沒有對應的 SID 顯示出來。在上面通過名稱添加 Store 豁免,並且查閱豁免列表後,我們發現 Store 的 SID=S-1-15-2-2608634532-1453884237-1118350049-1925931850-670756941-1603938316-3764965493.