首 页 网络编程
网页制作 图形图象 操作系统 冲浪宝典
软件教学 认证考试

网络安全 网络办公 行业资讯 评测对比
您当前位置:站长天空 -> 软件教学-> 系统工具
用VB.NET做winform的在线更新程序-.NET教程,VB.Net语言
作者:网友供稿 点击:158
推荐
西部数码-全国虚拟主机10强!20余项虚拟主机管理功能,全国领先!第6代双线路虚拟主机,南北访问畅通无阻!可在线rar解压,自动数据恢复设置虚拟目录等.免费赠送访问统计,企业邮局.Cn域名注册10元/年,自助建站480元起,免费试用7天,满意再付款!P4主机租用799元/月.月付免压金
站内搜索
文章页数:[1] 
因为项目需要做了一个在线升级程序,非常爽,所以弄出来和大家分享一下。
可能到时候项目做大了,我会做断点续传与多任务多线程进去,当然有兴趣的朋友可以共同探讨一下
主要用到类库中的webrequest,webresponse和webclient类
另外使用到了devexpress进度条控件

有兴趣的朋友可加我qq270499458 雨浪
俺大学学的政治法律,转行到计算机有一年多了,很多地方还不足,希望高手赐教
大家一起研究.net

整个程序分为3个部分
1.客户机上的配置文件
2.服务器上的配置文件与需要更新的文件
3.客户机上的升级程序


首先介绍一下客户机上的配置文件,相关部分我会详细说明
文件名称 update.ini
文件内容
[serverpath]
address=http://www.mycom.com/update/
主要就是说明一下要获取升级文件的地址
请一定要在最后加上"/",因为我懒,在程序中没有判断是否有"/"

服务器上的配置文件
文件名称 update.xml
文件内容
<?xml version="1.0" encoding="gb2312"?>
<update>
<file>
<filename>要升级的文件名称</filename>
<version>文件的版本</version>
<lastmodifydate>文件最后修改的日期</lastmodifydate>
<filelength>文件的大小(单位为字节)</filelength>
<target>文件对于客户机运行目录下的相对地址</target>
<downurl>升级文件存放的url地址</downurl>
</file>
</update>
这里我举例说明一下用法,假如我有两个文件要升级
<?xml version="1.0" encoding="gb2312"?>
<update>
<file>
<filename>我的管理系统.exe</filename>
<version>1.0.2207.21855</version>
<lastmodifydate>2006-1-16</lastmodifydate>
<filelength>7401472</filelength>
<target>\我的管理系统.exe</target>
<downurl>http://www.mycom.com/update/main.exe</downurl>
</file>
<file>
<filename>email.dll</filename>
<version>1.0.2207.21855</version>
<lastmodifydate>2006-1-16</lastmodifydate>
<filelength>90112</filelength>
<target>\email.dll</target>
<downurl>http://www.mycom.com/update/email.dll</downurl>
</file>
</update>
我做的这个升级程序的运行机制是这样的:
在load事件里面创建一个临时文件夹,放下载的文件的
(1)首先下载update.xml
(2)将xml内容读到dataset中去
(3)判断客户机上是否有这些文件,如果没有,就是要更新的
(4)如果客户机上有这些文件,如果版本的那一列也就是version不为空的话,将与客户机进行版本比对
(5)如果版本那一列为空,将进行最后修改日期比对,因为有些更新的不是有版本的文件,比如文本文件,就需要进行最后修改日期比对
(6)如果版本或者修改日期都一样,就不需要更新,从dataset中删除那些不需要更新的文件行
(7)下载文件
(8)杀掉运行的主程序进程
(9)将要更新的文件复制到目标处
(10)删除临时文件夹的所有内容
(11)运行主程序
webasp这个发表文档不能发图片,好郁闷呀~~~~~

