使用ClickOne發布Windows應用程式
前言
簡單介紹如何使用ClickOnce發布Windows應用程式。開發人員一般按以下步驟操作即可達到發布的目的。
此文只介紹最簡單的使用。更進階的使用目前正在學習,希望可以儘快完善此文檔。
更詳細請參看微軟線上MSDN,上面的介紹很詳細,有時間將整理加入到此文檔。
ClickOnce簡介
ClickOnce 部署使您可以將基於 Windows 的應用程式發布到 Web 服務器或網路檔案分享權限設定以簡化安裝。Visual Studio 對通過 ClickOnce 部署的應用程式的發布和更新提供完全支援。ClickOnce 部署可用於使用 Visual Basic、Visual C# 和 Visual J# 建立的項目,但不能用於使用 Visual C++ 建立的項目。
使用ClickOnce的好處
使用ClickOnce發布Windows應用程式可以使使用者方便地更新應用程式,可以起到B/S的效果,當程式更新了不必每一個使用者重新安裝更新。程式發行者只需要把新版本放到伺服器,程式使用者在啟動軟體或退出軟體時即可更新軟體(更詳細參看圖解發布過程)。
當然,要使安裝過程更可視化、在安裝過程加入更多操作則應該自己製作安裝程式。
圖解發布過程
首先,選擇要發布的項目,右點擊選擇“屬性”,然後選擇“發布”選項頁,如所示:
要發布軟體,首先弄明白好以下幾項
也就是程式發布產生的檔案存放在哪裡。這些路徑可以是URL、共用資料夾、本機絕對路徑。
也就是當用使用者需要安裝此軟體時應該訪問的路徑,將在這裡下載檔案進行安裝。這裡路徑必須是URL。此路徑一般為伺服器的IIS網站路徑。例如你發布的程式存放在本機IIS網站http://localhost:8000/AnthorTest/。但發布後的程式要放到客戶的伺服器裡,如果客戶的伺服器的IIS網站在區域網路裡的路徑為http://192.168.1.174:8012/Setup 。則安裝URL應該輸入這路徑。
當客戶需要安裝軟體時,只需要訪問此路徑,點擊“安裝”後即會有安裝的過程提示。
即客戶使用軟體時,當軟體啟動或退出軟體時將訪問的路徑。當軟體訪問此路徑時,將檢測是否有新的版本,如有則提示是否安裝更新。
這個路徑應該是客戶服務器IIS網站,程式發布後的檔案將複製到此網站的所在目錄裡(如果此路徑與發布路徑不同)。
當此路徑與發布路徑不同,點擊“更新”按鈕將出現如下介面,然後填入相應路徑即可。
一般選擇“可以離線使用”。否則必須與“更新路徑”所在機器連通才能使用軟體。
ClickOnce進階選項
下面簡要解釋各選項
應用程式檔案
這裡羅列了發布程式時,將包括(發布)的檔案。
注意:VS的此功能並不十分完善,如果程式引用了OFFICE組件,它會把stdole.dll、Office.dll以及Microsoft.Vbe.Interop.dll作為系統必備,當在客戶機安裝時就有可能出現的版本不同的錯誤(因為安裝的office版本不同,而這一般不影響程式使用),此時,你應該把這些DLL的“發布狀態”更改為“包括”,這樣就不會出再錯誤。
系統必備
主要選擇軟體在安裝時將自動安裝的組件。開發人員可以根據開發所用到的組件進行選擇。例如使用了水晶報表,則應該把“水晶報表檢視器”組件選上。
還有需要注意的是,為了使用客戶安裝軟體時更方便,一般選擇“從與我的應用程式相同的位置下載系統必備組件”。這樣,安裝程式的相同路徑下將包括這些組件。當客戶安裝軟體時,如果計算沒有必備的組件,將從這些路徑下載組件進行安裝。
更新
這裡是程式的更新選項。開發人員可根據需要選擇。
選項
在這裡可以設定一些進階的選項或輸入一些進階資訊。如選擇“發布語言”等。
發布路徑有可能選擇在本機,而伺服器部署並不一定在本機,例如在開發人員的機器發布,而需要把檔案拷貝到客戶的伺服器進行部署,這要求“發布路徑”與“安裝路徑”、“更新路徑”不同外,最好此時把“驗證上傳到Web伺服器的檔案”這項的選定取消,因為“安裝路徑”和“更新路徑”很有可能不存在,如果取消此項的選定,會大大加快發布速度。
同時,也可以把“部署網頁”改成不是“publish.html”。這也可以在一定程式度上防此別人惡意訪問網站。
選擇ClickOnce更新策略
設計 ClickOnce 應用程式時,需要確定應用程式將使用何種策略來檢查可用的更新。有三種基本策略可以使用:在應用程式啟動時檢查更新、在應用程式啟動後檢查更新(在後台線程中運行)或是提供進行更新的使用者介面。此外,還可以確定應用程式檢查更新的時間間隔,並且可以強制必須執行更新。
伺服器部署
按照“安裝路徑”把發布的檔案拷貝到相應的機器的相應IIS網站下即可。例如“安裝路徑”為http://192.168.1.147/DorichTourSetup, 則把檔案拷貝到此機器下預設網站(連接埠為80)下的虛擬路徑“DorichTour”。
特別要注意,此“虛擬目錄”的“文檔”選項的文檔為“publish.htm”。這樣才能使需要安裝程式的客戶順利進入安裝介面。下面幾幅圖為此“虛擬路徑”的幾個配置,部署人員可參考:
l 配置“文檔”為publish.htm
l 配置目錄安全性
“目錄安全性”下的身分識別驗證應設定為“允許匿名訪問”
注意:如果“更新路徑”和“安裝路徑”不同,則在“更新路徑”所在的機器要作同樣的配置。這兩個路徑一般相同,如有不同開發人員將與部署人員協商一致。
用戶端部署
伺服器部署完後,需要安裝程式的客戶只需要訪問“安裝路徑”的網站,即出現如下介面,點擊“安裝”按鈕即有相應提示:
注意,安裝的整個過程為自動安裝,安裝後的檔案存放的路徑一般位於C:\Documents and Settings\Administrator\Local Settings\Apps\2.0\H7V6QMR5.4DG\QY7X63PH.TLV下的相應路徑,其中“Administrator”為安裝程式系統的登陸者,如果以上路徑不存在,就找到路徑C:\Documents and Settings\Administrator\Local Settings\Apps\2.0然後尋找相應的路徑。當然有一個辦法肯定可以找到所在路徑:在C:\Documents and Settings路徑下搜尋相應的檔案,例如安裝後在“開始”—“程式”那出現“DorichTour”,則你可以在此路徑下搜尋“DorichTour.exe”即可以搜尋到相應的檔案,從而知道路徑所在。
為不同應用客戶產生發布包(手動部署)
當為不同客戶產生發布包時,可以按上述步驟重建一個發布包。但缺點是很明顯的:有可能客戶很多;可能軟體完成後開發環境不一定完整儲存,而按上述步驟重新需要完整的開發環境;不同客戶使用的應用程式相同,所不同其實就只是安裝路徑。
所以,最好能利用現有的發布包為不同的客戶產生發布包。下面介紹如何在不重建應用程式的情況下利用現有的發布包為不同使用者產生發布包。
可參考MSDN的“手動部署ClicokOnce應用程式”。但對於ClickOnce發布不熟悉者一般不贊成完全使用手動發布。應該使用上上述步驟產生發布包後再按下面的介紹為不同使用者產生不同的使用者發布包。
準備工作
l 確定部署的類型
如果部署類型需要在使用CD自動運行安裝,必然包括Setup.exe檔案,並且此檔案包括了一些部署資訊,無法修改。所以此時則必須為不同的使用者重建新的發布包。
如果不是使用CD自動運行安裝,可以在現有發布包的基礎上為不同客戶產生不同的發布包。請繼續往下看。
l 處理Setup檔案
如果不是採用CD自動運行安裝的形式。可以不包括此Setup.exe 檔。可以把它刪除。
l 處理publish.htm檔案
Public.htm檔案的“安裝”按鈕預設連結到Setup.exe檔案。請修改為串連到“部署資訊清單”檔案。
如:把HREF="setup.exe"
修改為HREF="ClickOnceExample.application"
同時,因為使用VS2005IDE產生ClickOnce部署套件時會預設更新publish.htm檔案,其實此檔案可以不重建,除非只有一個客戶。當需要為publish.htm檔案加入相應的內容更更新相應的內容,可以修改publish.htm的源檔案。為了保持publish.html檔案不變,請在“選項”處取消“每次發布後都自動產生部署網頁(G)”選項。
產生應用程式資訊清單
應用程式資訊清單一般位於版本檔案。命名格式為:全稱.exe.manifest。此檔案儲存體了此應用程式部署時應該包括的檔案。
如果沒有發布包裡的檔案(此版本檔案夾裡的全部檔案)作修改,則不需要對應用程式資訊清單進行處理。
如果對發布包的的任何檔案作了修改,如修改了應用程式設定檔裡的內容。則需要重建新的應用清單。此時,用工具mageui.exe(此工具為.net sdk2.0內建,同時在項目“ClickOnceExample”項目下的“工具”檔案夾裡有儲存)開啟相應的應用程式資訊清單,然後“儲存”。儲存時會要求籤名,開發人員可選擇相應的認證檔案,一般選擇應用程式第一次發布時產生的認證檔案(使用VS2005IDE發布ClickOnce應用程式時,會自動產生一個認證檔案)。
同時需要說明一下的是,發布包的檔案預設使用deloy作為檔案的尾碼,主要是防止使用者修改而造成必須重建應用程式資訊清單。而有時為不同客戶產生發布包時需要修改相應的檔案,所以可以在“選項”處取消“使用deloy副檔名”選項。
產生部署資訊清單
為不同客戶產生不同的發布包,關鍵是部署資訊清單,它決定了安裝時從何處安裝。這個檔案必須重建。
使用工具mageui.exe開啟相應的部署資訊清單,修改相應的選項,其中需要修改一般為以下選項:StartLocation和Application Reference。其中StartLoation指明了安裝時指向的部署資訊清單,應該為網站的完整路徑+部署資訊清單名,如:http://192.168.1.75/ClickOnceExample/ClickOnceExample.application;Application Reference指明了所指向的應用程式資訊清單,應該選擇相應版本檔案夾裡應用程式資訊清單。然後儲存。儲存時要求籤名,可使用剛才應用程式資訊清單簽名時相同的認證檔案。如果認證到期可產生另一測試認證。
部署資訊清單的編輯如。部署資訊清單編輯完成後,原來的發布包即為新的客戶的發布包,直接把此發布包部署即可。
注意事項
解決方案各項目設定
ClieckOnce主要是把Windows應用程式發布。當解決方案存在多個Windows應用程式時,將會使用發布過程變得很複雜、麻煩。通常會失敗(目前我沒有嘗試發布多個Windows應用程式的解決方案)。
所以,一般解決方案只包含一個Windows應用程式(通常為啟動項目),其它項目均應該為類庫項目。這樣,發布過程將如上面介紹的那樣簡單、順利。
當存在輸出檔案
例如項目中存在WORD文檔或EXCEL文檔,並且此文檔輸出到一定的路徑。這就在一般的項目只需要在文檔的屬性視窗中的“複製到輸出項目”選項選擇“如果較新則複製”或“始終複製”。如果使用ClickOnce發布Windows應用程式,還要在“產生操作”選項中選擇“內容”。如此才能使用文檔在發布時一起發布,否則無法發布文檔而導致軟體在使用過程中出錯。
DLL版本問題
可以到“應用程式檔案”()裡找到相應的DLL,把 “發布狀態”更改為“包括”,這樣可能可以排除錯誤。因為ClickOnce技術的這項功能不夠完善,會把一些不是必要的DLL當作是必備的DLL。
提示網路錯誤
這一般分為真正的網路裝置有問題。但如果查看詳細資料,錯誤提示裡有“XX檔案下載錯誤”。則多為配置的錯誤。如“設定檔”下載失敗,則多為IIS的配置問題。請確保IIS的ASP.NET配置版本為2.0。如:
值不在範圍內
當安裝或啟動應用程式時,發生錯誤並且在記錄檔裡找到錯誤資訊“值不在範圍之內”。此時有可能因為某些使用Clickonce發布的程式在卸載時不完全。此時應該卸載此應用程式或全部使用ClickOnce部署的軟體,然後把 C:\Documents and Settings\Administrator\Local Settings\Apps\2.0\H7V6QMR5.4DG\QY7X63PH.TLV路徑下的檔案夾和檔案全部刪除,然後重新安裝即可。
認證到期
有時發布失敗可能為“認證到期”。此時可在項目的屬性視窗的“簽名”選項卡(如)裡查看認證是否到期。如果到期請點擊“建立測試認證”按鈕建立新的認證。