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

2016-02-19 18:10 5 1 收藏

每个人都希望每天都是开心的,不要因为一些琐事扰乱了心情还,闲暇的时间怎么打发,关注图老师可以让你学习更多的好东西,下面为大家推荐用VB实现应用程序在局域网络上自动更新,赶紧看过来吧!

【 tulaoshi.com - 编程语言 】

我们在用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://www.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://www.tulaoshi.com/bianchengyuyan/)

来源:http://www.tulaoshi.com/n/20160219/1616938.html

延伸阅读
标签: Java JAVA基础
  在这篇文章中,我将为大家介绍一种基于JSP且灵活有趣的技术,那就是JSTL.JSTL全称为Java Server Pages Standard Tag Library.虽然JSP已经变的非常流行,但JSTL在基于SQL数据库的简单、快速的前后台开发中还是没有被广泛的应用。一旦你了解了JSTL,你就会了解到它的优点,并发现在你作为程序员的日常工作中,它已经被应用到了很多方面...
标签: windows系统
如何关闭Windows 8.1应用自动更新   Windows 8.1系统支持应用自动更新,不过有些朋友也许并不需要每个应用都被Windows 8.1自作主张的自动更新。其实我们可以轻松将Windows 8.1系统中的自动应用更新状态设置为关闭,回到应用手动更新状态,这样可以更加自主灵活地控制自己的Win8.1应用。 首先点击Win8.1开始屏幕中的应用商店磁...
标签: windows系统
Windows 8.1应用自动更新怎么关闭 首先点击Win8.1开始屏幕中的应用商店磁贴,打开应用商店,鼠标移动到屏幕右上角或者右下角或者触控屏上用手指右边框向左划动,调出Charm超级菜单栏,从中选择设置应用更新。 图示:在应用商店的选择设置应用更新 进入Win8.1系统的应用更新设置界面之后,将自动更新我的应用选项更改为否即可...
---- 一、提出问题 ---- 自从1996年微软推出Intellimouse鼠标后,带滚轮的鼠标开始大行其道,支持鼠标滚轮的应用软件也越来越多。但我感到奇怪,为什么VB到6.0本身仍然不支持鼠标滚轮,VF可是从5.0就提供MouseWheel事件了。 ---- 如何让VB应用程序支持鼠标滚轮?MSDN上有一篇解决VB下应用Intellimouse鼠标的文章,它解决这一问题的方法是通过...
摘要 本文讨论了VisualBasic应用程序访问SQLServer数据的几中常用的方法,分别说明了每种方法的内部机理并给出了每种方法的一个简单的实例,最后比较了每种方法的性能和优缺点。 引言 MicrosoftVisualBasic(简称VB)作为一种面向对象的可视化编程工具,具有简单易学的,灵活方便和易于扩充的特点。而且Microsoft为...

经验教程

653

收藏

90
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部