應用程序版本升級之通用更新組件

目的程序員

不少作應用程序的朋友都作過爲應用程序進行版本升級的功能,這個功能自己很是簡單,可是各位有沒有考慮過這個問題:假如我須要維護多個應用程序的時候(>2)。每一個應用程序的升級工做將變得很繁瑣。咱們須要有一套通用的更新機制,只須要爲須要升級的應用程序進行簡單的配置,就能夠爲之進行版本升級控制,而不須要單獨給每一個應用程序寫升級的功能從而達到一勞永逸的目的。web

 

組成sql

那麼通用更新的組件應該如何來設計,它至少須要如下兩個模塊構成:數據庫

1.客戶端模塊
   1.1 負責發送版本驗證請求
   1.2 負責下載程序所需的更新文件(若是須要更新) json

2.服務端模塊
   2.1 負責新增/維護被受權的應用程序基礎信息
   2.2 負責發佈應用程序新版本信息及文件
   2.3 負責驗證應用程序版本,並返回驗證結果(若是須要更新則返回服務器地址,文件路徑等等數據,以xml/json形式均可以)
服務器

 

開始構造app

 首先是服務端的建立,服務端是一個web應用程序。首先建立它的數據庫spa

 1.數據庫表設計設計

   1.1 應用程序基礎信息表(EP_Update_Program)code

字段名 說明 字段類型
Id 自增加序列號 bigint
ProgramCode 應用程序惟一標識碼 varchar(50)
ProgramName 應用程序名稱 varchar(50)
FtpAddress FTP服務器路徑 varchar(50)
FtpUserName FTP服務器用戶名 varchar(50)
FtpPassword FTP服務器密碼 varchar(50)
FtpPort FTP服務器端口 varchar(50)

 

 

 

 

 

 

 

 

 1.2 應用程序版本信息表(EP_Update_Version)

字段名 說明 字段類型
Id 自增加序列號 bigint
ProgramCode 應用程序惟一標識碼 varchar(50)
ProgramVersion 應用程序版本自定義標識碼 varchar(50)
UpdateContent 本次版本更新內容 varchar(500)
UpdateTime 版本更新時間 datetime
Publisher 版本發佈人 varchar(50)

 

 

 

 

 

 

 

 

1.3 應用程序更新文件路徑表(EP_Update_FilePath)

字段名 說明 字段類型
Id 自增加序列號 bigint
VersionId 應用程序版本編號 varchar(50)
FilePath 服務器文件路徑(FTP根目錄開始) varchar(100)
SavePath 本地文件保存路徑(應用程序根目錄開始) varchar(100)

 

 

 

 

 

 

2.注意事項

   如上,一個簡陋的服務端數據庫表就設計好了,它能知足最基本的管理/控制/發佈應用程序版本信息及文件的數據管理需求(若有其它需求可對數據表自行擴展)。值得咱們注意的細節就是應用程序跨版本升級。什麼是跨版本升級???

   應用程序本地版本爲v1.0, 服務器上該程序的最新版本爲v1.2 (假設版本跨度步長爲0.1)。那麼本地與服務器的版本就相差了兩個版本(v1.1和v1.2),這個時候應用程序發送版本驗證請求,服務端應該同時返回v1.1和v1.2兩個版本的文件,而且要過濾掉版本重複的文件,重複的文件以最新版本爲準。

   舉個例子:

    v1.1 更新的文件爲 a.exe | b.dll | c.xml

    v1.2 更新的文件爲 a.exe | c.dll | c.xml

   服務端返回結果應該爲:

    v1.1 的 b.dll

    v1.2 的 a.exe | c.dll | c.xml  (a.exec.xml與v1.1版本中的文件重複,因此要過濾之,以最新版本的文件爲準)

    SQL主要實現代碼:

select ver.ProgramVersion,ff.FilePath,ff.SavePath from EP_Update_FilePath as ff inner join EP_Update_Version on ff.VersionId=ver.Id
where exists(select max(f.Id) as VersionId from EP_Update_Program as p 
inner join EP_Update_Version as v on p.ProgramCode=v.Progra,Code and v.Id > @VersionId
inner join EP_Update_FilePath as f on f.VersionId=v.Id where p.ProgramCode=@ProgramCode
group by f.FilePath having ff.Id=max(f.Id))

  上述SQL查詢出了該應用程序本次升級所須要的文件列表。在服務端中以xml/json的方式進行組織並返回給應用程序。

 

服務端運行效果圖

其他添加應用程序基礎信息,發佈版本等基礎性操做數據庫的代碼我就不貼了,直接上效果圖:

   

 

 服務端的建立工做完成了,接下來是客戶端的建立

 首先客戶端在本地具備本身的版本配置文件:

1 <?xml version="1.0" encoding="utf-8" ?>
2 <configuration>
3   <appSettings>
4     <add key="Program_Code" value="應用程序惟一標識碼" />
5     <add key="Program_Title" value="應用程序名稱" />
6     <add key="Program_InvokeName" value="主程序exe名稱" />
7     <add key="Program_LocalVersion" value="本地版本" />
8   </appSettings>
9 </configuration>

通用更新組件的客戶端應該被設置爲啓動程序。由更新組件客戶端來調用主程序而不是直接打開主程序。把它放在與主程序同級的文件目錄,並配置主程序的exe名稱。

啓動的時候調用web服務,傳入本身的程序惟一標識碼和本地版本,由服務器返回xml/json數據並解析之,根據結果來決定是否須要下載文件或者直接啓動

 

客戶端運行效果圖:

一樣的調用web服務和下載文件的基礎性代碼我就不貼出來了,直接附上效果圖:

到這裏,通用更新組件的服務端與客戶端就搭建好了。只須要作一下簡單的配置,就能爲應用程序提供版本升級服務,極大的方便簡化了程序員作版本升級的工做。

QQ 3045568793 山雞   WPF技術交流羣 372754241

歡迎交流 !!!

相關文章
相關標籤/搜索