电信主站 网通分站
购买流程 付款方式 常见问题 在线提问 续租服务 购物车
用户名: 密 码: 忘记密码?
首 页
域名注册
虚拟主机
双线主机
服务器租用
VPS主机
企业邮局
代理专区
客服中心
虚拟主机行业资讯 虚拟主机评测对比 互联网最新动态 技术学院 站长资讯 在线教程 网站运营
搜索优化 服务器 网络编程 图形图象 站长之家 网页制作 操作系统
冲浪宝典 软件教学 视频通信 办公软件 邮件系统 网络安全 认证考试
您当前位置:西部数码->资讯中心-> 冲浪宝典-> 联络聊天
用vb实现应用程序在局域网络上自动更新_visualbasic教程
作者:网友供稿 点击:0
  西部数码-全国虚拟主机10强!20余项虚拟主机管理功能,全国领先!第6代双线路虚拟主机,南北访问畅通无阻!虚拟主机可在线rar解压,自动数据恢复设置虚拟目录等.虚拟主机免费赠送访问统计,企业邮局.Cn域名注册10元/年,自助建站480元起,免费试用7天,满意再付款!P4主机租用799元/月.月付免压金!
文章页数:[1] 
我们在用VB开发大型应用程序时遇到如下问题,进入调试、维护阶段开发小组进驻用户单位,软件交用户试用会经常修改程序并重新编译。然后再由程序员给用户复制更新,或者通知用户自行复制更新。对于少量用户可以做到及时更新。而我们的一个用户在一座十层的大厦中办公,有十几个部门(即有管理部门又有生产车间分布在不同的楼层),每个部门少则有2~3台工作站,多则有数十台工作站,与四台服务器组成局域网络.且每个部门应用程序各不相同,应用程序修改编译后经常不能同步更新,从而造成部门内数据或者部门间的数据不一致。程序员每天都要跑上跑下检查版本更新程序浪费了很多宝贵时间,即使通知部门主管自行更新,某些工作站也会出现遗漏现象。鉴于以上问题我们考虑使用程序自动更新技术,即自动检查新版本,将新版本复制到本地,重新执行本地应用程序。
基本原理:在某个服务器上共享出一个目录,其权限为程序员完全控制,其它用户只读。
例如:\\NtServer01\Refresh,程序员重新编译后的应用程序.EXE都存放在此目录下。
在应用程序的入口处调用版本检查及更新过程,如果服务器应用程序的修改时间大于本地应用程序的修改时间,则认为有新版本出现,应该将服务器上的新版本复制到本地硬盘。
由于应用程序在运行时不能被新版本覆盖,所以就需要中介程序FastCopy.EXE(也用VB编写)来完成更新版本并重新运行本地应用程序。为了达到及时更新的目的可在应用程序中每隔5分钟或10分钟检查一次是否有新版本。(此部分略有兴趣的读者可自行编程添加)
本例中:
服务器:NtServer01共享目录:Refresh
应用程序:MyApp.exe中介程序FastCopy.exe(都存储于共享目录中)
下载源代码(6K)

具体程序实现如下:
在应用程序工程MyApp中的部分代码如下:
OptionExplicit
编译后的应用程序名称,注意没有后缀.EXE,本例为MYAPP
PrivateConstApp_Name="MyApp"
最新的应用程序存放的路径,本例为:服务器NtServer01共享目录Refresh
PrivateConstExePath="\\NtServer01\Refresh\"
中介程序名称,注意没有后缀.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,",")
Ifp>0Then
取得储服务器上的共享目录
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

定时器代码
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.west263.com
以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!
相关主题
文章页数:[1] 
Google
热门文章
·photoshop绘制五颜六色的圣诞彩灯_photoshop教程
·数码照片的photoshop清晰化处理漫谈_photoshop教程
·internet上的文件操作_autocad教程
·矩形阵列、圆角和倒角命令的使用_autocad教程
·php强制对象类型之instanceof操作符_php技巧
·另类玩法 打造个性化的windows xp声音_windows xp
·无敌进程终结法 鲜为人知的进程秘籍两招_windows xp
·ge在有线电视宽带城域网中的应用_视频通信
·教你用photoshop打造美丽龙纹玉佩_photoshop教程
·vb实现按钮浮动效果_visualbasic教程

最新文章
· 网站赚钱秘密
·导航的没落,Web2.0新时代谁将备受青睐?
·做网站是“体力活”?还是“脑力活”?
·不能病毒营销 有道如何占领搜索市场
·文件存储网站BIBIDU发起德与法签名活动
·雅虎邮箱:整合的野心有多大
·专家:08年将成iPhone攻击年 腾讯QQ仍很危险
·Google网络存储空间将达50G 比希捷更赚钱
·Google提示新浪博客含有恶意软件 原因尚不清楚
·微软的Office红旗还能扛多久?


 
 


版权申明:本站文章均来自网络,如有侵权,请联系我们,我们收到后立即删除,谢谢!

特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有。
  打印  刷新  关闭
返回首页 |关于我们 | 联系我们 | 付款方式 | 创业联盟 | 虚拟主机 | 资讯中心 | 友情链接 | 网站地图

版权所有 西部数码(www.west263.com)
CopyRight (c) 2002~2006 west263.com all right reserved.
公司地址:四川成都市万和路90号天象大厦4楼 邮编:610031
电话总机:028-86262244 86263048 86263408 86263960 86264018 86267838
售前咨询:总机转201 202 203 204 206 208
售后服务:总机转211 212 213 214
财务咨询:总机转224 223 传真:028-86264041 财务QQ:点击发送消息给对方635483282
售前咨询QQ:点击发送消息给对方2182518 点击发送消息给对方241975952 点击发送消息给对方275026793 点击发送消息给对方408235859
售后服务QQ:点击发送消息给对方17708515 点击发送消息给对方307742704 点击发送消息给对方287976517 点击发送消息给对方363783715
《中华人民共和国增值电信业务经营许可证》编号:川B2-20030065号