用VB实现应用程序在局域网络上自动更新

万能的布丁

万能的布丁

2016-02-19 18:10

每个人都希望每天都是开心的,不要因为一些琐事扰乱了心情还,闲暇的时间怎么打发,关注图老师可以让你学习更多的好东西,下面为大家推荐用VB实现应用程序在局域网络上自动更新,赶紧看过来吧!
我们在用VB开发大型应用程序时遇到如下问题,进入调试、维护阶段开发小组进驻用户单位,软件交用户试用会经常修改程序并重新编译。然后再由程序员给用户复制更新,或者通知用户自行复制更新。对于少量用户可以做到及时更新。而我们的一个用户在一座十层的大厦中办公,有十几个部门(即有管理部门又有生产车间分布在不同的楼层),每个部门少则有2~3台工作站,多则有数十台工作站,与四台服务器组成局域网络.且每个部门应用程序各不相同,应用程序修改编译后经常不能同步更新,从而造成部门内数据或者部门间的数据不一致。程序员每天都要跑上跑下检查版本更新程序浪费了很多宝贵时间,即使通知部门主管自行更新,某些工作站也会出现遗漏现象。鉴于以上问题我们考虑使用程序自动更新技术,即自动检查新版本,将新版本复制到本地,重新执行本地应用程序。
  基本原理:在某个服务器上共享出一个目录,其权限为程序员完全控制,其它用户只读。
  例如:NtServer01Refresh,程序员重新编译后的应用程序.EXE都存放在此目录下。
  在应用程序的入口处调用版本检查及更新过程,如果服务器应用程序的修改时间大于本地应用程序的修改时间,则认为有新版本出现,应该将服务器上的新版本复制到本地硬盘。
  由于应用程序在运行时不能被新版本覆盖,所以就需要中介程序FastCopy.EXE(也用VB编写)来完成更新版本并重新运行本地应用程序。为了达到及时更新的目的可在应用程序中每隔5分钟或10分钟检查一次是否有新版本。(此部分略有兴趣的读者可自行编程添加)
  本例中:
  服务器:NtServer01共享目录:Refresh
  应用程序:MyApp.exe中介程序FastCopy.exe(都存储于共享目录中)
  下载源代码(6K)

具体程序实现如下:
  在应用程序工程MyApp中的部分代码如下:
  OptionExplicit
  '编译后的应用程序名称,注意没有后缀.EXE,本例为MYAPP
  PrivateConstApp_Name="MyApp"
  '最新的应用程序存放的路径,本例为:服务器NtServer01共享目录Refresh
  PrivateConstExePath="NtServer01Refresh"
  '中介程序名称,注意没有后缀.EXE,本例为FastCopy
  PrivateConstMidExeName="FastCopy"
  
  '应用程序入口
  PrivateSubForm_Load()
  IfUCase(Trim(App.EXEName))UCase(Trim(App_Name))Then
  MsgBox"必须将订单管理系统的名称更改为:" App_Name
  End
  EndIf
  '判断是否有最新版本的应用程序,如有则自动更新
  CallExeRefresh
  
  '下面为订单管理系统的正常操作略.......
  EndSub
  
  '版本检查及更新过程
  PrivateSubExeRefresh()
  '定义四个临时字符串变量
  Dims1AsString
  Dims2AsString
  Dims3AsString
  Dims4AsString
  OnErrorResumeNext
  '将本地应用程序MyApp.EXE的全路径名存入s1
  '将本地中介程序FastCopy.exe的全路径名存入s3
  s1="TNT"
  IfLen(App.Path)3Then
  s1=App.Path "" Trim(App_Name) ".exe"
  s3=App.Path "" MidExeName ".EXE"
  Else
  s1=App.Path Trim(App_Name) ".exe"
  s3=App.Path MidExeName ".EXE"
  EndIf
  
  s4="TNT"
  '将本地应用程序MyApp.EXE文件的修改时间存入s4
  s4=FileDateTime(s1)
  s2="TNT"
  '将网络上应用程序MyApp.EXE文件的修改时间存入s2
  s2=FileDateTime(ExePath App_Name ".EXE")
  Ifs2="TNT"Then
  MsgBox"没有找到最新的可执行文件:" ExePath App_Name ".EXE"_
   vbCrLf vbCrLf "原因1:存放最新EXE的服务器或者工作站没有打开;"_
   vbCrLf "原因2:存放最新EXE的路径错误或者EXE文件不存在;"_
   vbCrLf "请将此情况通知程序员." vbCrLf vbCrLf_
   vbCrLf "按确定按钮后,将继续运行本地EXE文件.",vbCritical,"提示"
  EndIf
  Ifs2="TNT"Ors4="TNT"ThenExitSub
  '如果网络上应用程序MyApp.EXE文件的修改时间,大于本地MyApp.EXE文件的修改时间
  '然后再运行本地MyApp.EXE,中介程序退出后,整个更新过程结束.
  IfCDate(s2)CDate(s4)Then
  '将网络上的中介程序FastCopy.exe复制到本地,这样可防止本地无中介程序时无法进行更新
  FileCopyExePath MidExeName ".EXE",s3
  '则运行中介程序FastCopy.exe,将最新的MyApp.EXE复制到本地
  s1=Shell(s3 "" ExePath "," App_Name ".EXE",vbNormalFocus)
  '本地应用程序MyApp.EXE终止运行,否则已经更新的MyApp.EXE无法覆盖本地的MyApp.EXE.
  End
  EndIf
  EndSub
  将以上程序编译为:MyApp.exe存储在共享目录中.
  
  在中介程序工程FastCopy中的代码如下:
  向工程中增加一个窗体Form1,向Form1中添加一个定时器Timer1,增加一个标签控件Label1,其Caption为"应用程序正在更新",并调整窗体大小.
  OptionExplicit
  PrivatesPathAsString'用于存储服务器上的共享目录
  PrivatesNameAsString'用于存储应用程序名
  PrivateSubForm_Load()
  DimsAsString
  '从应用程序的命令行参数中取得数据
  s=Trim(Command())
  DimpAsInteger
  p=InStr(1,s,",")
  Ifp0Then
  '取得储服务器上的共享目录
  sPath=Mid(s,1,p-1)
  '取得应用程序名
  sName=Mid(s,p 1,Len(s)-p)
  '定时器延时6秒,保证本地旧版应用程序退出运行
  Timer1.Interval=6000
  Else
  '参数错误则退出
  MsgBox"Error",vbCritical,""
  UnloadMe
  End
  EndIf
  EndSub