再说说重点,客户机上的升级程序,我把所有程序都贴在里面了。大家研究研究,如果照搬是不能运行的,稍微修改就可以了,因为我引用了我自己做的几个类,没有也不需要贴出来,还有用到了devexpress控件,不过要点都注释了。
具体代码如下:
imports system
imports system.net
imports system.text
imports system.threading
imports commanfunc
imports scripting
imports system.io
imports api


friend class update
inherits system.windows.forms.form

private mywebclient as new webclient
private bytenum as long
private threaddown, threadchk as thread
private mybyte() as byte
private zipsize as long
private func as new func
private fso as new filesystemobject
private fl as scripting.file
private ready as string = application.startuppath & "\images\ready.ico"
private down as string = application.startuppath & "\images\down.ico"
private inipath as string = application.startuppath & "\update.ini"
private tempfolder as string = application.startuppath & "\temp_download" 临时下载文件夹
private address as string 下载网站

private updatedataset as new dataset 升级配置文件数据集
private curversion as string
private alldownloadbyte as long = 0
private runthread as thread 执行时候运行的线程

private myapi as new api.myapi


#region " windows 窗体设计器生成的代码 "

public sub new()
mybase.new()

该调用是 windows 窗体设计器所必需的。
initializecomponent()

在 initializecomponent() 调用之后添加任何初始化

end sub

窗体重写 dispose 以清理组件列表。
protected overloads overrides sub dispose(byval disposing as boolean)
if disposing then
if not (components is nothing) then
components.dispose()
end if
end if
mybase.dispose(disposing)
end sub

windows 窗体设计器所必需的
private components as system.componentmodel.icontainer

注意: 以下过程是 windows 窗体设计器所必需的
可以使用 windows 窗体设计器修改此过程。
不要使用代码编辑器修改它。
friend withevents picturebox1 as system.windows.forms.picturebox
friend withevents label1 as system.windows.forms.label
friend withevents label2 as system.windows.forms.label
friend withevents groupbox1 as system.windows.forms.groupbox
friend withevents picturebox2 as system.windows.forms.picturebox
friend withevents picturebox3 as system.windows.forms.picturebox
friend withevents label5 as system.windows.forms.label
friend withevents label6 as system.windows.forms.label
friend withevents lbl as system.windows.forms.label
friend withevents btnupdate as system.windows.forms.button
friend withevents btnclose as system.windows.forms.button
friend withevents label8 as system.windows.forms.label
friend withevents label9 as system.windows.forms.label
friend withevents label10 as system.windows.forms.label
friend withevents picturebox4 as system.windows.forms.picturebox
friend withevents picturebox9 as system.windows.forms.picturebox
friend withevents progressdownload as devexpress.xtraeditors.progressbarcontrol
friend withevents label4 as system.windows.forms.label
friend withevents progresscdownload as devexpress.xtraeditors.progressbarcontrol
friend withevents label7 as system.windows.forms.label
friend withevents picturebox5 as system.windows.forms.picturebox
friend withevents picturebox6 as system.windows.forms.picturebox
friend withevents picturebox7 as system.windows.forms.picturebox
friend withevents picturebox8 as system.windows.forms.picturebox
friend withevents imagelist1 as system.windows.forms.imagelist
friend withevents label3 as system.windows.forms.label
<system.diagnostics.debuggerstepthrough()> private sub initializecomponent()
me.components = new system.componentmodel.container
dim resources as system.resources.resourcemanager = new system.resources.resourcemanager(gettype(update))
me.picturebox1 = new system.windows.forms.picturebox
me.label1 = new system.windows.forms.label
me.imagelist1 = new system.windows.forms.imagelist(me.components)
me.label2 = new system.windows.forms.label
me.groupbox1 = new system.windows.forms.groupbox
me.progresscdownload = new devexpress.xtraeditors.progressbarcontrol
me.label4 = new system.windows.forms.label
me.progressdownload = new devexpress.xtraeditors.progressbarcontrol
me.label5 = new system.windows.forms.label
me.picturebox2 = new system.windows.forms.picturebox
me.picturebox3 = new system.windows.forms.picturebox
me.picturebox4 = new system.windows.forms.picturebox
me.label6 = new system.windows.forms.label
me.btnupdate = new system.windows.forms.button
me.lbl = new system.windows.forms.label
me.btnclose = new system.windows.forms.button
me.picturebox5 = new system.windows.forms.picturebox
me.label8 = new system.windows.forms.label
me.picturebox6 = new system.windows.forms.picturebox
me.label9 = new system.windows.forms.label
me.picturebox7 = new system.windows.forms.picturebox
me.label10 = new system.windows.forms.label
me.picturebox9 = new system.windows.forms.picturebox
me.picturebox8 = new system.windows.forms.picturebox
me.label7 = new system.windows.forms.label
me.label3 = new system.windows.forms.label
me.groupbox1.suspendlayout()
ctype(me.progresscdownload.properties, system.componentmodel.isupportinitialize).begininit()
ctype(me.progressdownload.properties, system.componentmodel.isupportinitialize).begininit()
me.suspendlayout()

