首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

C# 兑现软件自动更新升级程序

2012-10-21 
C# 实现软件自动更新升级程序Update.asmx仅提供一个功能,就是检测是否需要更新,在需要更新的时候就返回一

C# 实现软件自动更新升级程序

Update.asmx仅提供一个功能,就是检测是否需要更新,在需要更新的时候就返回一个更新地址,通常情况下返回的地址就是Download.ashx,而在某些特殊情况下,也可以修改服务端使之从其他Url提供更新下载。检测是否需要更新的的具体做法是:首先获取Updata目录中的主程序版本号,再获取数据库中的最新版本号,两者对比。如果相同则直接与客户端提供的版本号相对比并返回结果;如果不同则将主程序版本号写入数据库,然后生成新的更新文件包,直接向客户端返回更新地址。

Download.ashx的功能仅仅是将最新版本更新文件包输出。

而客户端部分包含主程序、Update.exe以及其他附属文件,更新时由主程序检测并下载更新,在主程序退出时,如有更新并已成功下载,则调用Update.exe完成解包及更新覆盖工作。需注意的是:Update.exe永远不能被更新,因为它无法更新其自身,所以服务端更新时也不要将Update.exe纳入更新包。

下面就是来实际编写一个自动更新解决方案:

服务器端

首先建立一个Web服务项目,项目名为“自动更新服务”:

C# 兑现软件自动更新升级程序

添加一数据库,名为Database.mdf:

C# 兑现软件自动更新升级程序

在数据库中创建新的数据库关系图,并如下设计数据库表:

C# 兑现软件自动更新升级程序

创建一个Ado.Net Entity Data Model,名为Model.edmx:

C# 兑现软件自动更新升级程序

从刚才的建立的数据库中生成模型:

C# 兑现软件自动更新升级程序

在Web.Config的appSettings节点中新增两个节点,用以设置更新程序的主文件名及更新包下载地址:

C# code

添加一个新的Web服务,名为Update.asmx:

C# 兑现软件自动更新升级程序

书写如下代码:

C# code

代码:

C# code

建好之后直接删掉Form1.cs吧,此程序不需要界面,在Program.cs中写代码就可以了。

同样需要引入GZip类用于解包:

C# 兑现软件自动更新升级程序

然后编写代码:

C# code

为程序添加服务引用:

C# 兑现软件自动更新升级程序

这里的地址使用的是本地的调试地址。

为了检测主程序自身的版本号,还需要添加对System.Windows.Forms的引用。

然后开始设计界面,这里仅为演示更新操作,所以界面上只是简单的设计了更新相关的提示、操作控件:

C# 兑现软件自动更新升级程序

代码为:

然后启动客户端程序进行测试,应该看到程序界面里什么都没有,因为客户端和服务器端程序版本是一致的。

现在我们修改客户端版本号为1.0.0.1:

C# 兑现软件自动更新升级程序

然后重新编译程序。

因为服务器仅仅是判断版本号是否不同,而不是哪个更高,所以不仅仅是升级,降级更新也是可以的,我们来测试一下:

C# 兑现软件自动更新升级程序

找到所谓的新版本了^^,点开始下载:

C# 兑现软件自动更新升级程序

下载完成,这时目录里就有update.data这个文件了。

现在关闭程序,等待10秒,让Update.exe完成更新:

C# 兑现软件自动更新升级程序

可以看到,程序被降级为1.0.0.0了,而且那个“更新说明.txt”也被更新出来了。

热点排行