ClickOnce 是 Visual Studio 2005 中包含的全新的 Windows 窗體部署技術。該技術使用智能客戶端簡化 Web 應用程序的安裝和升級。自 .Net Framework 的第一個版本以來,Windows 窗體應用程序部署就一直可以通過 HTTP 進行,並且自那時起就一直處於發展之中。ClickOnce 是一種部署技術,使用該技術可創建自行更新的基於 Windows 的應用程序,這些應用程序可以通過最低程度的用戶交互來安裝和運行。ClickOnce 部署克服了部署中所固有的三個主要問題:
更新應用程序的困難。 使用 Microsoft Windows Installer 部署,每次應用程序更新,用戶都必須重新安裝整個應用程序;使用 ClickOnce 部署,則可以自動提供更新。只有更改過的應用程序部分才會被下載,然後從新的並行文件夾重新安裝完整的、更新後的應用程序。
對用戶的計算機的影響。 使用 Windows Installer 部署時,應用程序通常依賴於共享組件,這便有可能發生版本沖突;而使用 ClickOnce 部署時,每個應用程序都是獨立的,不會干擾其他應用程序。
安全權限。 Windows Installer 部署要求管理員權限並且只允許受限制的用戶安裝;而 ClickOnce 部署允許非管理用戶安裝應用程序並僅授予應用程序所需要的那些代碼訪問安全權限。
過去,這些問題有時會使開發人員決定創建 Web 應用程序而不是基於 Windows 的應用程序,為便於安裝而犧牲了 Windows 窗體豐富的用戶界面和響應性。對於使用 ClickOnce 部署的應用程序,您可以集這兩種技術的優勢於一身。
什麼是 ClickOnce 應用程序?
簡單說來,ClickOnce 應用程序就是任何使用 ClickOnce 技術發布的 Windows 窗體或控制台應用程序。可以采用三種不同的方法發布 ClickOnce 應用程序:從網頁發布、從網絡文件共享發布或是從媒體(如 CD-ROM)發布。ClickOnce 應用程序既可以安裝在最終用戶的計算機上並在本地運行(即使當計算機脫機時也可以運行),也可以僅以聯機模式運行,而不在最終用戶的計算機上永久安裝任何內容。
下表將 ClickOnce 部署的功能與 Windows Installer 部署的功能進行了比較:
自動更新1
是
是
安裝後回滾2
是
否
從 Web 更新
是
否
不影響共享組件或其他應用程序
是
否
授予的安全權限
僅授予應用程序所必需的權限(更安全)
默認授予“完全信任”權限(不夠安全)
要求的安全權限
Internet 或 Intranet 區域(為 CD-ROM 安裝提供完全信任)
管理員
應用程序和部署清單簽名
是
否
安裝時用戶界面
單次提示
多部分向導
即需安裝程序集
是
否
安裝共享文件
否
是
安裝驅動程序
否
是(自定義操作)
安裝到全局程序集緩存
否
是
為多個用戶安裝
否
是
向“開始”菜單添加應用程序
是
是
向“啟動”組添加應用程序
否
是
向“收藏夾”菜單添加應用程序
否
是
注冊文件類型
否
是
安裝時注冊表訪問3
受限
是
二進制文件修補
否
是
應用程序安裝位置
ClickOnce 應用程序緩存
“Program Files”文件夾
說明
1. 對於 Windows Installer,必須在應用程序代碼中實現編程方式的更新。
2. 對於 ClickOnce,可在“添加/刪除程序”中實現回滾。
3. ClickOnce 部署只有使用“完全信任”權限才能訪問 HKEY_LOCAL_MacHINE (HKLM)。
ClickOnce 可以提供自動應用程序更新。ClickOnce 應用程序會定期讀取其部署清單文件,以查看是否有可用的應用程序更新。如果有,則會下載並運行應用程序的新版本。為提高效率,僅下載那些已更改的文件。
設計 ClickOnce 應用程序時,需要確定應用程序將使用何種策略來檢查可用的更新。有三種基本策略可以使用:在應用程序啟動時檢查更新、在應用程序啟動後檢查更新(在後台線程中運行)或是提供進行更新的用戶界面。此外,還可以確定應用程序檢查更新的時間間隔,並且可以強制必須執行更新。
如果使用該默認策略,則應用程序會在運行期間嘗試在後台查找並讀取部署清單文件。如果某個更新可用,則當用戶下一次運行應用程序時,會提示用戶下載並安裝該更新。
此策略最適用於低帶寬的網絡連接或可能需要長時間下載的較大應用程序。
若要啟用此更新策略,請在“應用程序更新”對話框的“選擇應用程序何時應該檢查更新”部分中單擊“在應用程序啟動後”。
如果使用此策略,則每當用戶啟動應用程序時,應用程序都會嘗試查找並讀取部署清單文件。如果某個更新可用,則會下載並啟動該更新;否則,會啟動現有版本的應用程序。
此策略最適用於高帶寬的網絡連接;在低帶寬連接上啟動應用程序時的長時間延遲可能令人無法接受。
若要啟用此更新策略,請在“應用程序更新”對話框的“選擇應用程序何時應該檢查更新”部分中單擊“在應用程序啟動前”。
在有些情況下,您可能需要要求用戶運行更新版本的應用程序。例如,您可能對諸如 Web 服務等外部資源進行了某種更改,而這種更改會使得較早版本的應用程序不能正常工作。在這種情況下,您需要將更新標記為“必需”,並阻止用戶運行較早的版本。
還可以指定應用程序檢查更新的頻率。例如,您可能希望在應用程序每次運行時都檢查更新,或是一周檢查一次或一個月檢查一次。如果在指定時間不存在網絡連接,則更新檢查會在應用程序下一次運行時執行。
若要指定更新時間間隔,請在“應用程序更新”對話框中設置“指定應用程序檢查更新的頻率”屬性。
如果使用此策略,應用程序開發人員會提供一個用戶界面,用戶可通過該用戶界面選擇應用程序檢查更新的時間和頻率。例如,可以提供一個“Check for Updates Now”(立即檢查更新)菜單項,或是一個提供有不同更新時間間隔選項的“Update Settings”(更新設置)對話框。ClickOnce 部署 API 提供一個框架,用於對您自己的更新用戶界面進行編程。有關更多信息,請參見 System.Deployment.Application 命名空間。
如果應用程序使用部署 API 控制它自己的更新邏輯,則應按下面在“阻止更新檢查”中介紹的那樣阻止更新檢查。
此策略最適用於您需要為不同用戶提供不同更新策略的情況。
還可以阻止應用程序檢查更新。例如,您有一個永不更新的簡單應用程序,但您希望利用 ClickOnce 部署提供的安裝便利。
如果應用程序使用部署 API 執行它自己的更新,也應阻止更新檢查;請參見上面的“提供進行更新的用戶界面”。
更多詳情請查看http://msdn2.microsoft.com/zh-cn/library/t71a733d(VS.80).ASPx