用VB实现应用程序在局域网络上自动更新.doc_第1页
用VB实现应用程序在局域网络上自动更新.doc_第2页
用VB实现应用程序在局域网络上自动更新.doc_第3页
用VB实现应用程序在局域网络上自动更新.doc_第4页
用VB实现应用程序在局域网络上自动更新.doc_第5页
已阅读5页,还剩1页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

用VB实现应用程序在局域网络上自动更新/vb/index.htm我们圈甈VB开发大型应用程序时遇到如下问题,进入调试、维护阶段开发小组进驛甈户单位,软件交用户试用会经常修改程序并重新编译。然后再由娋庋员廙唈户复制更新,或者通知用户自行复制更新。对于少量用户可以做刐及时更新。而我们的一个用户在一座十层的大厦中办公,有十几个部闈(即有管理部门又有生产车间分布在不同的楼层),每个部门少则有2埰工作站,多则有数十台工作站,与四台服务器组成局域网络.且每个部门应用程序各不相同,应用程序修改编译后经常不能同步更新,从而造成部门内数据或者部门间的数据不一致。程序员每天都要跑上跑下检查版本更新程序浪费了很多宝贵时间,即使通知部门主管自行更新,某些工作站也会出现遗漏现象。鉴于以上问题我们考虑使用程序自动更新技术,即自动检查新版本,将新版本复制到本地,重新执行本地应用程序。基本原理:在某个服务器上共享出一个目录,其权限为程序员完全控制,其它用户只读。例如:NtServer01Refresh,程序员重新编译后的应用程序.EXE都存放在此目录下。在应用程序的入口处调用版本检查及更新过程,如果服务器应用程序的修改时间大于本地应用程序的修改时间,则认为有新版本出现,应该将服务器上的新版本复制到本地硬盘。 由于应用程序在运行时不能被新版本覆盖,所以就需要中介程序FastCopy.EXE(也用VB编写)来完成更新版本并重新运行本地应用程序。为了达到及时更新的目的可在应用程序中每隔5分钟或10分钟检查一次是否有新版本。(此部分略有兴趣的读者可自行编程添加)本例中:服务器:NtServer01 共享目录: Refresh应用程序:MyApp.exe 中介程序:FastCopy.exe (都存储于共享目录中)下载源代码 (6K) 具体程序实现如下:在应用程序工程MyApp中的部分代码如下:Option Explicit编译后的应用程序名称,注意没有后缀 .EXE,本例为MYAPPPrivate Const App_Name = MyApp最新的应用程序存放的路径,本例为:服务器 NtServer01 共享目录 RefreshPrivate Const ExePath = NtServer01Refresh中介程序名称,注意没有后缀 .EXE,本例为 FastCopyPrivate Const MidExeName = FastCopy应用程序入口Private Sub Form_Load()If UCase(Trim(App.EXEName) UCase(Trim(App_Name) ThenMsgBox 必须将订单管理系统的名称更改为: + App_NameEndEnd If判断是否有最新版本的应用程序,如有则自动更新Call ExeRefresh下面为订单管理系统的正常操作 略 . .End Sub版本检查及更新过程Private Sub ExeRefresh()定义四个临时字符串变量Dim s1 As StringDim s2 As StringDim s3 As StringDim s4 As StringOn Error Resume Next将本地应用程序MyApp.EXE的全路径名存入 s1将本地中介程序FastCopy.exe的全路径名存入 s3s1 = TNTIf Len(App.Path) 3 Thens1 = App.Path + + Trim(App_Name) + .exes3 = App.Path + + MidExeName + .EXEElses1 = App.Path + Trim(App_Name) + .exes3 = App.Path + MidExeName + .EXEEnd Ifs4 = TNT将本地应用程序MyApp.EXE文件的修改时间存入 s4s4 = FileDateTime(s1)s2 = TNT将网络上应用程序MyApp.EXE文件的修改时间存入 s2s2 = FileDateTime(ExePath + App_Name + .EXE)If s2 = TNT ThenMsgBox 没有找到最新的可执行文件: + ExePath + App_Name + .EXE _+ vbCrLf + vbCrLf + 原因1:存放最新EXE的服务器或者工作站没有打开; _+ vbCrLf + 原因2:存放最新EXE的路径错误或者EXE文件不存在; _+ vbCrLf + 请将此情况通知程序员. + vbCrLf + vbCrLf _+ vbCrLf + 按确定按钮后,将继续运行本地EXE文件., vbCritical, 提示End IfIf s2 = TNT Or s4 = TNT Then Exit Sub如果网络上应用程序MyApp.EXE文件的修改时间,大于本地MyApp.EXE文件的修改时间然后再运行本地MyApp.EXE ,中介程序退出后,整个更新过程结束.If CDate(s2) CDate(s4) Then将网络上的中介程序FastCopy.exe复制到本地,这样可防止本地无中介程序时无法进行更新FileCopy ExePath + MidExeName + .EXE, s3则运行中介程序FastCopy.exe ,将最新的MyApp.EXE 复制到本地s1 = Shell(s3 + + ExePath + , + App_Name + .EXE, vbNormalFocus)本地应用程序MyApp.EXE 终止运行,否则已经更新的MyApp.EXE无法覆盖本地的MyApp.EXE .EndEnd IfEnd Sub将以上程序编译为:MyApp.exe 存储在共享目录中.在中介程序工程 FastCopy 中的代码如下:向工程中增加一个窗体Form1 ,向Form1中添加一个定时器 Timer1 , 增加一个标签控件 Label1 ,其 Caption 为 应用程序正在更新,并调整窗体大小.Option ExplicitPrivate sPath As String 用于存储服务器上的共享目录Private sName As String 用于存储应用程序名Private Sub Form_Load()Dim s As String从应用程序的命令行参数中取得数据s = Trim(Command()Dim p As Integerp = InStr(1, s, ,)If p 0 Then取得储服务器上的共享目录sPath = Mid(s, 1, p - 1)取得应用程序名sName = Mid(s, p + 1, Len(s) - p)定时器延时6秒,保证本地旧版应用程序退出运行Timer1.Interval = 6000Else参数错误则退出MsgBox Error, vbCritical, Unload MeEndEnd IfEnd Sub定时器代码Private Sub Timer1_Timer()Timer1.Interval = 0Dim s1 As String取得应用程序的本地路径If Len(App.Path) 3 Thens1 = App.Path + + sNameElses1 = App.Path + sNameEnd If保证服务器关机或者路径错误仍可运行旧版本On Error Resume Next将服务器共享目录中的最新版本复制到本地FileCopy sPath + sName, s1Dim a As Long执行本地的应用程序a = Shell(s1, vbNormalFocus)中介程序退出运行,应用程序自动更新结束Unload Form1EndEnd Sub将工程 FastCopy 编译为FastCopy.exe 并存储于服务器的共享目录。测试:1、 将服务器共享目录中的:MyApp.exe 复制到本地硬盘的某个目录中;2、 重新编译MyApp工程,将MyApp.exe复制到服务器的共享目录中,注意一定不要覆盖本地的MyExe.app ;3

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论