asp.net自動更新組件分享

來源:互聯網
上載者:User

一. 摘要
  前兩天在部落格上發布了一篇英文的自動更新組件文章Release a AutoUpdater tool,那麼在這篇文章中,我們也對其功能進行一些簡單說明,這個組件非常簡單,所以大家可以下載進行一些改進。眾所周知,對於一般的軟體開發,在開始的時候都會有一個技術選型的階段,最大的選型就是首先要確定是選擇Client/Server模式還是Browser/Server模式。綜合而論:兩者各有優劣,在很多方面都不能被對方互相取代,如在適用Internet、維護工作量等方面,B/S比C/S要強很多;但在運行速度、資料安全、人機互動等方面,B/S就遠不如C/S那麼強大。所以綜上所述,凡是C/S的強項,便是B/S的弱項,反之亦然。由於今天討論的是自動更新組件,所以接下來我們就往這方面細講,既然C/S模式在運行速度、資料安全、人機互動有這麼多的優點,尤其是用戶端技術日益發展的今天,如何解決用戶端的部署與自動升級問題便是一個非常重要的問題。

二. 本文提綱

· 1.摘要

· 2.本文提綱

· 3.為什麼不使用ClickOnce

· 4.簡要介紹

· 5.項目中如何使用

· 6.具體效果

· 7.維護與下載

· 8.總結
三. 為什麼不使用ClickOnce
  在前面的摘要中我們簡單介紹了自動更新功能的重要性,在這一小節裡我們來談一下為什麼不使用微軟給我們提供的自動更新組件ClickOnce,大家都知道ClickOnce給我們提供了很多功能:簡單說來,ClickOnce 應用程式就是任何使用 ClickOnce 技術發布的 Windows 表單或控制台應用程式。可以採用三種不同的方法發布 ClickOnce 應用程式:從網頁發布、從網路檔案分享權限設定發布或是從媒體(如 CD-ROM)發布。ClickOnce 應用程式既可以安裝在終端使用者的電腦上並在本地運行(即使當電腦離線時也可以運行),也可以僅以聯機模式運行,而不在終端使用者的電腦上永久安裝任何內容。ClickOnce 應用程式可以自行更新;這些應用程式可以在較新版本變為可用時檢查較新版本,並自動替換所有更新的檔案。開發人員可以指定更新行為;網路系統管理員也可以控制更新策略,如將更新標記為強制性的。終端使用者或管理員還可以對更新進行復原,使應用程式恢複到早期的版本。

  從上面大家可以看出ClickOnce 無疑是微軟對Client/Server模式部署的最佳解決方案,但正是因為它的功能特彆強大而且又要使用相當簡單,所以在產品的封裝上就特別嚴實,基本上就暴露了一些簡單的操作介面,這樣就無形把一些定製化的操作拒之於門外,比如:

1,使用者不能自己指定安裝路徑。

2,對自動更新流程不能做定製化的操作。

3,對自動更新的UI不能定製化的設計。

正因為這幾個原因,所以很多企業都會做一些定製化的組件來實現自動更新的功能,基於此,我們這裡也實現了一個非常簡單的自動更新組件.

四. 簡要介紹

其實自動更新的原理很簡單,分析起來無非就是簡單的幾步操作,當然實現方式也是大同小異,這裡我們就選一種較簡單的方式:

1.啟動主程式,主程式裡面調用升級程式,升級程式串連到IIS或者FTP。
2.升級程式擷取伺服器端XML設定檔中新版本程式的更新日期或版本號碼或檔案大小。
3.升級程式擷取原有用戶端應用程式的最近一次更新日期或版本號碼或檔案大小,然後兩者進行比較;如果新版本日期>原有程式的最新日期,則提示使用者是否升級;或如果新版本版本號碼>原有程式的版本號碼,則提示使用者是否升級;再或如果新版本檔案大小>原有程式的檔案大小,則提示使用者是否升級。本文主要採用一般的做法,就是通過版本號碼來進行對比。
4.如果使用者選擇升級,則擷取下載檔案清單;
5.在本地建立與遠程IIS或者FTP相應的臨時目錄,然後下載到這個臨時目錄檔案下;
6.刪除舊的主程式,拷貝臨時檔案夾中的檔案到相應的位置;
8.結束升級流程並重新啟動主程式。
根據前面的流程,我們可以簡單設計如下的項目:

圖1

具體類介紹:
IAutoUpdater.cs 提供外部調用的介面
AutoUpdater.cs 該組件的主操作類
Autoupdater.config 本地設定檔
DownloadConfirm.cs 提示是否有更新頁面
DownloadProgress.cs 下載進度頁面
CommonUnitity.cs 一些常用功能
Config.cs 當更新完畢之後需要更新Config,所以這裡需要一個提供序列化的Config類
ConstFile.cs 一些常量檔案
DownloadFileInfo.cs 需要下載的檔案實體類
LocalFile.cs 本地檔案實體類
RemoteFile.cs 遠程檔案實體類
UpdateFileList.cs 本地的實體類集合
代碼非常簡單,具體可以下載進行查看,所以這裡就不做過多闡述。
五. 項目中如何使用
第一步:Host更新的版本到伺服器
  如果需要讓用戶端擷取最新的版本,首先我們需要開發人員編譯原始碼並組建檔案,然後拷貝到FTP或者IIS目錄下,運行一個自動產生XML檔案的程式,把所有的檔案都自動產生到一個XML檔案,詳細見:

 
                                圖2

第二步:配置本地的Config

  經過第一步的流程,這一步要做的就是配置本地的Config用於監測並下載遠程IIS或者FTP下需要更新的檔案,具體如所示:

圖3

第三步:修改主程式
  首先把AutoUpdater這個DLL引入我們的主專案,然後在主專案中添加如下代碼,當然你可以根據自己的需要進行書寫,這個DLL提供了兩個外部介面,一個介面用於判斷是否有更新及下載,另一個介面則是用於更新出錯時進行復原操作,具體代碼如下: 複製代碼 代碼如下:#region check and download new version program
bool bHasError = false;
IAutoUpdater autoUpdater = new AutoUpdater();
try
{
autoUpdater.Update();
}
catch (WebException exp)
{
MessageBox.Show("Can not find the specified resource");
bHasError = true;
}
catch (XmlException exp)
{
bHasError = true;
MessageBox.Show("Download the upgrade file error");
}
catch (NotSupportedException exp)
{
bHasError = true;
MessageBox.Show("Upgrade address configuration error");
}
catch (ArgumentException exp)
{
bHasError = true;
MessageBox.Show("Download the upgrade file error");
}
catch (Exception exp)
{
bHasError = true;
MessageBox.Show("An error occurred during the upgrade process");
}
finally
{
if (bHasError == true)
{
try
{
autoUpdater.RollBack();
}
catch (Exception)
{
//Log the message to your file or database
}
}
}
#endregion使用就是這麼簡單,更詳細的操作,大家可以下載源碼,也正因為它的簡單,所以大家可以對其修改以滿足具體項目的需求。

六. 具體效果

當我們運行主程式(WinForm或者WPF),如果伺服器上有最新的版本,就會彈出如下頁面進行提示並讓使用者選擇是否更新。

圖4

當使用者不需要更新時,可以選擇Skip按鈕跳過並繼續主程式流程,反之則進入如下頁面。

圖5

在下載的過程中,使用者可以選擇Cancel停止下載並重新回到主流程。

七. 維護與下載

該組件已經託管到CodePlex,所以大家可以到上面下載其原始碼,具體地址:http://autoupdater.codeplex.com/

圖6

八. 總結

  我們這篇文章簡單的講解了一個簡單的自動更新組件,由於它比較簡單而且功能單一,所以沒有花費大量的篇幅進行論述,感興趣的讀者可以下載其源碼。後面我會把自己開發的一套MVVM架構也託管上去,由於目前對Silverlight的支援還不太好,所以正在持續做相關的改進,其中借鑒了一些其他優秀架構的思想並且融入了一些實際應用情境,所以到時也希望大家能夠多多指教!
作者:聖殿騎士
出處:http://www.cnblogs.com/KnightsWarrior/

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.