软件简单升级方式:文件覆盖
客户端软件最简单又有效的升级方式就是下载最新的安装包并覆盖安装,这种方式适用于软件的阶段性更新(变动较多),如果更新频繁而每次变动不多,就比较浪费用户下载的时间;其次是打升级补丁,只对有变动的部分打包,补丁多了会难以维护,这时可以辅以前一种方式;还有更简单的情形,就是只更新部分文件就可以了,只是安装包工具所支持的快捷方式、文件权限、注册服务等功能也没有了。
更新部分文件的方式对服务器的需求很简单,只需要以文件服务器的形式提供最新版本信息、更新文件列表、更新文件下载即可,最新版本信息和更新文件列表可由xml文件表示,只需要两个元素:latestVersion表示最新版本号,file表示程序文件的版本信息;而file包含三个属性:version表示文件最新版本,name表示文件相对路径,md5表示校验值。客户端检查最新版本号后判断是否有可用更新,如果有则计算出需要更新的文件集合,它们的版本号version比客户端版本号高,然后通过相对路径name下载更新文件,再通过校验值md5检查文件正确性,最后覆盖文件完成更新。相对路径既是相对于程序目录的文件路径,也是相对于服务器下载更新文件的base目录,此目录下有最新版本信息文件latest-version.xml。file可以是目录或文件,md5可取特殊值表示删除或清空。
执行更新的部分不能更新自己,需要另一个专用的更新模块来更新它,这样它们就可以相互更新。对于java客户端,它们可以分别叫做Starter和Updater,主程序App可由Starter更新并运行,Updater可以更新Starter。在Windows 7下还有一个好处,Updater可以要求总是以Administrator身份运行,而Starter可由标准用户运行,这时可以将下载的任务交给Updater,它写Program Files目录就没有问题了。Windows 7会检查可执行程序的附加信息manifest来判断是否弹出权限提升的提示,其次用户还可以手动用右键菜单要求“以管理员身份运行”,否则程序对特殊保护位置的写入会默默失败。