公司让我把我们软件的更新功能换掉,重新写一套软件更新系统,因为之前的更新系统是我们公司某个程序员在网上找的开源系统,部署更新的时候非常麻烦,因为是桌面程序,会引用很多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,望各位嘴下留情呀!
到此这篇怎么添加bigboss源(bigboss源没有mobilesubstrate依赖)的文章就介绍到这了,更多相关内容请继续浏览下面的相关推荐文章,希望大家都能在编程的领域有一番成就!版权声明:
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若内容造成侵权、违法违规、事实不符,请将相关资料发送至xkadmin@xkablog.com进行投诉反馈,一经查实,立即处理!
转载请注明出处,原文链接:https://www.xkablog.com/rfx/37388.html