picturebox1

me.picturebox1.location = new system.drawing.point(16, 72)
me.picturebox1.name = "picturebox1"
me.picturebox1.size = new system.drawing.size(24, 24)
me.picturebox1.sizemode = system.windows.forms.pictureboxsizemode.stretchimage
me.picturebox1.tabindex = 0
me.picturebox1.tabstop = false

label1

me.label1.imagelist = me.imagelist1
me.label1.location = new system.drawing.point(64, 80)
me.label1.name = "label1"
me.label1.size = new system.drawing.size(128, 16)
me.label1.tabindex = 1
me.label1.text = "正在连接到服务器..."

imagelist1

me.imagelist1.imagesize = new system.drawing.size(16, 16)
me.imagelist1.imagestream = ctype(resources.getobject("imagelist1.imagestream"), system.windows.forms.imageliststreamer)
me.imagelist1.transparentcolor = system.drawing.color.transparent

label2

me.label2.location = new system.drawing.point(64, 112)
me.label2.name = "label2"
me.label2.size = new system.drawing.size(128, 16)
me.label2.tabindex = 3
me.label2.text = "正在检查可更新版本..."

groupbox1

me.groupbox1.controls.add(me.progresscdownload)
me.groupbox1.controls.add(me.label4)
me.groupbox1.controls.add(me.progressdownload)
me.groupbox1.controls.add(me.label5)
me.groupbox1.location = new system.drawing.point(8, 216)
me.groupbox1.name = "groupbox1"
me.groupbox1.size = new system.drawing.size(456, 104)
me.groupbox1.tabindex = 14
me.groupbox1.tabstop = false
me.groupbox1.text = "下载进度"

progresscdownload

me.progresscdownload.accessiblename = "custom"
me.progresscdownload.location = new system.drawing.point(80, 32)
me.progresscdownload.name = "progresscdownload"

progresscdownload.properties

me.progresscdownload.properties.borderstyle = devexpress.xtraeditors.controls.borderstyles.hotflat
me.progresscdownload.properties.endcolor = system.drawing.color.cornsilk
me.progresscdownload.properties.lookandfeel.usedefaultlookandfeel = false
me.progresscdownload.properties.lookandfeel.usewindowsxptheme = false
me.progresscdownload.properties.progressviewstyle = devexpress.xtraeditors.controls.progressviewstyle.solid
me.progresscdownload.properties.showtitle = true
me.progresscdownload.properties.startcolor = system.drawing.color.burlywood
me.progresscdownload.size = new system.drawing.size(352, 21)
me.progresscdownload.tabindex = 6
me.progresscdownload.tabstop = false

label4

me.label4.location = new system.drawing.point(16, 37)
me.label4.name = "label4"
me.label4.size = new system.drawing.size(64, 16)
me.label4.tabindex = 5
me.label4.text = "当前进度"

progressdownload

