<
您还没有登录┊登录注册 当前在线:295
源码程序系统工具编程开发图形图像网络软件应用软件多媒体类娱乐休闲驱动程序各类教程各类论文文章阅读
ASPPHPJSPASP.NETVBVF百度搜索星星练题网络文摘股市消息技能习题详细分类
当前位置:首页 \ 源码程序 \ vb代码
站内搜索


vb轻松实现软件在线升级(Update)编程技巧

文件大小:2.75 M
运行平台:Windows9X/ME/NT/2000/XP
级别评定:
添加时间:2010-2-7 15:13:37
最后更新:2010-2-7 15:13:37
相关链接:无
所需金额:0 元
添加者:管理员

Download.1

/ ::软件简介:: / ::相关软件:: / ::软件点评:: /::上一个::/ ::下一个:: /
管理首页
 轻松实现软件在线升级(Update)·编程技巧 
作者:杨伟宁
发表于2006年4月3日《电脑报》有删节,本文为全文


前 言

软件在设计过程中,常常会遇到这样的情况:在原始构思阶段,根据一些基本的构想来
开发一个软件的原型。在这个过程中必然会产生一些新的构思,补充新的功能。由此又可能会导致产生一些更新的构思,补充更新的功能。如此循环下去,软件难以完成。结果,竞争者抢先推出产品占领市场,或者市场已经过时,不再需要此软件,于是“泡汤”了。

这就是软件开发中最容易患上的“汤综合症”。——汤什么时候能好?饿了的时候!没有指定晚餐的时间,汤就一直地烧着。开发软件没有特定时间框架,应用程序将不断的得到修改,功能越来越多,微调越来越多。——好象掉尽了无底的黑洞,软件产品永远无法真正完成。(软件行业内夭折的产品很多和这个问题有关,血淋淋的代价值得我们反思)解决这个问题的方法是:必须指定软件的里程碑和临时版本的发行日期,然后通过不断的“Update”使软件逐步完善起来。

IBM的前成员佛雷德·布鲁客斯早在1987年关于软件开发的著名文章中提出了一种概念叫做:“‘培育’而不是设计软件”。

众所周知,一套新的软件首次发行就获得巨大成功几乎是不可能的,也是不现实的。
软件通常都要经过不断的版本升级,才可能真正的发育成熟进而占领市场。

微软公司一直抱着一个原则:不是在开发出的产品已经具有相当完美性能时才推出。而是尽可能快的推出一系列的产品,包括大量的测试版本。由此及时得到大量的用户反馈信息,从而不断改进其产品。——请顾客参与设计、参与讨论、参与实验!
这样做的结果是,尽管微软的产品性能往往不是最优的,但它可以最快推出产品,抢先占领市场。从而得到及时广泛的市场反馈,再次推出更为适应市场的产品,稳固市场地位。( 需求分析->设计->编码->测试(反馈)->再需求分析…… )

《速度就是生命》的作者告诉我们:更快要比更慢好,更早要比更晚好。永无例外。“在这个技术驱动的世界中,未来就是现在。”

我们可以发现,在竞争中获胜的产品几乎没有最好的,而且它从来也不是最好的。如果你坚持等到产品完美再推出到市场,那么可能一切都晚了,所以不要奢望一次就可以铸造出完美的软件系统。(当然我们也不能仅仅强调速度和忽略质量,另一则警告是:“超速导致死亡”)


“为了竞争的需要,速度和质量之间的平衡关系至关重要。两者都不允许以牺牲对方为代价来使自己占据支配地位。”如果:实现90%的功能需要一个月,而实现100%的功能需要10个月。这个时候你就不能苛求完美了。
我们都知道一个口号--“质量是首要的工作”,但是只要你不混淆质量与完美,这就是一个伟大的口号。

    “Update ”实质上就是一个软件能够使自身不断“进化”的重要功能特征,现在我们已经充分了解到它的重要性,那么现在就来实现它吧!


第一章 Update在线升级的实现原理  

   一般来说Update分为客户端和服务器端两个组成部分,客户端接收服务器上的更新信息,并下载更新文件,然后完成一系列注册、配置等更新工作,全部自动化,不需人工操作,在最大程度上方便用户。

