`
feipigwang
  • 浏览: 749015 次
  • 性别: Icon_minigender_2
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

可复用的自动升级系统实现(一)

 
阅读更多

相对于B/S结构来说,C/S模式的客户端的部署和升级是一个很大的麻烦。有很多企业用户就是因为这个原因而放弃使用C/S。然而当一个应用必须要使用C/S结构才能很好的实现其功能的时候,我们该如何解决客户端的部署与自动升级问题了?

部署很简单,只要点击安装程序即可,难的在于每当有新版本发布时,能够实现自动升级。首先,我需要把自动升级的概念扩展一下。自动升级不仅仅是把当前版本的主程序EXE或其使用dll自动升级新的版本,还包括,当新版本的EXE需要使用原先不存在的dll时,自动升级系统也能够自动下载这些新的dll,再进一步,自动升级系统还能删除那些不再使用的dll。

我们的目标很简单,我们希望开发一个与具体应用无关的能够复用的自动升级系统,我将它称为UpdateActionSystem。

一般我们C/S的客户端有一个主应用程序EXE和一系列辅助的DLL组成,另外还可能包括必要的配置文件和其它资源文件,为了能实现所有这些文件的自动更新,我们引入UpdateActionSystem.exe和一个版本配置文件UpdateConfig.xml放在与主程序EXE相同的目录中。UpdateConfig.xml中有当前目录下所有文件的当前版本。那么UpdateActionSystem.exe从何处获取每个文件最新的版本号了?对,从数据库。UpdateConfig.xml中给出了该数据库的位置信息。先看看UpdateConfig.xml的内容。


<?xml version="1.0" encoding="gb2312"?>
<GTPDef xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<HostInfo>
<DataBaseIP>218.201.34.117</DataBaseIP>
<DataBaseName>haonet</DataBaseName>
<SoftwareType>OASystem</SoftwareType>
<CommonSoftwareTypeName>Common</CommonSoftwareTypeName>
</HostInfo>
<VersionInfo>
<GoldPrinter.dll>2.000</GoldPrinter.dll>
<XSkyControls.dll>1.000</XSkyControls.dll>
<OASystem.exe>0.995</OASystem.exe>
</VersionInfo>
</GTPDef>

可以看到,在这个示例中,我的客户端系统有一个主程序OASystem.exe ,和两个dll--GoldPrinter.dll ,XSkyControls.dll,它们的版本号也记录于此。另外HostInfo部分记录了UpdateActionSystem.exe应该从何处获取最新版本号信息,其中的SoftwareType字段和CommonSoftwareTypeName字段在有多个不同的客户端系统都需要升级时会作为区别标志。

好,我们知道了可以从数据库中的SoftwareVersion表获取最新版本信息,我们可以看看这个表的结构:
SoftwareName -- 更新文件的名称。
URL -- 下载该文件的地址。
Version -- 该文件的最新版本号
SoftwareType -- 文件类型(与上面的配置文件中的对应)

所以当UpdateActionSystem.exe从数据库中获取的版本号必当前版本号要高,那么它就会从URL指示的地方下载新的文件。另外,如果UpdateActionSystem.exe发现数据库中的表中有一个文件的SoftwareType与配置文件中的值相同,而此文件的信息在配置文件中又不存在,说明这个文件是新加入的,于是UpdateActionSystem.exe就下载这个文件。

可以看出,我们基本把如何实现一个可复用的自动升级系统的思路已经清楚了,它是与应用无关的。
如果我们的一套系统需要引入自动升级,只需一下几个步骤:
(1)引入UpdateActionSystem.exe和一个版本配置文件UpdateConfig.xml放在与主程序EXE相同的目录中,并修改UpdateConfig.xml中的内容与当前应用一致。
(2)在数据库中增加SoftwareVersion表,并填入相应的文件信息记录。
(3)将以后新版本的文件放在数据库中URL指示的地方。
(4)在主程序中添加一个对自己的最新版本检查,如果发现有新版本,则启动UpdateActionSystem.exe。

(一般将主程序作为升级的触发器,这是以为主程序更新了,其它的dll文件可能没有更新,但是如果一个dll更新了,则主程序必定发生变化。当然你也可以直接点击UpdateActionSystem.exe进行更新。)

看看我的示例运行的图片。

当有新版本时,界面如下:

点击蓝色链接后,即执行UpdateActionSystem.exe,界面如下:

升级结束后,界面如下:

关于整个UpdateActionSystem.exe系统实现的源代码将在下期文章给出。


分享到:
评论

相关推荐

    C#软件升级方案-C#编写的自动升级系统

    长期以来,广大程序员为到底是使用Client/Server,还是使用...现在好了,我们的目标很简单,我们希望开发一个与具体应用无关的能够复用的自动升级系统。下面我为大家提供了一套可复用 的用C#编写的自动升级系统。

    OAUS可部署_OAUS部署系统_

    对于PC桌面应用程序而言,自动升级功能往往是必不可少的。而自动升级可以作为一个独立的C/S系统来开发,这样,就可以在不同的桌面应用中...如果需要直接部署使用自动升级系统,那么,可下载文末的可执行程序压缩包。

    winform 自动升级 源码可供运行

    对于PC桌面应用程序而言,自动...而自动升级可以作为一个独立的C/S系统来开发,这样,就可以在不同的桌面应用中进行复用。本文将着重介绍OAUS的相关背景、使用方法,至于详细的实现细节,大家可以直接下载源码研究。

    嵌入式系统详细文档

    出现这种现象的原因主要是外部设备种类繁多,所基于的协议也是千差万别,如果要实现一种比较通用的驱动很不容易。但是我们可以考虑提供一个一般工程人员非常熟悉的开发环境,在这个环境中通过简单易行的操作实现数据...

    基于J2EE框架的个人博客系统项目毕业设计论文(源码和论文)

    而要实现这一点,应通过系统的开放性来完成,既系统应是一个开放系统,只要符合一定的规范,可以简单的加入和减少系统的模块,配置系统的硬件。通过软件的修补、替换完成系统的升级和更新换代。 3、 系统的易用性和...

    基于python face recognition OpenCV 的智慧教室人脸考勤系统 (毕业设计 附完整代码可直接运行)

    人脸考勤系统以人脸为介质,人员经过设备时只需轻轻一瞥,1 秒内即可自动识别人员身份并完成签到,实现对人员的精准管理。无需担心错签或漏签问题,只需要刷脸就能秒速签到,大大提升了学生通行效率和体验。该系统...

    数字化转型:业务中台方案.rar

    通过构建业务中台,企业可以实现业务的模块化、服务的复用和流程的自动化,从而提高响应速度,降低运营成本,增强客户体验。此外,资料还详细介绍了实施业务中台的具体步骤,包括需求分析、系统设计、技术选型、平台...

    JspRun!社区论坛系统 v6.0 bulid 090424 GBK 安装版.rar

    系统采用struts、hibernate框架及中间件的结合既实现了业务逻辑与控制逻辑的有效分离,提高了层次结构的清晰度,提高了复用的粒度降低了开发代价和维护代价,同时保证了软件的质量使其更具有鲁棒性和可维护性。...

    asp.net知识库

    HttpModule 实现 ASP.Net (*.aspx) 中文简繁体的自动转换,不用修改原有的任何代码,直接部署即可! 服务器自定义开发二之客户端脚本回发 Web开发: 使用URL重写WEB主题切换 如何在Asp.Net1.1中实现页面模板(所谓的...

    软件工程知识点

    软件的维护过程,也就是修正软件错误,完善软件功能,由此使软件不断进化升级的过程,以使系统更加持久地满足用户的需要。因此,对软件的维护也可以看成为对软件的再一次开发。在这个时期,对软件的维护主要涉及三个...

    工程硕士学位论文 基于Android+HTML5的移动Web项目高效开发探究

    第六章 认我测在线检测服务系统实现与测试 33 6.1认我测在线检测服务框架设计 33 6.2 系统运行环境搭建及配置 34 6.2.1 AndroidManifest.xml主程序环境配置 34 6.2.2 移动端工程资源布局 35 6.3 认我测在线认证检测...

    超级有影响力霸气的Java面试题大全文档

     Java Bean 是可复用的组件,对Java Bean并没有严格的规范,理论上讲,任何一个Java类都可以是一个Bean。但通常情况下,由于Java Bean是被容器所创建(如Tomcat)的,所以Java Bean应具有一个无参的构造器,另外,...

    JspRun!社区论坛系统 v6.0 bulid 090423 GBK 源码版.rar

    系统采用struts、hibernate框架及中间件的结合既实现了业务逻辑与控制逻辑的有效分离,提高了层次结构的清晰度,提高了复用的粒度降低了开发代价和维护代价,同时保证了软件的质量使其更具有鲁棒性和可维护性。...

    《计算机网络技术》课程设计报告.doc

    计算机的系统也不断更新,因此必须具有可升级性。 2.1.5安全性 安全性是对用户所需的信息和设备的完整性的保证,用户安全需要包括经常 自动备份、发生问题后及时恢复和对关键数据进行管理。 2.2网络需求 这个公司...

    java 面试题 总结

    Java Bean 是可复用的组件,对Java Bean并没有严格的规范,理论上讲,任何一个Java类都可以是一个Bean。但通常情况下,由于Java Bean是被容器所创建(如Tomcat)的,所以Java Bean应具有一个无参的构造器,另外,...

    C#微软培训资料

    一个可 可个可 可 以互相交换组件的地方 以互相交换组件的地方以互相交换组件的地方 以互相交换组件的地方 比尔 比尔比尔 比尔.盖茨 盖茨盖茨 盖茨 在本章中你将了解 Microsoft.NET 的概念 ...

    嵌入式系统/ARM技术中的基于FPGA的PCI总线接口设计 (图)

    PCI总线特点---PCI总线宽度32位,可升级到64位;最高工作频率33MHz,支持猝发工作方式,使传输速度更高;低随机访问延迟(对从总线上的主控寄存器到从属寄存器的写访问延迟为60ns);处理器/内存子系统能力完全一致;...

    alarm-dog:哮天犬是一个通用的统一告警平台,提供配置化、流程化、标准化的能力,支持多种告警通知渠道,支持告警收敛、过滤、升级、工作流、自动恢复等功能,实现统一输入、不同输出。可以对接Grafana、阿里云Arms、实时计算等监控能力,各业务也可以直接在代码中埋点上报告警,也可以定制化开发,实现监控告警全场景覆盖。https

    可以选择对接日志中心日志类监控、实时计算类的监控能力,各业务方也可以直接在代码中埋点上报告警,同时我们团队也可以定制化开发既能满足业务需求又能快速复用告警平台的监控系统,实现监控告警全场景覆盖。...

    基于SATA 3.0的高速大容量嵌入式存储阵列控制器

    本文提出了一种基于FPGA的SATA 3.0存储阵列控制器,通过合理设计分层架构以及通道扩展方式,提高了阵列控制器的跨平台移植能力、升级能力、模块复用能力和环境适应能力,弥补了专用RAID控制芯片依赖于计算机而不适合...

    PERL语言编程

    要想写可移植的 C/C++ 程序,你得在程序里加上一大堆 #ifdef 标签来区分不同的系统。要想写可移植的 Java 程序,你必须理解每种新的 Java 实现的特质。要想写可移植的 &lt;br/&gt;shell,你可能要记住每条命令在每种...

Global site tag (gtag.js) - Google Analytics