me.progressdownload.accessiblename = "custom"
me.progressdownload.location = new system.drawing.point(80, 64)
me.progressdownload.name = "progressdownload"

progressdownload.properties

me.progressdownload.properties.borderstyle = devexpress.xtraeditors.controls.borderstyles.hotflat
me.progressdownload.properties.endcolor = system.drawing.color.cornsilk
me.progressdownload.properties.lookandfeel.usedefaultlookandfeel = false
me.progressdownload.properties.lookandfeel.usewindowsxptheme = false
me.progressdownload.properties.progressviewstyle = devexpress.xtraeditors.controls.progressviewstyle.solid
me.progressdownload.properties.showtitle = true
me.progressdownload.properties.startcolor = system.drawing.color.burlywood
me.progressdownload.size = new system.drawing.size(352, 21)
me.progressdownload.tabindex = 4
me.progressdownload.tabstop = false

label5

me.label5.location = new system.drawing.point(16, 69)
me.label5.name = "label5"
me.label5.size = new system.drawing.size(64, 16)
me.label5.tabindex = 1
me.label5.text = "总体进度"

picturebox2

me.picturebox2.location = new system.drawing.point(16, 104)
me.picturebox2.name = "picturebox2"
me.picturebox2.size = new system.drawing.size(24, 24)
me.picturebox2.sizemode = system.windows.forms.pictureboxsizemode.stretchimage
me.picturebox2.tabindex = 15
me.picturebox2.tabstop = false

picturebox3

me.picturebox3.location = new system.drawing.point(16, 136)
me.picturebox3.name = "picturebox3"
me.picturebox3.size = new system.drawing.size(24, 24)
me.picturebox3.sizemode = system.windows.forms.pictureboxsizemode.stretchimage
me.picturebox3.tabindex = 16
me.picturebox3.tabstop = false

picturebox4

me.picturebox4.location = new system.drawing.point(16, 168)
me.picturebox4.name = "picturebox4"
me.picturebox4.size = new system.drawing.size(24, 24)
me.picturebox4.sizemode = system.windows.forms.pictureboxsizemode.stretchimage
me.picturebox4.tabindex = 18
me.picturebox4.tabstop = false

label6

me.label6.location = new system.drawing.point(64, 176)
me.label6.name = "label6"
me.label6.size = new system.drawing.size(128, 16)
me.label6.tabindex = 17
me.label6.text = "正在下载更新版本..."

btnupdate

me.btnupdate.location = new system.drawing.point(280, 336)
me.btnupdate.name = "btnupdate"
me.btnupdate.size = new system.drawing.size(96, 24)
me.btnupdate.tabindex = 19
me.btnupdate.text = "开始升级"

lbl

me.lbl.forecolor = system.drawing.color.red
me.lbl.location = new system.drawing.point(16, 344)
me.lbl.name = "lbl"
me.lbl.size = new system.drawing.size(248, 16)
me.lbl.tabindex = 20

btnclose

me.btnclose.location = new system.drawing.point(384, 336)
me.btnclose.name = "btnclose"
me.btnclose.size = new system.drawing.size(80, 24)
me.btnclose.tabindex = 21
me.btnclose.text = "关闭"

picturebox5

me.picturebox5.location = new system.drawing.point(224, 72)
me.picturebox5.name = "picturebox5"
me.picturebox5.size = new system.drawing.size(24, 24)
me.picturebox5.sizemode = system.windows.forms.pictureboxsizemode.stretchimage
me.picturebox5.tabindex = 25
me.picturebox5.tabstop = false

label8

me.label8.location = new system.drawing.point(272, 80)
me.label8.name = "label8"
me.label8.size = new system.drawing.size(136, 16)
me.label8.tabindex = 24
me.label8.text = "正在关闭应用程序..."

picturebox6

