首页生活资讯正文

程序员重新设计编写公司软件自动更新系统,代码完全原创

2024-08-18 次浏览

公司让我把我们软件的更新功效换失落,从新写一套软件更新体系,由于之前的更新体系是我们公司某个法式员在网上找的开源体系,部署更新的时刻异常麻烦,由于是桌面法式,会引用许多DLL,假如必要对DLL进行更新,就必要在这个开源体系上编纂DLL的版本号,有时刻更新内容较多的话,编纂版本号都要编纂半天。并且,这个开源更新体系固然是开源的,然则倒是必要贸易授权的,是以,为了不需要的麻烦,公司决议让我从新做一套更新体系。

您别说,我做了十几年法式员,根本上写的法式都是自力部署的,纵然有那种带更新体系的软件,也是在我之前就已经有了,不必要我去写乃至都不必要我去改。以是,固然更新体系在年夜多半桌面软件里面都邑有,但我倒是“年夜姑娘上花轿”头一次写。

但很快,我就依据我们公司软件的现实环境,想出了更新体系的办理计划。

程序员重新设计编写公司软件自动更新系统,代码完全原创
(图片来源网络,侵删)

起首便是要办理之前让我们几个研发比拟切齿腐心的DLL版本号必要编纂的问题,这个是必定要去除的,只留一个主法式(.exe文件)的版本号即可,然后,便是详细思绪。

我的设法主意是,疏忽失落所有DLL的版本号,在软件启动时,拿当地软件目次下的所有DLL跟更新服务器软件目次下的DLL做对照,有差别主动更新。



详细做法是,在软件启动时先哀求服务器,获取服务器更新目次下的文件信息,然后遍通书地软件目次下的所有文件,获取当地软件目次下的文件改动光阴和年夜小,然后跟服务器返回的文件信息做对照,软件则依据差别项主动下载对应的DLL更新到软件当地目次下。此中还必要注意一点,那便是当服务器返回的文件信息列内外面存在当地软件目次不存在的文件,不必要比对,直接下载该文件到当地。

如斯一来,我们必要做的工作就以下两点:

第一点便是必要做一个服务器更新目次的更新法式,用来上传编译后的主法式(.exe)和DLL以及主法式版本号和更新阐明等信息。

做法也很简单,我写了一个软件更新治理体系,这个体系可以列出软件编译目次和服务器更新目次的差别项,我们在更新软件的时刻,可以依据差别项去选择性得更新某些文件(主要是.exe和.dll文件),然后便是主法式版本号和更新阐明。



这就必要服务器得有一个接口来获取服务器更新目次下的文件(GetServiceMasterInfo)以及上传当地编译目次下的文件(UploadMasterFiles),用来做比对,还有更新主法式版本号和更新阐明的接口(SetServiceMasterVersionInfo),统共三个接口。





第二点便是必要对我们软件的登录逻辑做一些改动,我的设法主意是在登录前反省软件更新并更新最新文件,这必要注意一些工作。

由于我们公司的桌面法式是使用.Net的WinForm桌面框架写的,并且,之前的软件登录是集成在主法式里面的,是以,假如纰谬软件进行改动,必要面对一个很紧张的问题,那便是DLL被占用的问题。

固然我们软件许多功效都是使用DLL插件式开发的,必要得时刻才会被加载,然则照样有许多DLL在软件启动时就会被依附,是以,这些DLL会一直被主法式占用,如许一来,当当地DLL与服务器更新目次的DLL纷歧致,然后下载到当地替换DLL的时刻就会呈现DLL被占用的环境,无法完成替换。

是以,我零丁写了一个更新模块,这个更新模块不引用任何其他DLL。

如斯一来,我们就可以这么做:在软件登录界面启动的时刻,先哀求服务器更新目次文件信息(GetServiceMasterInfo),然后跟当地软件目次信息做对照,得到当地软件目次和服务器更新目次的差别项。

此时,重点来了,得到差别项以后,不克不及直接哀求服务器接口下载差别项文件,由于会存在文件被占用的环境。

上面我零丁写了一个更新模块,在获取了当地和服务器更新目次的差别项以后,我们必要零丁开一个过程,启动更新模块,并退出主软件,如许主软件的所有依附项都邑被开释。

此时,我们使用更新模块去下载服务器更新目次的差别项即可,笼罩完当地软件目次的文件以后,在开启新的过程,从新启动主软件并加载新的版本信息,同时,退出更新模块。





当然,更新模块也是必要更新的,以是,在启动主软件的时刻,在匹配当地软件目次和服务器更新目次的文件差别项之前,我们起首得反省下服务器更新目次的软件更新模块是否与当地的软件更新模块是否有差别,有的话,先更新软件更新模块,再执行上述更新操作。

如斯一来,一个我们软件的一个全新的更新体系就横空降生了。

必要注意的是,这套更新逻辑我并没有参考任何现有的源码,完端赖本身想出来的办理计划写出来的,以是呢,可能对专业的您来说照样出缺点的。