(本文来源于图老师网站,更多请访问http://m.tulaoshi.com/bianchengyuyan/)

'定时器代码
  PrivateSubTimer1_Timer()
  Timer1.Interval=0
  Dims1AsString
  '取得应用程序的本地路径
  IfLen(App.Path)3Then
  s1=App.Path "" sName
  Else
  s1=App.Path sName
  EndIf
  '保证服务器关机或者路径错误仍可运行旧版本
  OnErrorResumeNext
  '将服务器共享目录中的最新版本复制到本地
  FileCopysPath sName,s1
  DimaAsLong
  '执行本地的应用程序
  a=Shell(s1,vbNormalFocus)
  '中介程序退出运行,应用程序自动更新结束
  UnloadForm1
  End
  EndSub
  将工程FastCopy编译为FastCopy.exe并存储于服务器的共享目录。
  
  测试:
  1、将服务器共享目录中的:MyApp.exe复制到本地硬盘的某个目录中;
  2、重新编译MyApp工程,将MyApp.exe复制到服务器的共享目录中,注意一定不要覆盖本地的MyExe.app;
  3、这样服务器上MyApp.exe的修改时间肯定大于本地MyApp.exe的修改时间;
  4、运行本地MyApp.exe,几秒钟后屏幕上会出现"应用程序正在更新"的窗体,随后更新后应用程序再次被运行。则自动更新成功。
  5、程序的修改时间可通过在文件上用鼠标按右键的属性或内容的菜单观察。
  本程序在Windows98和VB6.0,NT局域网络下测试通过。
  本文内容也适用于其它语言参考。->

(本文来源于图老师网站,更多请访问http://m.tulaoshi.com/bianchengyuyan/)
展开更多 50%)
分享

猜你喜欢

用VB实现应用程序在局域网络上自动更新

编程语言 网络编程
用VB实现应用程序在局域网络上自动更新

自动更新工作站的应用程序

编程语言 网络编程
自动更新工作站的应用程序

s8lol主宰符文怎么配

英雄联盟 网络游戏
s8lol主宰符文怎么配

用VB编写WindowsCGI应用程序

编程语言 网络编程
用VB编写WindowsCGI应用程序

怎样用VB在应用程序中调用API

编程语言 网络编程
怎样用VB在应用程序中调用API

lol偷钱流符文搭配推荐

英雄联盟 网络游戏
lol偷钱流符文搭配推荐

如何利用win7架构局域网络

电脑网络
如何利用win7架构局域网络

在VB应用程序中恰当的使用声音

编程语言 网络编程
在VB应用程序中恰当的使用声音

lolAD刺客新符文搭配推荐

英雄联盟
lolAD刺客新符文搭配推荐

巧用CLIPBOARD建立图像数据库

巧用CLIPBOARD建立图像数据库

QQ网络IP异常需要重新登录的原因

QQ网络IP异常需要重新登录的原因
下拉加载更多内容 ↓