me.picturebox6.location = new system.drawing.point(224, 104)
me.picturebox6.name = "picturebox6"
me.picturebox6.size = new system.drawing.size(24, 24)
me.picturebox6.sizemode = system.windows.forms.pictureboxsizemode.stretchimage
me.picturebox6.tabindex = 27
me.picturebox6.tabstop = false

label9

me.label9.location = new system.drawing.point(272, 112)
me.label9.name = "label9"
me.label9.size = new system.drawing.size(136, 16)
me.label9.tabindex = 26
me.label9.text = "正在执行更新过程..."

picturebox7

me.picturebox7.location = new system.drawing.point(224, 136)
me.picturebox7.name = "picturebox7"
me.picturebox7.size = new system.drawing.size(24, 24)
me.picturebox7.sizemode = system.windows.forms.pictureboxsizemode.stretchimage
me.picturebox7.tabindex = 29
me.picturebox7.tabstop = false

label10

me.label10.location = new system.drawing.point(272, 144)
me.label10.name = "label10"
me.label10.size = new system.drawing.size(136, 16)
me.label10.tabindex = 28
me.label10.text = "更新完成,删除临时文件"

picturebox9

me.picturebox9.backcolor = system.drawing.systemcolors.highlighttext
me.picturebox9.dock = system.windows.forms.dockstyle.top
me.picturebox9.image = ctype(resources.getobject("picturebox9.image"), system.drawing.image)
me.picturebox9.location = new system.drawing.point(0, 0)
me.picturebox9.name = "picturebox9"
me.picturebox9.size = new system.drawing.size(474, 58)
me.picturebox9.tabindex = 30
me.picturebox9.tabstop = false

picturebox8

me.picturebox8.location = new system.drawing.point(224, 168)
me.picturebox8.name = "picturebox8"
me.picturebox8.size = new system.drawing.size(24, 24)
me.picturebox8.sizemode = system.windows.forms.pictureboxsizemode.stretchimage
me.picturebox8.tabindex = 32
me.picturebox8.tabstop = false

label7

me.label7.location = new system.drawing.point(272, 176)
me.label7.name = "label7"
me.label7.size = new system.drawing.size(136, 16)
me.label7.tabindex = 31
me.label7.text = "更新成功,开启应用程序"

label3

me.label3.location = new system.drawing.point(64, 144)
me.label3.name = "label3"
me.label3.size = new system.drawing.size(128, 16)
me.label3.tabindex = 5
me.label3.text = "正在收集本机信息..."

update

me.autoscalebasesize = new system.drawing.size(6, 14)
me.clientsize = new system.drawing.size(474, 375)
me.controls.add(me.picturebox8)
me.controls.add(me.label7)
me.controls.add(me.picturebox9)
me.controls.add(me.picturebox7)
me.controls.add(me.label10)
me.controls.add(me.picturebox6)
me.controls.add(me.label9)
me.controls.add(me.picturebox5)
me.controls.add(me.label8)
me.controls.add(me.btnclose)
me.controls.add(me.lbl)
me.controls.add(me.btnupdate)
me.controls.add(me.picturebox4)
me.controls.add(me.label6)
me.controls.add(me.picturebox3)
me.controls.add(me.picturebox2)
me.controls.add(me.groupbox1)
me.controls.add(me.label3)
me.controls.add(me.label2)
me.controls.add(me.label1)
me.controls.add(me.picturebox1)
me.formborderstyle = system.windows.forms.formborderstyle.fixeddialog
me.icon = ctype(resources.getobject("$this.icon"), system.drawing.icon)
me.maximizebox = false
me.minimizebox = false
me.name = "update"
me.showintaskbar = false
me.text = "在线升级"
me.topmost = true
me.groupbox1.resumelayout(false)
ctype(me.progresscdownload.properties, system.componentmodel.isupportinitialize).endinit()
ctype(me.progressdownload.properties, system.componentmodel.isupportinitialize).endinit()
me.resumelayout(false)

end sub

#end region

