Mauro Sant'Anna
Microsoft Regional Director
摘要:查看 ClickOnce 技術、將其與其他部署技術進行比較以及展示如何在應用程式中使用該技術。
簡介
ClickOnce 是 Visual Studio 2005 中即將包含的全新的 Windows 表單部署技術。該技術使用智能用戶端簡化 Web 應用程式的安裝和升級。自 .NET Framework 的第一個版本以來,Windows 表單應用程式部署就一直可以通過 HTTP 進行,並且自那時起就一直處於發展之中。本文討論了 Windows 表單應用程式的優勢以及引發 ClickOnce 出現的表單應用程式的技術進展。我還將使用發布的 Visual Studio 2005 Beta 1 版展示一個簡單的樣本。
為什麼要使用 Windows 表單?
由於全球資訊網的出現,大多數使用者和開發人員都對 Web 應用程式比“常規的” Windows 應用程式表現出更大的興趣。除了“酷炫因素”之外,Web 應用程式還具有一些引人入勝的特殊特性:
• |
在全球任何具有 網際網路連線的地方,都可以訪問 Web 應用程式,用戶端甚至不需要運行 Windows。當您的應用程式需要常見的訪問時,“純 Web”應用程式是一種非常好的技術。 |
• |
Web 應用程式易於部署和更新:只需要將應用程式檔案複製到 Web 服務器的目錄中,您的所有用戶端可以立即開始使用新的應用程式。沒有 DLL 地獄、沒有糾纏不清的登錄機碼、沒有需要註冊的 COM 類別,它就能很好地工作! |
本文重點討論上述第二項:部署。Web 應用程式使用的 HTTP 協議相對於傳統的 Windows 應用程式部署具有多種優勢。
另一方面,正如我熱愛 Web 一樣,很難說使用者對 Web 的體驗是第一流的。與 Windows 應用程式相比,Web 應用程式也存在幾個不足之處:
• |
其使用者介面非常簡單。在 Windows 應用程式中一些理所當然的功能(如拖放和按右鍵滑鼠),在 Web 應用程式中也非常難於操作甚至不能實現。 |
• |
即使我們要設法實現豐富的介面技巧,也通常需要大量的用戶端指令碼(一種非常難編寫和調試的代碼)。 |
• |
Web 應用程式使用大量的伺服器資源、頻寬以及使用者的耐心,因為大部分事情都在伺服器上執行,需要往返行程和等候。 |
• |
列印也受到“列印螢幕技術”的限制,由於字型、頁面邊界以及紙張大小不同,對許多操作(如分頁)都幾乎不能控制。 |
• |
儘管其中有些問題可以通過使用外掛程式或 ActiveX 控制項得到緩解,但是反過來又可能存在一些部署問題,它們與非 Web 應用程式過去常有的部署問題相同。 |
如果我們將 Web 應用程式的易於分發與 Windows 應用程式的豐富用戶端體驗相結合,將會怎麼樣?好,我們可以將它們相結合。從 .NET Framework 的第一個版本起,它就允許通過 HTTP 分發 Windows 表單應用程式,而沒有出現常見的問題。
這種類型的應用程式尤其適用於不要求常見訪問的 Intranet/Extranet 環境,我們假設終端使用者的電腦都將安裝有 Internet Explorer 和 .NET Framework。
.NET Framework 1.x: HREFing .EXEs
.NET Framework 1.0 和 1.1 版都是“開包即用”,能夠通過 HTTP 部署 Windows 表單應用程式。您只要使用 "HREF" 標記指向託管的 .EXE。Internet Explorer 和 .NET Framework 運行庫可以按需下載並運行可執行檔及其所需的 DLL。這種類型的部署暱稱為“hrefing EXE”。
以下是這種標記的一個樣本:
<a href="MainProject.exe">Call MainProject</a>
標記非常簡單,推薦參閱以下幾篇文章,它們已經對此進行了討論:
• |
Security and Versioning Models in the Windows Forms Engine Help You Create and Deploy Smart Clients 作者:Chris Sells;也可以參閱他的 smart client Wahoo! sample |
• |
Death of the Browser? 作者: Billy Hollis |
• |
我的文章 Deploy Windows Forms on the Web |
• |
Using Windows Forms Controls in Internet Explorer |
因為 .NET 程式集(.EXE 或 .DLL)是基本的部署單元,所以您要將應用程式拆分成主 .EXE 和多個 DLL。這樣,如果對單個 DLL 進行簡單修改,則只需要下載此 DLL。
聽起來似乎很容易,但是要使其正確工作,仍然需要一些技巧:
• |
用戶端上此前必須已經安裝了 .NET Framework(儘管可以從 http://msdn.microsoft.com/vstudio/downloads/tools/bootstrapper/ 下載外掛程式,使安裝 Framework 和您的應用程式變得更簡單)。 |
• |
您的應用程式將作為部分受信任的代碼在用戶端上運行。一方面,這樣做非常合適,因為應用程式在沙箱中運行,而且可限制它對用戶端電腦的操作。另一方面,如果需要諸如開啟本地檔案或調用 COM 物件等功能,則必須以某種方式在用戶端上設定安全性原則,這一點很重要。 |
• |
預設情況下,可執行檔很有可能試圖載入多個含有本地化資源的 DLL;由於當前實現中的某些問題,效能將會受到影響(尤其在較慢的 Internet 連結中)。 |
• |
更新以檔案到檔案為基礎進行;例如,無法保證確實已下載了全部 10 個更新檔案;用戶端可能無法擺脫“半更新的”應用程式。 |
• |
只有使用者在 Internet Explorer 中手動設定為“離線工作”時,才能離線使用應用程式;應用程式本身不能對其進行控制。 |
• |
預設情況下,不能使用與程式關聯的 .config 檔案(單擊此處瞭解如何使用)。 |
• |
您的應用程式不會在案頭或 Start 菜單中添加捷徑。 |
更新應用程式塊
為瞭解決以上提出的一些問題,Microsoft 建立了 更新應用程式塊 (UAB)。該更新塊是一個庫,您可以將其添加到應用程式中,這樣,就可以通過 HTTP 管理應用程式塊的下載。
有別於最初的 Framework 實現,它具有以下一些優勢:
• |
它作為本地應用程式運行,並且可在任何時候使用,不會對效能造成影響。 |
• |
更新是交易處理,即在新版本可用之前必須成功下載所有新版本的檔案。 |
• |
所有應用程式檔案都以清單形式列出。 |
• |
它作為完全信任的應用程式運行,您不需要調整用戶端安全性原則。 |
• |
您的應用程式會在 Start 菜單上添加捷徑。 |
另一方面,還有一些不足:
• |
為了使用應用程式,您必須對其進行較大的修改。 |
• |
由於使用 BITS 下載應用程式塊,因此它不能在 Windows 98/ME 中運行,而只能在 Windows 2000 或更高版本中運行。 |
• |
它作為完全受信任的本地應用程式運行,因此,它幾乎忽略代碼訪問的安全性。 |
• |
Microsoft 沒有為它提供支援。 |
有關 UAB 的更多資訊,請參閱 Jamie Cool 撰寫的 .NET Application Updater Component。您也可以參閱 Gotdotnet 上的 the home of the UAB。雖然 UAB 沒有獲得“官方的”支援, 但是 www.gotdotnet.com 網站上有一個論壇。無論如何,UAB 帶有完整的原始碼,您可以對其進行修改,以修補其中的一些限制(如需要 BITS 和 Windows 2000)。
ClickOnce
很明顯,UAB 只是一種過渡措施,期間 Microsoft 開發了一個最終的解決方案。此解決方案就是 ClickOnce。ClickOnce 基本上具有 UAB 的所有優勢,但卻幾乎沒有其不足,而且還外加 了一些新增功能。在我看來,ClickOnce 的一個主要優勢就是它恢複了代碼訪問的安全性。
與 HREF EXE 相比,ClickOnce 應用程式具有如下優勢:
• |
更新是交易處理(即,要麼完全執行,要麼根本不執行)。 |
• |
該應用程式不但可以離線工作,而且還可以對其進行某種程度的控制;有一些 API 可使應用程式發現它是聯機或離線;它還可以控制其自身的更新過程; |
• |
它可以與 Visual Studio .NET 進行良好的整合,包括能夠產生合適的額外檔案和工具,協助您找到運行應用程式所需的安全許可權。 |
• |
它具有一個可下載必要元件(甚至 .NET Framework 自身)的 Win32“bootstraper”可執行檔。 |
• |
可以按需要或以批處理方式下載應用程式檔案; |
• |
它可在 Start 菜單中添加捷徑; |
ClickOnce 是 Visual Studio 2005(以前的開發代碼名為“Whidbey”)和 .NET Framework 2.0 的一個功能。讓我們來看使用“Community Preview Beta 1”(Framework 2.0.40607 版)的一個樣本。
一個 ClickOnce 應用程式
我們遵循以下步驟來建立一個簡單的 ClickOnce 應用程式。
1. |
啟動 Visual Studio 2005。 |
2. |
選擇 File,然後單擊 New Project。 |
3. |
選擇一種語言(C# 或 Visual Basic .NET)並選定 Windows 應用程式。 |
4. |
將項目命名為 MyClickOnceApp 並單擊“確定”。 |
5. |
向表單中添加一個按鈕,並將其 Text 屬性更改為 About。 |
6. |
雙擊該按鈕。在代碼視窗中輸入以下代碼。 Visual Basic .NET: MsgBox("My First ClickOnce Application") C#: MessageBox.Show("My First ClickOnce Application"); |
按下 F5 鍵運行並測試應用程式。
在 Visual Studio 2005 中,所有的 Windows 應用程式在 Project | MyClickOnceApp Properties 中都有一個 Publish 頁,可控制部署詳細資料:
圖 1. 配置發布設定
Publishing Location 表示將從其部署應用程式的位置。它可以是一個 Web 服務器 (HTTP) 位置(如前所示),但是,也可以是一個常規的網路路徑。
Install Mode and Settings 控制多種部署詳細資料,例如:
• |
應用程式是僅支援聯機使用還是也支援離線使用。 |
• |
Application Files:單個檔案的安裝位置。 |
• |
前提條件:安裝程式是否必須安裝其他組件,例如 Windows Installer 2.0、.NET Framework 2.0、J# Redistributable Package、SQL Server 2005 Express、Crystal Reports 以及 Microsoft Data Access Components 2.8。 圖 2. 配置前提條件 |
• |
Updates:控制應用程式應在何時檢查更新以及如何向用戶端提供這些更新。 圖 3. 配置更新 |
• |
選項:調整詳細資料,例如應用程式語言、Start 菜單捷徑資源名稱、用於 Web 部署的 HTML 頁以及部署策略票據。 圖 4. 配置發布選項 |
Publish Version 調整應用程式版本號碼;每次部署時版本號碼可以自動增加。
Publish Wizard 允許設定不同的發布選項。該嚮導還可以通過 Build | Publish 菜單調用。所有的 ClickOnce 應用程式必須以加密方式進行簽名;該嚮導請求一個現有密鑰(推薦)或產生一個新密鑰。
圖 5. 對應用程式進行簽名
在運行一次該嚮導之後,就可以單擊 Publish Now 發布更新。在我們的樣本中將顯示一個 Web 頁。
圖 6. 發布的應用程式
該 Web 頁包含一個指令碼,它檢查在安裝應用程式之前必須安裝哪一個額外的“前提條件”安裝包。如果沒有“前提條件”,則會在應用程式首次運行時安裝。
在使用者單擊 Install 連結後,會出現多個可能要求使用者幹預的對話方塊(至少首次運行時要求使用者幹預):
• |
Windows XP SP2 警告 |
• |
軟體許可協議 |
• |
缺少發布方簽名認證 |
部署詳細資料
Visual Studio .NET 2005 將為應用程式建立一個具有多個檔案和檔案夾的新 Web。
圖 7. 部署檔案夾
dotnetfx 檔案夾包含可重新發布的 .NET Framework(目前為一個 25 MB 的可執行檔)。
預設情況下,Visual Studio 將在每次部署應用程式時增加版本號碼;每個版本將獲得一個與增加版本號碼相對應的新檔案夾。
.application 檔案是 HTML 頁 publish.htm 中顯示連結的目標。它是一個包含資訊(如與應用程式目前的版本和當前數位簽章相對應的檔案夾)的 XML 檔案。
Publish.htm 是一個 Web 頁,不僅包含指向 .application 檔案的連結,而且包含一些用戶端指令碼可以進行某些版本檢查並顯示相應的資訊。例如,如果您的電腦沒有 .NET Framework,Install MyClickOnceApp 將會顯示不同的訊息。
Setup.exe 是一個 Win32 可執行檔,不僅可以安裝應用程式,而且可以按正確的次序安裝必需的組件(如 .NET Framework 自身和 MDAC 2.8)。
每個應用程式檔案夾包含應用程式的檔案和資訊清單檔。清單是一個 XML 檔案,主要包含如下資訊:
• |
所有應用程式檔案的確切身份。該身份包含檔案名稱、版本號碼、地區性以及處理器體繫結構(本樣本中為“msil”)。 |
• |
應用程式所需的所有許可權。 |
• |
數位簽章。 |
運行應用程式
應用程式下載完成後,可以運行它而不用再次下載。在我們的樣本中,可以通過單擊指向 Web 頁的連結或 Start 菜單中的捷徑啟動應用程式。在這兩種情況下,根據 Application Updates 項目選項中的設定可以檢查是否存在新版本。需要時可以下載新版本。
要檢查更新功能,請按如下步驟操作:
1. |
對應用程式進行一次可見的更改,例如更改表單上按鈕的位置。 |
2. |
再次構建按鈕並部署。 |
3. |
運行應用程式並檢查下載過程。 |
最後請注意:該資訊是基於 Visual Studio .NET Beta 1 版的,這一點非常重要;新版本可能具有不同的功能。
比較圖表 |
|
HREF .EXE |
UAB |
ClickOnce |
應用程式不要求更改 |
X |
|
X |
應用程式隔離 |
X |
|
X |
完全支援 |
X |
|
X |
較低的系統影響 |
X |
|
X |
保留代碼訪問安全 |
X |
|
X |
按需檔案下載 |
X |
|
X |
以聲明方式列出的必需檔案的清單 |
|
X |
X |
以加密方式簽名的清單 |
|
|
X |
批次檔下載 |
|
X |
X |
離線工作 |
(*) |
X |
X |
交易處理安裝 |
|
X |
X |
最佳效能 |
|
X |
X |
Windows 2000 或更高版本要求 |
|
X |
(**) |
Windows 外殼整合 |
|
X |
X |
對更新過程的正確控制 |
|
X |
X |
離線工作和控制下載過程的 API |
|
X |
X |
可選包的自動安裝 |
|
|
X |
(*) 要求使用者幹預
(**) 對測試版產品來說還為時過早
小結
ClickOnce 是一種功能非常強大的應用程式部署技術。它是以前所用的部署模式的自然發展,為具有豐富用戶端體驗的 Windows 表單應用程式提供了可靠性、安全性、效能和靈活性。
關於作者
Mauro Sant'Anna (mas_mauro@hotmail.com) 是 Microsoft 的一名地區經理,MCSD、MCSE、開發人員和培訓師。自從.NET 在奧蘭多 PDC 2000 上公開發布以來,他是第一個信徒。
轉到原英文頁面