ClickOnce部署Winform程序的方方面面

使用ClickOnce發佈Winform程序將使得程序的部署變得非常的方便,這篇文章就來介紹下ClickOnce的使用和部署過程中可能遇到的問題,權當梳理知識、日後備用。

內容概覽

  1. ClickOnce簡介
  2. 發佈站點建立
  3. 配置ClickOnce程序
  4. 發佈ClickOnce包
  5. 問題補遺
  6. ClickOnce的一個缺點

1. ClickOnce簡介

微軟官方對ClickOnce的解釋是:ClickOnce 是一項部署技術,您可以利用這項技術來創建基於 Windows 的自行更新的應用程序,並且安裝和運行這類應用程序所需的用戶交互最少。

使用用ClickOnce主要解決了程序部署中的幾個問題:

  • 更新應用程序困難。使用 Microsoft Windows Installer 部署,每次更新應用程序時,用戶都可以安裝更新(msp 文件)並將其應用到已安裝的產品中;使用 ClickOnce 部署,可自動提供更新。只有更改過的應用程序部分纔會被下載,然後會從新的並行文件夾重新安裝完整的、更新後的應用程序。
  • 對用戶的計算機的影響。使用 Windows Installer 部署時,應用程序通常依賴於共享組件,這便有可能發生版本衝突;而使用 ClickOnce 部署時,每個應用程序都是獨立的,不會干擾其他應用程序。
  • 安全權限。Windows Installer 部署要求管理員權限並且只允許受限制的用戶安裝;而 ClickOnce 部署允許非管理用戶安裝應用程序並僅授予應用程序所需要的那些代碼訪問安全性權限。

簡單點說就是ClickOnce部署的程序可以自動更新,近乎綠色,且對程序的權限執行權限擁有更細的粒度。

下面是ClickOnce的基本架構圖(圖片來源

2. 發佈站點建立

我們先來看一下使用ClickOnce部署Winform程序後的發佈界面,只要點擊Install即可從部署的服務器下載程序安裝運行了。

所以這裏涉及到站點的建立,在Web服務器上建立一個站點以供發佈新的ClickOnce包。

在建立站點前,我們需要如下圖確認這兩個組件是否已經啓用。

啓用後,建立一個站點,路徑選擇一個自己建立的空目錄即可,其他的Web服務器的設置這裏不再贅述。

3. 配置ClickOnce程序

在Winform項目上右鍵打開屬性界面,配置好相關的編譯屬性,關於編譯屬性的詳細配置可以參見前一篇文章:關於Winform編譯配置那些事

切換到發佈標籤,如下圖所示。

在發佈目錄裏面,可以選擇Web、FTP、文件路徑模式,這裏我們填上我們之前配置好的空的Web站點即可。

在安裝模式裏面,支持兩種安裝模式:聯機或脫機可用性。一般我們選擇用戶即使在斷線的情況下也能使用發佈的應用程序。

點擊“程序文件”,打開對話框。

這裏可以選擇哪些文件可以發佈到ClickOnce中,以便發佈到客戶端裏面。

默認是將程序編譯出的文件包含在ClickOnce包中,這裏會遇到一個問題:如何將其他文件如一些說明文檔在項目裏更新後同時自動打包進部署包裏。

比如我們在項目裏面添加了一個Readme.txt,默認在我們發佈新包時此文件是不會發布進去的。

如果我們需要每次發佈進去,只要在Readme.txt上右鍵打開屬性,配置這兩個值即可。

而在必要組件對話框裏面,ClickOnce會自動分析出需要的必要組件,當然你也可以自己選擇必要組件,並可以配置是從供應商的頁面下載組件、從我們自己配置的發佈路徑下載或者其他路徑。

使用ClickOnce發佈的程序一個最大的特點就是能夠自動更新,即當運行的時候發現發佈服務器上有新版本後即會自動更新後再運行,當然更新的策略也可以配置,我們打開“更新”對話框。

可以選擇在程序啓動前還是啓動後更新程序。

或者按照時間間隔去檢查更新並更新程序。

或者強制用戶更新到某個版本。

也可以配置更新包在其他某個路徑。

打開“屬性”對話框,可以設置一些發佈的基本屬性。

如發佈人、套件名稱、程序名稱等等,這裏的一些設置會影響到部署頁面的信息和用戶安裝後的目錄。

當然這裏還可以設置如:刻錄成CD安裝包後是否插入CD就自動運行,是否用戶安裝後在桌面創建快捷方式等等,可以自己去點開設置自己需要的東西,就不一一介紹了。

還可以設置是自動增加版本號還是自己設置,這裏的版本號設置最好遵照版本號的使用原則,否則後期維護起來會很混亂,好的習慣往往會讓你事半功倍。

4. 發佈ClickOnce包

在發佈前,我們再說兩個東西,那就是代碼訪問安全和程序簽名。

  • 代碼訪問安全:ClickOnce 應用程序受 .NET Framework 中代碼訪問安全性約束的限制,以幫助限制代碼訪問受保護的資源和操作的權限。 因此,瞭解代碼訪問安全性的含義以相應地編寫 ClickOnce 應用程序是十分重要的。 您的應用程序可以使用完全信任或使用部分區域(如 Internet 區域和 Intranet 區域)來限制訪問權限。
  • 程序簽名:ClickOnce 使用證書驗證應用程序發行者的真實性,並使用證書爲應用程序和部署清單簽名,以證明文件未被篡改。 簽名是一個可選的步驟,它會使在生成清單以後更改應用程序文件更容易。 然而,在沒有簽名清單的情況下,很難確保應用程序安裝程序在受到中間人安全攻擊時不被篡改。 出於這個原因,我們建議您對應用程序清單和部署清單進行簽名,以幫助保護您的應用程序。

這部分的解釋和詳細介紹可以看MSDN裏面的保護應用程序章節。

然後點擊發布按鈕即可,發佈成功後IE會自動打開發布好的頁面,你只需要將發佈的地址給需要安裝此程序的客戶就可以輕鬆完成程序的部署了。

5. 問題補遺

  • 關於簽名過期的問題可以參考園友許海彪的這篇文章:解決ClickOnce簽名過期問題
  • 關於ClickOnce信任文件大小的問題,修改註冊表HKEY_CURRENT_USER\Software\Classes\Software\Microsoft\Windows\CurrentVersion\Deployment
    做成一項“OnlineAppQuotaInKB”的DWROD值即可。

6. ClickOnce的一個缺點

ClickOnce使用下來我覺得一個最大的缺點就是不讓用戶選擇安裝的問題,默認會放在當前用戶的 Documents and Settings 文件夾中 Local Settings 目錄下的一系列隱藏目錄。

設計的初衷是爲了爲應用程序存儲提供一個位置,ClickOnce從用戶那裏接管了管理應用程序物理安裝的任務。 通過對所有應用程序及其不同版本的程序集和數據文件進行獨立保存,緩存還有助於隔離應用程序。

這樣限制了ClickOnce的部署路徑就很大方面限制了對ClickOnce的選擇使用,真希望微軟能把這個功能點改進掉。

希望你看到這個缺點的時候不要心底一涼,就像我當時發現有這個缺點時候的心情,按需選擇就好。 :)


作者:Parry
出處:http://www.cnblogs.com/parry/
本文版權歸作者和博客園共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接,否則保留追究法律責任的權利。

發佈了221 篇原創文章 · 獲贊 3 · 訪問量 33萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章