根据笔者的经验,Update程序最好独立于主程序,也就是说有一个单独的Update.exe程序来执行更新操作,这样一可以直接更新主程序,二也可方便完成Update的“自身更新”。

   首先,我们遇到的第一个问题是选择合适的开发工具。一般来说Update的功能并不复杂,只是完成下载更新的功能,所以本文就用VB语言编写代码,可以很方便的移植到其它语言环境,另外也可以选用一些成型的Update组件,例如用.NET框架开发的应用程序更新组件AppUpdater等,都可以很方便的帮助我们而只需要编写极少的代码(毕竟重新发明“轮子”,并不是一件荣耀的事)。

    由于各种Update程序的种类繁多,本问主要介绍通用的一些特性.以及适合个人编程、小型公司的Update经济方案,执行流程如下——1.下载网站某个页面,根据页面内容获得最新版本号->2.如果最新版本高于当前版本,则下载升级文件(一般为压缩包)3.释放文件,并用最新文件替换旧文件完成升级。

按照这个最简化的方案,当开发者需要更新升级软件的时候,只用FTP上传更新文件即可。(这样可以不必开发服务器端,更不用购买或租用昂贵的升级服务器)

OK,我们现在开始详细刨析Update的具体执行过程:
 
(图1  笔者开发的Update程序界面)

第二章  透防火墙  
   
首先,Update要进行网络是否已经连通的判断,笔者在这个问题上反复使用过多种方法:Ping某个IP地址、获取注册表建值、网卡连通判断、等等,最终都不理想。原因在于IP地址可能变化、甚至有时候即使物理连通了,也不一定能够确保文件的下载更新。

笔者使用的方法是利用Microsoft Internet Controls控件访问开发者的官方首页来判断网络是否已经连通。代码如下:

Dim Network As Long
Private Sub Form_Load()
WebBrowser1.Navigate "http://www.boobsoft.com"
End sub

Private Sub WebBrowser1_DownloadComplete()‘当Web页面载入完毕此事件激活
If Network = 0 Then
Label1.Caption = "正在升级,请稍后..." 
Update ‘调用升级过程
End If
End Sub

Private Sub WebBrowser1_NavigateError(ByVal pDisp As Object, URL As Variant, Frame As Variant, StatusCode As Variant, Cancel As Boolean) ‘当Web页面浏览失败的时候此事件激活
Network = -1’必须有此语句,在Update过程中要判断网络是否持续通畅
MsgBox "网络没有连通,或升级服务器临时关闭,请稍后再试。"
End Sub

Internet Controls控件的好处不仅是代码简单,又是微软官方控件,更重要的是可以直接穿透防火墙,节省了我们很多的脑细胞。

第三章 检查更新 

接下来我们要“检查更新”——根据版本号判断是否需要Update。

关键技术:从 HTML 文档中提取 TEXT 文本。

方法很简单,我们仍然利用Internet Controls控件,先建立一个ver.html文件,里面只写一个简单的版本号2.01即可(当然,还可以在ver.html文件里面写入一个更新文件的列表、或者是一个压缩好的升级包文件名),然后传送到http://www.boobsoft.com/ver.html位置上。以后每次更新只要修改这个文件然后FTP上传即可。在实际应用中,也可以直接检测一个文件的最后的修改日期,来判断是否升级。但是,这种方法的问题在于会出现潜在的失败可能。比如文件日期被意外修改或不正确,也可能遇到管理员正在更新Web服务器上的应用程序版本,同时有个客户正在下载更新之前的版本,那么这个客户的计算机上就会既存在更新之前的一些文件,也存在更新之后新版本的一些文件。基于上述原因,对于重要的应用程序不提倡使用直接文件检查来更新。综上所述,最稳妥安全的方法就是将Update升级包完整的上传好之后再修改ver.html文件里面的新版本号,方可万无一失。

接下来我们就可以编写获取这个ver.html文件的代码了(由于代码比较长,笔者已经将它们封装成DLL组件,下载地址为http://www.boobsoft.com/update.rar)压缩包内的Download.dll组件可以用来下载任意文件。

第四章  断点续传·下载更新  

最后,仍然利用由笔者提供的Download.dll组件,下载更新文件就可以了。如果更新文件比较多,还可以进一步增加断点续传功能,调用RAR自动解压缩包也是非常实用的。

为了方便的调用RAR的功能,可使用下列封装好的函数


Function GetWINRARPath() As String
Dim myReg As New Registry, KeyFound As Boolean
KeyFound = myReg.GetKeyValue(HKEY_LOCAL_MACHINE, "Software\Microsoft\Windows\CurrentVersion\App Paths\winrar.EXE", "Path", GetWINRARPath)
If KeyFound = False Then MsgBox "系统未安装WINRAR.EXE!": GetWINRARPath = ""
If KeyFound = True Then GetWINRARPath = GetWINRARPath & "\WINRAR"
End Function

Sub compress(ByVal SOURCE As String, ByVal TARGET As String, Optional Mu As String)
If Not GetWINRARPath = "" And Dir(SOURCE) > "" Then Shell GetWINRARPath & " -ibck -p9910 a " & Mu & " " & TARGET & " " & SOURCE, vbHide
End Sub

Sub decompress(ByVal SOURCE As String, ByVal TARGET As String)
If Not GetWINRARPath = "" And Dir(SOURCE) > "" Then Shell GetWINRARPath & " x " & SOURCE & " " & TARGET, vbHide
End Sub

调用举例:
compress "C:\1.jpg", "c:\5.rar"   ' 将"C:\1.jpg",压缩为"c:\5.rar" 。
decompress "C:\1.rar", "c:\test\"  ' 将"C:\1.rar",解压缩到"c:\test\"目录
compress "C:\TEST\", "c:\3.rar", "-r"  '目录(含子目录)压缩

如果下载量非常大,我们还可以采用BT等进阶的下载方式。

  


第五章  安全性·以及其它应用领域 


Update自动升级应用程序的能力具备很多好处,但它也伴随着一些潜在的隐患,这也是我们不得不考虑的问题:第一种危险是有人会用自己的Web服务器欺骗用来部署更新的Web服务器。他们可能会利用那台Web服务器在你的应用程序路径安装一个病毒程序。阻止欺骗或其它通过网络进行的不正当干预的最简单的方法是使用HTTPS。第二种危险是黑客既可能从内部也可能从外部来攻击你的服务器。一旦攻击成功,则有可能意味着成百上千
的客户端也通过自动更新遭受连累,这种情况将是灾难性的。

  为解决这个问题,我们可以对更新文件内容(上文中的ver.html)进行加密,然后再对升级包设置密码,笔者推荐用RAR进行压缩并加密码,一则可以缩小升级包的大小,二则
RAR的密码安全性也是有口皆碑的。

(下列为原文:)
总结:Update自动升级技术含盖了多种的网络技术,其应用领域也是广阔的,譬如用来进行用户在线调查、软件使用频率测定、自动搜集用户信息、传送错误信息、软件测试等等方面。本文篇幅有限就只能就此止笔了,但Update带来的交互性确实值得我们进一步思索的。


(下列为电脑报选用部分)
    总结:Update自动升级技术含盖了多种的网络技术,其应用领域也是广阔的,譬如用来进行用户在线调查、软件使用频率测定、自动搜集用户信息、传送错误信息、软件测试等
方面。“Update ”实质上就是一个软件能够使自身不断“进化”的重要功能特征

本文篇幅有限就只能就此止笔了,但Update带来的交互性确实值得我们进一步思索的。

作者:杨伟宁 联系电话:029-86693008 
E-mail:boobsoft@boobsoft.com
QQ:20837182
地址:西安市高新区团结南路二号,高科新花园7#楼1单元19层199室
邮政编码:710075

相关软件
·MAX4.0魔氏升级版
·搜它呀企业网站升级版
·如何判断client端版本号是否最新
·学校系统升级版
·在线上传系统 升级版
·澜语亭留言板升级
·用多户聊天室升级
·251聊天室和升级补丁
·BBSXP数据库升级程序(4.00-5.00)
·酷易软件园最新升级美化版


1分 0
2分 0
3分 0
4分 0
5分 0
共有 0 人打分
平均得分:0


按字符查询:ABCDEFGHIJKLMNOPQRSTUVWXYZ0~9中文
下载图示: - 附汉化补丁 - 附注册 - 会员软件 - 推荐 - 最新添加
Rainight, 星旺坡 联网备案号:41092802000212 豫ICP备19032584号-1 页面执行时间: 0.17秒
业务QQ:80571569 手机:13030322310