欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

asp.net自動(dòng)更新組件分享

 更新時(shí)間:2010年10月20日 11:01:47   作者:  
前兩天在博客上發(fā)布了一篇英文的自動(dòng)更新組件文章Release a AutoUpdater tool,那么在這篇文章中,我們也對(duì)其功能進(jìn)行一些簡(jiǎn)單說明,這個(gè)組件非常簡(jiǎn)單,所以大家可以下載進(jìn)行一些改進(jìn)。
一. 摘要
  前兩天在博客上發(fā)布了一篇英文的自動(dòng)更新組件文章Release a AutoUpdater tool,那么在這篇文章中,我們也對(duì)其功能進(jìn)行一些簡(jiǎn)單說明,這個(gè)組件非常簡(jiǎn)單,所以大家可以下載進(jìn)行一些改進(jìn)。眾所周知,對(duì)于一般的軟件開發(fā),在開始的時(shí)候都會(huì)有一個(gè)技術(shù)選型的階段,最大的選型就是首先要確定是選擇Client/Server模式還是Browser/Server模式。綜合而論:兩者各有優(yōu)劣,在很多方面都不能被對(duì)方互相取代,如在適用Internet、維護(hù)工作量等方面,B/S比C/S要強(qiáng)很多;但在運(yùn)行速度、數(shù)據(jù)安全、人機(jī)交互等方面,B/S就遠(yuǎn)不如C/S那么強(qiáng)大。所以綜上所述,凡是C/S的強(qiáng)項(xiàng),便是B/S的弱項(xiàng),反之亦然。由于今天討論的是自動(dòng)更新組件,所以接下來我們就往這方面細(xì)講,既然C/S模式在運(yùn)行速度、數(shù)據(jù)安全、人機(jī)交互有這么多的優(yōu)點(diǎn),尤其是客戶端技術(shù)日益發(fā)展的今天,如何解決客戶端的部署與自動(dòng)升級(jí)問題便是一個(gè)非常重要的問題。

二. 本文提綱

· 1.摘要

· 2.本文提綱

· 3.為什么不使用ClickOnce

· 4.簡(jiǎn)要介紹

· 5.項(xiàng)目中如何使用

· 6.具體效果

· 7.維護(hù)與下載

· 8.總結(jié)
三. 為什么不使用ClickOnce
  在前面的摘要中我們簡(jiǎn)單介紹了自動(dòng)更新功能的重要性,在這一小節(jié)里我們來談一下為什么不使用微軟給我們提供的自動(dòng)更新組件ClickOnce,大家都知道ClickOnce給我們提供了很多功能:簡(jiǎn)單說來,ClickOnce 應(yīng)用程序就是任何使用 ClickOnce 技術(shù)發(fā)布的 Windows 窗體或控制臺(tái)應(yīng)用程序。可以采用三種不同的方法發(fā)布 ClickOnce 應(yīng)用程序:從網(wǎng)頁發(fā)布、從網(wǎng)絡(luò)文件共享發(fā)布或是從媒體(如 CD-ROM)發(fā)布。ClickOnce 應(yīng)用程序既可以安裝在最終用戶的計(jì)算機(jī)上并在本地運(yùn)行(即使當(dāng)計(jì)算機(jī)脫機(jī)時(shí)也可以運(yùn)行),也可以僅以聯(lián)機(jī)模式運(yùn)行,而不在最終用戶的計(jì)算機(jī)上永久安裝任何內(nèi)容。ClickOnce 應(yīng)用程序可以自行更新;這些應(yīng)用程序可以在較新版本變?yōu)榭捎脮r(shí)檢查較新版本,并自動(dòng)替換所有更新的文件。開發(fā)人員可以指定更新行為;網(wǎng)絡(luò)管理員也可以控制更新策略,如將更新標(biāo)記為強(qiáng)制性的。最終用戶或管理員還可以對(duì)更新進(jìn)行回滾,使應(yīng)用程序恢復(fù)到早期的版本。

  從上面大家可以看出ClickOnce 無疑是微軟對(duì)Client/Server模式部署的最佳解決方案,但正是因?yàn)樗墓δ芴貏e強(qiáng)大而且又要使用相當(dāng)簡(jiǎn)單,所以在產(chǎn)品的封裝上就特別嚴(yán)實(shí),基本上就暴露了一些簡(jiǎn)單的操作接口,這樣就無形把一些定制化的操作拒之于門外,比如:

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

2,對(duì)自動(dòng)更新流程不能做定制化的操作。

3,對(duì)自動(dòng)更新的UI不能定制化的設(shè)計(jì)。

正因?yàn)檫@幾個(gè)原因,所以很多企業(yè)都會(huì)做一些定制化的組件來實(shí)現(xiàn)自動(dòng)更新的功能,基于此,我們這里也實(shí)現(xiàn)了一個(gè)非常簡(jiǎn)單的自動(dòng)更新組件.

四. 簡(jiǎn)要介紹

其實(shí)自動(dòng)更新的原理很簡(jiǎn)單,分析起來無非就是簡(jiǎn)單的幾步操作,當(dāng)然實(shí)現(xiàn)方式也是大同小異,這里我們就選一種較簡(jiǎn)單的方式:

