使用ClickOnce發布Winform程式將使得程式的部署變得非常的方便,這篇文章就來介紹下ClickOnce的使用和部署過程中可能遇到的問題,權當梳理知識、日後備用。
內容概覽
- ClickOnce簡介
- 發布網站建立
- 配置ClickOnce程式
- 發布ClickOnce包
- 問題補遺
- 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 應用程式是十分重要的。 您的應用程式可以使用完全信任或使用部分地區(如 網際網路區域和 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的選擇使用,真希望微軟能把這個功能點改進掉。
希望你看到這個缺點的時候不要心底一涼,就像我當時發現有這個缺點時候的心情,按需選擇就好。 :)