载入
private sub update_load(byval sender as system.object, byval e as system.eventargs) handles mybase.load
myapi.disablex(me) 让关闭x不可用
reset()
getaddress()
end sub

还原状态
private sub reset()
picturebox1.image = image.fromfile(ready)
picturebox2.image = image.fromfile(ready)
picturebox3.image = image.fromfile(ready)
picturebox4.image = image.fromfile(ready)
picturebox5.image = image.fromfile(ready)
picturebox6.image = image.fromfile(ready)
picturebox7.image = image.fromfile(ready)
picturebox8.image = image.fromfile(ready)
lbl.text = ""
btnupdate.enabled = true
btnclose.enabled = true
end sub

让btn可用
private sub resetbtn()
btnupdate.enabled = true
btnclose.enabled = true
end sub

检测文件夹是否存在,不存在则建立
private sub chkexsitfolder(byval foldername as string)
if fso.folderexists(foldername) = false then
fso.createfolder(foldername)
end if
end sub

检测文件是否存在,返回boolean值
private function chkexsitfile(byval filename as string) as boolean
return fso.fileexists(filename)
end function

获取文件版本信息 获取成功返回版本值,不成功返回nothing
private function getcurversion(byval filepath as string) as string
try
curversion = fileversioninfo.getversioninfo(filepath).fileversion.tostring
return curversion
catch ex as exception
return nothing
end try
end function

获取配置文件中的地址 地址最后必须加上"/"
private sub getaddress()
try
address = func.getkeyval(inipath, "serverpath", "address")
catch ex as exception
lbl.text = "连接服务器失败..."
resetbtn()
exit sub
end try
end sub

测试连接到服务器 并下载升级文件
private sub connectsvr()
picturebox1.image = image.fromfile(down)
try
if fso.folderexists(tempfolder) = false then 如果不存在临时文件夹子,则先建立
fso.createfolder(tempfolder)
end if
mywebclient.downloadfile(address & "update.xml", tempfolder & "\update.xml")
catch ex as exception
lbl.text = "连接服务器失败..."
resetbtn()
exit sub
end try
end sub

检查更新版本 读取数据集 如果数据集为空则失败
private sub getnewversion()
picturebox2.image = image.fromfile(down)
try
updatedataset.readxml(tempfolder & "\update.xml")
if updatedataset.tables(0).rows.count <= 0 or (updatedataset is nothing) then
lbl.text = "检查可更新版本失败..."
reset()
end if
catch ex as exception
lbl.text = "检查可更新版本失败..."
resetbtn()
exit sub
end try
end sub


分析更新版本 并获取所有要下载的字节数
private sub chkupdate()
picturebox3.image = image.fromfile(down)
alldownloadbyte = 0
chkupdatemethod()
if updatedataset.tables("file").rows.count = 0 then
lbl.text = "您目前的版本已经是最新版..."
resetbtn()
exit sub
end if
end sub

分析更新版本具体方法,采用了递归
private sub chkupdatemethod()
dim i as integer
try
for i = 0 to updatedataset.tables(0).rows.count - 1
分析存在性,如果不存在则是需要升级的,如果存在分析版本 如果版本为空则分析最后修改时间
if chkexsitfile(application.startuppath & updatedataset.tables("file").rows(i)("target")) = true then
如果版本号相等则删除此行
if func.cdbnull(updatedataset.tables("file").rows(i)("version")) <> "" then
if getcurversion(application.startuppath & updatedataset.tables("file").rows(i)("target")) = updatedataset.tables("file").rows(i)("version") then
updatedataset.tables("file").rows.item(i).delete()
chkupdatemethod()
exit sub
else
alldownloadbyte += updatedataset.tables("file").rows(i)("filelength")
end if
else
如果修改时间大于或者相等则删除此行
fl = fso.getfile(application.startuppath & updatedataset.tables("file").rows(i)("target"))
if fl.datelastmodified >= ctype(updatedataset.tables("file").rows(i)("lastmodifydate"), date) then
updatedataset.tables("file").rows.item(i).delete()
chkupdatemethod()
exit sub
else
alldownloadbyte += updatedataset.tables("file").rows(i)("filelength")
end if
end if
else
alldownloadbyte += updatedataset.tables("file").rows(i)("filelength")
end if
next
catch ex as exception
lbl.text = "升级失败,无法分析更新版本..."
resetbtn()
exit sub
end try
end sub