1.啟動(dòng)主程序,主程序里面調(diào)用升級(jí)程序,升級(jí)程序連接到IIS或者FTP。
2.升級(jí)程序獲取服務(wù)器端XML配置文件中新版本程序的更新日期或版本號(hào)或文件大小。
3.升級(jí)程序獲取原有客戶端應(yīng)用程序的最近一次更新日期或版本號(hào)或文件大小,然后兩者進(jìn)行比較;如果新版本日期>原有程序的最新日期,則提示用戶是否升級(jí);或如果新版本版本號(hào)>原有程序的版本號(hào),則提示用戶是否升級(jí);再或如果新版本文件大小>原有程序的文件大小,則提示用戶是否升級(jí)。本文主要采用一般的做法,就是通過版本號(hào)來進(jìn)行對(duì)比。
4.如果用戶選擇升級(jí),則獲取下載文件列表;
5.在本地建立與遠(yuǎn)程IIS或者FTP相應(yīng)的臨時(shí)目錄,然后下載到這個(gè)臨時(shí)目錄文件下;
6.刪除舊的主程序,拷貝臨時(shí)文件夾中的文件到相應(yīng)的位置;
8.結(jié)束升級(jí)流程并重新啟動(dòng)主程序。
根據(jù)前面的流程,我們可以簡(jiǎn)單設(shè)計(jì)如下的項(xiàng)目:

autoupdatersolution 

                                                    圖1

具體類介紹:
IAutoUpdater.cs 提供外部調(diào)用的接口
AutoUpdater.cs 該組件的主操作類
Autoupdater.config 本地配置文件
DownloadConfirm.cs 提示是否有更新頁面
DownloadProgress.cs 下載進(jìn)度頁面
CommonUnitity.cs 一些常用功能
Config.cs 當(dāng)更新完畢之后需要更新Config,所以這里需要一個(gè)提供序列化的Config類
ConstFile.cs 一些常量文件
DownloadFileInfo.cs 需要下載的文件實(shí)體類
LocalFile.cs 本地文件實(shí)體類
RemoteFile.cs 遠(yuǎn)程文件實(shí)體類
UpdateFileList.cs 本地的實(shí)體類集合
代碼非常簡(jiǎn)單,具體可以下載進(jìn)行查看,所以這里就不做過多闡述。
五. 項(xiàng)目中如何使用
第一步:Host更新的版本到服務(wù)器
  如果需要讓客戶端獲取最新的版本,首先我們需要開發(fā)人員編譯源代碼并生成文件,然后拷貝到FTP或者IIS目錄下,運(yùn)行一個(gè)自動(dòng)生成XML文件的程序,把所有的文件都自動(dòng)生成到一個(gè)XML文件,詳細(xì)見下圖:
2010-10-18 23-10-25 
                                圖2

第二步:配置本地的Config

  經(jīng)過第一步的流程,這一步要做的就是配置本地的Config用于監(jiān)測(cè)并下載遠(yuǎn)程IIS或者FTP下需要更新的文件,具體如下圖所示:

2010-10-18 23-13-10

                                                    圖3

第三步:修改主程序
  首先把AutoUpdater這個(gè)DLL引入我們的主項(xiàng)目,然后在主項(xiàng)目中添加如下代碼,當(dāng)然你可以根據(jù)自己的需要進(jìn)行書寫,這個(gè)DLL提供了兩個(gè)外部接口,一個(gè)接口用于判斷是否有更新及下載,另一個(gè)接口則是用于更新出錯(cuò)時(shí)進(jìn)行回滾操作,具體代碼如下:
復(fù)制代碼 代碼如下:

#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使用就是這么簡(jiǎn)單,更詳細(xì)的操作,大家可以下載源碼,也正因?yàn)樗暮?jiǎn)單,所以大家可以對(duì)其修改以滿足具體項(xiàng)目的需求。

六. 具體效果

當(dāng)我們運(yùn)行主程序(WinForm或者WPF),如果服務(wù)器上有最新的版本,就會(huì)彈出如下頁面進(jìn)行提示并讓用戶選擇是否更新。

2010-10-13 18-05-02

                                                    圖4

當(dāng)用戶不需要更新時(shí),可以選擇Skip按鈕跳過并繼續(xù)主程序流程,反之則進(jìn)入如下頁面。

2010-10-13 18-05-41

                                                    圖5

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

七. 維護(hù)與下載

該組件已經(jīng)托管到CodePlex,所以大家可以到上面下載其源代碼,具體地址:http://autoupdater.codeplex.com/

2010-10-18 22-10-52 

                                                    圖6

八. 總結(jié)

  我們這篇文章簡(jiǎn)單的講解了一個(gè)簡(jiǎn)單的自動(dòng)更新組件,由于它比較簡(jiǎn)單而且功能單一,所以沒有花費(fèi)大量的篇幅進(jìn)行論述,感興趣的讀者可以下載其源碼。后面我會(huì)把自己開發(fā)的一套MVVM框架也托管上去,由于目前對(duì)Silverlight的支持還不太好,所以正在持續(xù)做相關(guān)的改進(jìn),其中借鑒了一些其他優(yōu)秀框架的思想并且融入了一些實(shí)際應(yīng)用場(chǎng)景,所以到時(shí)也希望大家能夠多多指教!
作者:圣殿騎士
出處:http://www.cnblogs.com/KnightsWarrior/

相關(guān)文章

最新評(píng)論