前言
做客户端(C/S)系统开发的人都会遇到软件的自动更新;系统发布后怎样自动的更新程序?
①更新程序与任何宿主程序是完全独立的;只要在主程序里面启动更新程序就行了;
②更新程序也是一个可执行文件,在启动的时候可以设置是否是自动更新和是否是手动更新;
③有的程序必须要求用户进行更新才能继续使用,所以程序自动更新是有必要的;
④手动更新就是用户可以随时更新程序,不需要严格的控制版本问题;
自动更新的目的就是将服务器上的更新文件拷贝到本地执行目录中,并且覆盖本地同名的文件;流程很简单,但是实现起来有几个地方需要注意:
①大批量的更新文件怎么下载到本地来,有多个更新文件在下载过程中如果网速慢的情况下可能出现丢包、丢文件等情况;
【一种实现是将多个文件通过ICSharpCode.SharpZipLib组件进行打包,这样可以省很多事。】
②下载到本地了,怎么覆盖原有的同名文件;
【一种实现是先同名的文件的支持删除,然后解压缩;这个过程需要临时保存删除的文件,防止操作失败程序无法启动,要注意有事务性的原理;】
③如果更新的文件不只是单单的文件可能还有一些文件夹;
【一种实现是如果存在同名的文件夹,直接递归的删除,然后将其解压缩到目录中;由于压缩包解压后的顶级目录是压缩文件的名称,所有在复制的过程中需要注意目录的层次关系;】
为了部署方便建议先实现一个部署文件的工具,将所有的文件直接打包在里面同时生成服务器端的版本信息文件,效果如下:
工具生成两个文件,一个是版本文件一个是更新包;利用这个工具就很方便的实现了对文件进行压缩、生成HASH值、版本文件、更新地址等信息,如下所示:
升级信息文件中保存着当前本地的版本号、服务器的更新包文件、更新包配置文件地址、宿主程序的名称,需要宿主的名称就能在更新的时候将宿主程序重进程中枚举出来然后关掉,这样就不影响我们更新了。
一、实现效果
二、实现思路
①将客户端程序文件都放在一个文件夹中,对这个文件夹进行整体压缩成一个升级包【注意:如果要修改压缩后文件名称,请修改包含整个客户端程序文件的文件夹名称】。
②填写软件升级包的【程序名称、版本号、更新包文件地址、更新包配置文件地址】信息,然后生成对应该升级包的升级配置信息文件;提供给WebApi接口使用。
三、升级包制作程序
①C#实现自动更新之(新版程序升级包制作)工程源码下载
②C#实现自动更新之(简易客户端示例)工程源码下载
③C#实现自动更新之(旧版程序升级包制作)项目工程下载
④gif动态加载图和动态表情包的制作_xiaochenXIHUA的博客-CSDN博客
⑤C#实现自动更新之(简易WebApi接口程序的制作)
⑥C#实现自动更新之(独立的更新程序)