原理:
在服务端存放所有的版本内容,在客户端只存放最新的版本,根据版本信息来进行自动的更新。
相关配置:
服务端需要设置一个虚拟目录,也就是说要开放80端口,然后将不同版本的程序放在虚拟目录下不同的文件夹中。例如:虚拟目录中有"1.0.0.0,"1.1.0.1","1.1.1.8"三个目录,那么在其中就存放着三个不同版本的程序。
根目录下面的文件:
1、serverManifest.xml文件:里面存放当前最新版本所在的路径,每次需要更新的文件名以及相关的证书(加密解密用)。
2、PublilcKey.xml和PrivateKey.xml,:里面有根据相关信息产生的RSA算法的密钥,用来进行用户的认证和文件的加密。
客户端存放文件的文件夹中有一个子件夹,文件夹的名称就是最后下载的版本的名称,例如:"1.1.0.0",在其中存放着需要更新的程序文件,在根文件夹中有以下的几个文件:
1、AppStart.exe-用来启动自动更新
2、Appstart.exe.config-里面有相关的配置信息
A、程序文件存放的位置
B、当前最新的版本号
C、更新程序的名字
D、最后更新的时间
3、每次更新的日志文件,日志文件的起名方式”UpdateLog+年月日时分秒”
运行步骤:
1、客户端运行程序,该程序是通过自动更新程序启动的。
2、自动更新程序会检查网络是否连通。
3、如果网络可用,程序会检测当前的程序的版本和服务器上最新的版本是否一样,如果一样就不进行更新操作。
4、如果本地的程序版本号小于服务器的版本,那么会弹出对话框,提示用户当前服务器上有更新的版本,问用户是否马上进行更新。
5、如果用户选择开始更新,那么首先客户端要与服务端进行认证
6、在认证通过之后,从服务端先下载serverManifest.xml文件,从其中找到需要更新的文件的位置和名字,并进行证书的验证。
7、认证通过之后,在本地建立“Newfile”目录,将需要下载的文件先下载到这个临时目录里面。
8、待下载完成之后,以新的版本号来重新命名文件夹,并更改本地的配置文件
9、提示用户重新启动程序,确认后删除旧版本的文件更新结束。
值得借鉴的地方:
1、所有的操作都记录到日志文件中,不管成功与否,我们都可以看到我们的操作产生了什么样的结果。
2、很多信息都使用xml文件来存放,方便。
3、在进行更新的时候充分的进行了用户的验证和文件的验证,保证了程序的安全。
4、对异常的情况进行了充分的处理。例如:当一个用户自己改变了自己本地的版本信息,使得本地的版本比服务器还要高的时候,程序会自动将本地所有的文件删除。还有当操作发生了错误的时候,会将错误也都写到日志文件中。