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的選擇使用,真希望微軟能把這個功能點改進掉。

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM