欢迎光临
我们一直在努力

用VB.NET做winform的在线更新程序-.NET教程,VB.Net语言

建站超值云服务器,限时71元/月

因为项目需要做了一个在线升级程序,非常爽,所以弄出来和大家分享一下。

可能到时候项目做大了,我会做断点续传与多任务多线程进去,当然有兴趣的朋友可以共同探讨一下

主要用到类库中的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

这个升级程序运行的比较稳定,但是还有很多不足,特别对于线程的控制,很难把握。希望高手不另赐教~~~

赞(0)
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com 特别注意:本站所有转载文章言论不代表本站观点! 本站所提供的图片等素材,版权归原作者所有,如需使用,请与原作者联系。未经允许不得转载:IDC资讯中心 » 用VB.NET做winform的在线更新程序-.NET教程,VB.Net语言
分享到: 更多 (0)