private sub downfiles()
connectsvr()
if btnupdate.enabled = true then
exit sub
end if
getnewversion()
if btnupdate.enabled = true then
exit sub
end if
chkupdate()
if btnupdate.enabled = true then
exit sub
end if
dim i as integer
dim srm as stream
dim mbyte() as byte
dim allbyte as long
dim startbyte as integer
dim m as integer
dim fs as filestream
dim myre as httpwebrequest
dim mwrite as httpwebresponse
dim wc as webclient = new webclient
picturebox4.image = image.fromfile(down)
progressdownload.position = 0
progressdownload.properties.maximum = alldownloadbyte
try
for i = 0 to updatedataset.tables("file").rows.count - 1
groupbox1.text = "下载进度(" & (i + 1).tostring & "/" & updatedataset.tables("file").rows.count & ")"
progresscdownload.position = 0 设置当前进度为0
startbyte = 0 开始下载的位置为0
redim mbyte(clng(updatedataset.tables("file").rows(i)("filelength"))) 本也可以直接获取文件大小,但是很占用资源,干脆写在配置文件内
myre = ctype(webrequest.create(updatedataset.tables("file").rows(i)("downurl")), httpwebrequest)
mwrite = ctype(myre.getresponse(), httpwebresponse)
srm = wc.openread(updatedataset.tables("file").rows(i)("downurl"))
allbyte = mbyte.length
progresscdownload.properties.maximum = allbyte
progresscdownload.position = 0
do while updatedataset.tables("file").rows(i)("filelength") > 0
m = srm.read(mbyte, startbyte, allbyte)
if m = 0 then exit do
startbyte += m
allbyte -= m
progresscdownload.position += m
progressdownload.position += m
loop