另外,代码刚写完,还没完成部署,可能存在一些BUG,望列位嘴下留情呀。公司让我把我们软件的更新功效换失落,从新写一套软件更新体系,由于之前的更新体系是我们公司某个法式员在网上找的开源体系,部署更新的时刻异常麻烦,由于是桌面法式,会引用许多DLL,假如必要对DLL进行更新,就必要再这个开源体系上编纂DLL的版本号,有时刻更新内容较多的话,编纂版本号都要编纂半天。并且,这个开源更新体系固然是开源的,然则倒是必要贸易授权的,是以,为了不需要的麻烦,公司决议让我从新做一套更新体系。

您别说,我做了十几年法式员,根本上写的法式都是自力部署的,纵然有那种带更新体系的软件,也是在我之前就已经有了,不必要我去写乃至都不必要我去改。以是,固然更新体系在年夜多半桌面软件里面都邑有,但我倒是“年夜姑娘上花轿”头一次写。

但很快,我就依据我们公司软件的现实环境,想出了更新体系的办理计划。

起首便是要办理之前让我们几个研发比拟切齿腐心的DLL版本号必要编纂的问题,这个是必定要去除的,只留一个主法式(.exe文件)的版本号即可,然后,便是详细思绪。

我的设法主意是,疏忽失落所有DLL的版本号,在软件启动时,拿当地软件目次下的所有DLL跟更新服务器软件目次下的DLL做对照,有差别主动更新。

详细做法是,在软件启动时先哀求服务器,获取服务器更新目次下的文件信息,然后遍通书地软件目次下的所有文件,获取当地软件目次下的文件改动光阴和年夜小,然后跟服务器返回的文件信息做对照,软件则依据差别项主动下载对应的DLL更新到软件当地目次下。此中还必要注意一点,那便是当服务器返回的文件信息列内外面存在当地软件目次不存在的文件,不必要比对,直接下载该文件到当地。

如斯一来,我们必要做的工作就以下三点:

第一点便是必要做一个服务器更新目次的更新法式,用来上传编译后的主法式(.exe)和DLL以及主法式版本号和更新阐明等信息。

做法也很简单,我写了一个软件更新治理体系,这个体系可以列出软件编译目次和服务器更新目次的差别项,我们在更新软件的时刻,可以依据差别项去选择性得更新某些文件(主要是.exe和.dll文件),然后便是主法式版本号和更新阐明。

这就必要服务器得有一个接口来获取服务器更新目次下的文件(GetServiceMasterInfo)以及上传当地编译目次下的文件(UploadMasterFiles),用来做比对,还有更新主法式版本号和更新阐明的接口(SetServiceMasterVersionInfo),统共三个接口。





第二点便是必要对我们软件的登录逻辑做一些改动,我的设法主意是在登录前反省软件更新并更新最新文件,这必要注意一些工作。

由于我们公司的桌面法式是使用.Net的WinForm桌面框架写的,并且,之前的软件登录是集成在主法式里面的,是以,假如纰谬软件进行改动,必要面对一个很紧张的问题,那便是DLL被占用的问题。

固然我们软件许多功效都是使用DLL插件式开发的,必要得时刻才会被加载,然则照样有许多DLL在软件启动时就会被依附,是以,这些DLL会一直被主法式占用,如许一来,当当地DLL与服务器更新目次的DLL纷歧致,然后下载到当地替换DLL的时刻就会呈现DLL被占用的环境,无法完成替换。

是以,我零丁写了一个更新模块,这个更新模块不引用任何其他DLL。

如斯一来,我们就可以这么做:在软件登录界面启动的时刻,先哀求服务器更新目次文件信息(GetServiceMasterInfo),然后跟当地软件目次信息做对照,得到当地软件目次和服务器更新目次的差别项。

此时,重点来了,得到差别项以后,不克不及直接哀求服务器接口下载差别项文件,由于会存在文件被占用的环境。

上面我零丁写了一个更新模块,在获取了当地和服务器更新目次的差别项以后,我们必要零丁开一个过程,启动更新模块,并退出主软件,如许主软件的所有依附项都邑被开释。

此时,我们使用更新模块去下载服务器更新目次的差别项即可,笼罩完当地软件目次的文件以后,在开启新的过程,从新启动主软件并加载新的版本信息,同时,退出更新模块。





当然,更新模块也是必要更新的,以是,在启动主软件的时刻,在匹配当地软件目次和服务器更新目次的文件差别项之前,我们起首得反省下服务器更新目次的软件更新模块是否与当地的软件更新模块是否有差别,有的话,先更新软件更新模块,再执行上述更新操作。

如斯一来,一个我们软件的一个全新的更新体系就横空降生了。

必要注意的是,这套更新逻辑我并没有参考任何现有的源码,完端赖本身想出来的办理计划写出来的,以是呢,可能对专业的您来说照样出缺点的。

另外,代码刚写完,还没完成部署,可能存在一些BUG,望列位嘴下留情呀。

声明:小我原创,仅供参考
更新目次软件
国人用中式英语安慰外国女生,竟火到外网变流行梗。老外折服当代莎士比亚。 没有了...
相关内容