施晓廉,李佳,王建祥,曹翔
(上海无线电设备研究所,上海 200090)
目前,在MES系统(Manufacture Execution System),即制造企业车间执行的信息化管理系统中,普遍采用 C/S模式。随着信息化程度的不断加深,客户端程序需要提供更多功能;同时,程序也会不可避免的出现bug,软件需要经常进行更新。由于部署在实际的生产环境中,为了便捷高效的实现各设备客户端程序的更新操作,必须采用自动更新系统。
目前应用的客户端更新系统中,更新方式主要是HTTP方式[7]、FTP方式[5-6,8]。大部分系统只解决了程序部署到服务器之后的问题[1-3,9],还需要人工进行版本控制及服务器部署,增加了不必要的工作量,也可能引入错误。另外,当更新模块本身需要更新时,系统无法进行自动操作,只能手动部署到客户端。
本系统包括两个子系统,一部分是供开发人员使用的发布子系统,一部分是供软件操作人员使用的更新子系统,即狭义上的更新系统。图 1给出了系统简要工作流程。
图1 (a) 自动发布子系统
图1 (b) 自动更新子系统
在使用发布子系统之前,需要先对代码项目文件进行预处理,保证版本号能够动态修改。
当启动发布程序时,该程序会调用批处理脚本实现主程序的编译工作。编译完成后,发布程序会根据XML配置文件[4],通过web服务有选择性的上传文件到服务器上。
当操作人员在客户端启动主程序时,主程序会首先启动检查线程,对服务器的程序版本进行检测。当发现服务器的程序版本更高时,会启动更新程序,并退出。更新程序将高版本的文件下载完成后,重启主程序。
程序采用 Tortoise SVN对代码进行管理,它提供了一个命令行工具SubWCRev.exe,能够读取运行目录的代码版本号并替换相应模板。本系统应用这个工具实现了编译时程序版本的控制。
为了使得程序的版本一直保持最新,需要在编译前提交代码。经过编译后,程序的版本就被替换成了当前代码版本,实现了版本控制。
程序流程如下:
图2 发布程序流程
发布程序的主要功能是调用脚本,编译主程序,并根据配置文件上传压缩后的主程序及库文件,最后采用web方式上传各文件的版本信息及压缩包的MD5码。
3.2.1 主程序内自检线程设计
当主程序开始运行时,首先启动一个自检线程。该线程会下载服务器上的版本记录文件,与本地模块版本进行对比,检查服务器是否有文件需要更新或有新增文件。当需要更新时将信息写入待更新记录文件中,并拉起更新程序,最后自身退出。线程流程如下:
图3 自检线程流程图
3.2.2 更新程序设计
程序流程如下:
图4 更新程序流程图
更新程序通过读取待更新列表记录文件,获取待更新模块列表。随后从服务器上下载相应的文件,存到临时文件夹中,校验通过后解压新文件,并替换原有文件。
3.2.3 模块互更新线程设计
在主程序确认更新已经完成,程序正常运行后,会启动一个线程下载记录文件,检查更新程序的版本是否与服务器上版本一致。当服务器上版本较高时,会在后台下载更新程序,并进行替换,实现了更新程序的自动更新。程序流程与3.2.2节所述类似。
本文设计了一套C#客户端下的一体化自动更新方案,包括版本控制、自动发布、自动更新与模块互更新。该方案覆盖了从代码编译到程序部署的整个流程,使得软件开发人员只需要关注代码功能本身,在软件开发完毕后提交代码以更新代码版本,随后运行该方案下的发布工具,即可实现开发端到使用端的自动更新。该方案大大提升了软件设计人员迭代开发的速度,方便车间操作人员更好的进行生产,具备很好的易用性。另外,该方案提供了更新程序的在线更新,即可以在线改变具体更新方式,便于后期功能的添加,而不需要重新部署,具有很强的可扩展性。最后,方案在移植时,只需要修改版本控制的部分即可,具备很好的可移植性。
[1]袁璟瑾.客户端软件自动更新的设计与实现[J].邢台职业技术学院学报,2012, 29(5): 93-95.
[2]朱建凯, 郑洪源, 丁秋林.基于VISUAL C++ 客户端程序自动更新的应用研究[J].计算机应用与软件, 2010, 27(2): 172-173,187.
[3]张志彬, 白剑坤.HIS系统客户端软件自动更新实现[J].医疗装备, 2009,22(3): 27-28.
[4]赵宏伟, 孙永清, 崔宇寅.一种软件自动更新方法[J].电脑知识与技术,2012, 8(1): 74-76.
[5]关磊.医院系统客户端的自动更新[J].医院数字化, 2016, 31(3): 108-110.
[6]赵卫绩, 刘井莲.基于FTP协议的客户端自动更新程序的设计与实现[J].科学技术与工程, 2010, 10(34): 8591-8593.
[7]李慧, 张剑霞.基于 HTTP协议下自动更新平台的构建[J].数字技术与应用, 2013, 20(7): 62.
[8]杨传伟, 孟凡荣.C/S客户端软件自动更新系统的设计与实现[J].计算机工程与设计, 2007, 28(18): 4561-4563.
[9]黄荣, 李刚荣, 李景波.“军字一号”信息系统通用自动更新程序的设计与实现[J].中国医疗设备, 2014, 29(3): 43-44.