fs = new filestream(tempfolder & "\" & updatedataset.tables("file").rows(i)("filename"), filemode.openorcreate)
fs.write(mbyte, 0, mbyte.length)
fs.flush()
fs.close()
myre.abort() 这里必须释放资源,否则下载多个文件出现连接超时错误
srm.close()
runthread.sleep(2000) 这里每下一个文件让线程等待2秒,太快可能服务器没有响应
next
progressdownload.position = alldownloadbyte 防止人为写错字节数不到100的现象
catch ex as exception
lbl.text = "下载更新文件失败..."
srm.close()
myre.abort()
resetbtn()
exit sub
end try
closeexe()
updatefile()
deltmpfiles()
if btnupdate.enabled = true then
exit sub
end if
startexe()
end sub


关闭应用程序
private sub closeexe()
picturebox5.image = image.fromfile(down)
func.killprogress("我的管理系统") 这里是我引用的一个类,用来杀进程的
end sub

更新要升级的文件
private sub updatefile()
picturebox6.image = image.fromfile(down)
try
dim i as integer
dim flcopy as io.file
for i = 0 to updatedataset.tables("file").rows.count - 1
flcopy.copy(tempfolder & "\" & updatedataset.tables("file").rows(i)("filename"), application.startuppath & updatedataset.tables("file").rows(i)("target"), true)
next
catch ex as exception
lbl.text = "升级到新版本失败,可能应用程序未关闭..."
resetbtn()
exit sub
end try
end sub

删除文件
private sub deltmpfiles()
picturebox7.image = image.fromfile(down)
try
fso.deletefolder(tempfolder, true)
catch ex as exception
exit sub
end try
end sub

启动应用程序
private sub startexe()
picturebox8.image = image.fromfile(down)
try
system.diagnostics.process.start(application.startuppath & "\我的管理系统.exe")
catch ex as exception
lbl.text = "更新成功,但未能启动应用程序,请手动启动..."
finally
btnclose.enabled = true
end try
end sub


升级
private sub btnupdate_click(byval sender as system.object, byval e as system.eventargs) handles btnupdate.click
reset()
btnupdate.enabled = false
btnclose.enabled = false
groupbox1.text = "下载进度"
lbl.text = ""
updatedataset.clear()
runthread = new thread(addressof downfiles) 不知道为什么,用了join后将会出现卡屏,用线程池\完成事件\轮循都不行,我只有把其他事件放在这个线程里了。郁闷
runthread.start()
runthread.join()
end sub

private sub btnclose_click(byval sender as system.object, byval e as system.eventargs) handles btnclose.click
me.close()
end sub
end class


这个升级程序运行的比较稳定,但是还有很多不足,特别对于线程的控制,很难把握。希望高手不另赐教~~~
文章整理:站长天空 网址:http://www.z6688.com/
以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

文章页数:[1] 


放大字体显示 缩小字体显示 打印文章 推荐给朋友
热门文章
·Java API的Date, Calendar日期处理相关类分析-JSP教程,Java技巧及代码
·log4j学习(上)-JSP教程,Java技巧及代码
·Asp.net2.0:如何使用ObjectDataSource(配合ORM)-.NET教程,Asp.Net开发
·怎么样配置JSP运行环境-JSP教程,Jsp/Servlet
·检测客户端显示器分辨率、浏览器类型和客户端IP-.NET教程,远程及网络应用
·WinCE 5.0边做边学(4)-.NET教程,评论及其它
·JavaScript正则表达式-JSP教程,Java技巧及代码
·J2EE平台介绍-JSP教程,J2EE/EJB/服务器
·一款类似ghost的系统备份恢复软件image it
·CSS滤镜:颜色渐变-ASP教程,ASP应用
最新文章
·photoshop照片处理:搞笑q版大头人像_photoshop教程
·photoshop改废片为非主流式签名图_photoshop教程
·如何做一个赚钱的英文站点?_网赚技巧
·adsense中文本地化以及纳税问题_网赚技巧
·seomoz创始人randfish访谈_站长访谈
·经验总结:网站最令人讨厌的几个用户体验_站长心得
·让抄袭有点技术含量 一个坚持做站4年的站长有感_站长心得
·widnows vista下修改最近打开文件的显示数目_windows vista
·从techweb的失败谈资讯类网站的存在价值_站长心得
·google中文搜索使用说明_google推广
相关主题
  • 用vb.net 2005编写定时关机程序_vb/vb.net教程
  • 用VB.Net编织未来-.NET教程,VB.Net语言
  • 用VB.Net导出数据到数据透视表-.NET教程,VB.Net语言
  • 用VB.NET轻松制作特效窗体-.NET教程,VB.Net语言
  • 用VB.NET做个论坛发帖软件-.NET教程,VB.Net语言
  • 西部数码虚拟主机

    友情链接
    CNNIC 西部数码
    万网 自助建站
    虚拟主机 asp空间
    域名注册 域名
    域名申请 主页空间
    论坛空间 网站空间
    国际域名 虚拟空间
    空间租用 DDOS防火墙
    成都主机托管 四川主机托管
    主机租用 服务器租用
    网站目录 自助建站
    虚拟主机 网址大全
    软件下载
    自助链接
    虚拟主机资讯 特价虚拟主机
    版权申明:本站文章均来自网络,如有侵权,请联系我们,我们收到后立即删除,谢谢!
    关于我们:站长天空:专业提供最新的站长资讯、在线教程、虚拟主机权威评测、虚拟主机性能对比、网站制作教程,开发教程,站长工具。包括网页制作教程、冲浪宝典、编程参考、操作系统、软件教学、行业动态等。
    特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有。
    发表评论 打印  刷新     关闭