Visual Studio 2008 如何設定 XBAP 成為 Full Trust Application

XBAP (XAML browser applications) 是利用 ClickOnce 技術將 WPF 應用程式透過 Web 瀏覽器加以佈署與使用的型式。由於考量 Internet 應用的安全性,XBAP 預設之安全設定是極為嚴格的,例如不允許使用 TCP/IP Socket,不允許檔案寫入,不允許存取下載伺服器以外之 Web 伺服器...,若應用程式需要使用這些能力,則必須將此 XBAP 應用程式設定為 Full Trust Application。

假設我們運用 Visual Studio 2008 開發一個簡單的 XBAP 應用程式如下,當按下按鈕btnGenerate 後則會寫入一個名為 test.txt 的文字檔案。

xbap1

程式碼動作如下

using System.IO;

.....

private void btnGenerate_Click (object sender, RoutedEventArgs e)

{

try

{

FileInfo FInfo = new FileInfo("test.txt");

StreamWriter Tex = FInfo.CreateText();

Tex.WriteLine("Hello World");

Tex.WriteLine("WPF XBAP Demo");

Tex.Write(Tex.NewLine);

Tex.Close();

TxtResult.Text = "檔案建立成功";

}

catch (Exception ex)

{

TxtResult.Text = "檔案建立失敗!! (" + ex.Message + ")";

}

}

當此應用程式於 Visual Studio 2008 環境下執行時,按下按鈕便會出現如下安全相關之錯誤訊息。這是因為 XBAP 預設是不允許寫入下載環境檔案系統造成的。xbap2

若要讓 XBAP 應用程式能夠做出寫入檔案的動作,可以在 Visual Studio 2008 的選單中選取此專案檔之 Property,將出現如下圖 Security 的頁面。在此頁面中我們可以看到 Visual Studio 2008 預設是採用 "This is a partial trust application" 的設定,此時我們必須手動點選 "This is a full trust application" 選項。

xbap3

在 Visual Studio 2008 內重新編譯後加以執行,按下此 XBAP 應用程式的按鈕建立檔案,如下圖所示,我們便會發現此 XBAP 應用程式已經可以正確執行寫入檔案的動作了。xbap5

但是 XBAP 佈署的問題尚未完全結束,當我們利用 Visual Studio 2008 的 Publish 功能成功地佈署到同一台 PC 的 Windows Vista II7 的環境後,再透過 Web 瀏覽器連接 localhost 加以測試,卻又發生了 "未授與信任" 的錯誤訊息。

xbap6

由於此一 XBAP 應用做出許多有可能危及 PC 安全的動作,也因此必須要讓使用者信任此一 XBAP 應用程,所謂信任的方式就是使用者必須手動匯入此應用程式之憑證 (Certificate)。這個匯入憑證的動作;在一個良好管理的企業內部網路,可以運用管理工具或 Windows Server Group Policy 自動化達成。但是在 Internet 應用時,只有讓使用者自行手動地匯入憑證。

可以在 Visual Studio 2008 的選單中選取此專案檔之 Property,接者點選 Singing 頁面。倘若我們勾選了Sign the ClickOnce manifests 的 Checkbox,則 Visual Studio 2008 預設便會產生一個與專案同名之 Temporary Key,例如專案名稱是 WpfBrowserApplication1 ,臨時用的憑證名稱就是 WpfBrowserApplication1_TemporaryKey.pfx。這個測試用憑證的詳細資訊我們可以按下同一畫面中的 More Details 按鈕,就會出現如下的畫面,告知此憑證的發行者與有效期限。

xbap7

為了讓您的 XBAP 或 ClickOnce 應用程式獲取更高層級的信任,您必須對每部將會執行應用程式的用戶端電腦,將應用程式憑證加入"受信任的發行者"的憑證存放區。如果我們應用程式做數位簽章的憑證並非知名的國際機構核發,當然 Microsoft Internet Explorer 內也不會內建於 "信任的根憑證授權"之中。

如下圖,我們可以利用 Microsoft Management Console (mmc.exe) 來了解目前安裝的憑證資訊,由Microsoft Management Console中我們可以知道,此一臨時用之應用程式憑證尚未被匯入 "信任的根憑證授權" (Trusted Root Certification Authorities) 與"受信任的發行者" (Trusted Publishers)。xbap8

回到 Visual Studio 2008 我們可以在專案檔之 Property ,接者點選 Singing 頁面。按下同一畫面中的 More Details 按鈕後,我們可以在憑證的對話方塊內按下安裝按鈕。並將此憑證置放到 "受信任的發行者"的憑證存放區。

xbap9 

此外也要將此憑證安裝到 "信任的根憑證授權"的憑證存放區。

xbap10

接下來再透過 Web 瀏覽器測試 localhost 便不會再出現 "未授與信任" 的錯誤訊息了。這類 XBAP 應用程式一旦通過憑證檢查並正確執行後,就會被 Cache 在 PC 端存放 ClickOnce Application 的 Cache 內,若想要快速清除 Cache 內的 XBAP 應用程式以便測試憑證相關設定,記得要利用 Windows SDK 內的工具程式 mage.exe,在 Console 模式中下達

mage -cc

即可立即清除 ClickOnce Application Cache 的內容。若是在沒有安裝 Windows SDK 的用戶端環境,則可以在命令列下達

rundll32 %windir%\system32\dfshim.dll CleanOnlineAppCache

一樣可以達到清除 ClickOnce Application Cache 的效果。