目的

广大开应用程序的对象都做了呢应用程序进行版本升级的效力,这个功能本身非常简单,但是各位有没有出考虑了这题目:假如我用维护多个应用程序的下(>2)。每个应用程序的晋升工作用转移得甚麻烦。我们用发出雷同模仿通用的换代机制,只待吗用提升的应用程序进行简短的布,就好为的进行版本升级控制,而不待单独为每个应用程序写升级的功能因此达成同等劳永逸的目的。

 

组成

那通用更新的零部件应该如何来计划,它至少需要以下简单只模块组成:

1.客户端模块
   1.1 负责发送版本验证请求
   1.2
负责下载程序所急需的翻新文件(如果需要更新)

2.服务端模块
   2.1
负责新增/维护为授权的应用程序基础信息
   2.2
负责发布应用程序新版本信息及文件
   2.3
负责征应用程序版本,并回验证结果(如果用创新则回服务器地址,文件路径等等数据,以xml/json形式都得)

 

发端组织

 首先是劳动端的创导,服务端是一个web应用程序。首先创建它的数据库

 1.多少库表设计

   1.1 应用程序基础信息表(EP_Update_Program)

字段名 说明 字段类型
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.exe和c.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

图片 2

图片 3

图片 4

图片 5

   

 

 服务端的创立工作完成了,接下去是客户端的开创

 首先客户端在该地具有温馨之版配置文件:

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名称。

图片 6

启动之早晚调用web服务,传入自己的次第唯一标识码和地面本,由服务器返回xml/json数据并分析的,根据结果来支配是否要下载文件要直接开行

 

客户端运行效果图:

平等的调用web服务与下载文件的基础性代码我不怕未粘出来了,直接附上效果图:

图片 7图片 8

图片 9

交此地,通用更新组件的服务端与客户端就多建筑好了。只待做一下简短的配置,就可知也应用程序提供版本升级服务,极大的有利简化了程序员做版本升级之干活。

QQ 3045568793 山鸡   WPF技术交流群 372754241

接交流 !!!

 

相关文章

网站地图xml地图