VB.NET实现程序在线更新的实例

因为项目需要做了一个在线升级程序,非常爽,所以弄出来和大家分享一下。
可能到时候项目做大了,我会做断点续传与多任务多线程进去,当然有兴趣的朋友可以共同探讨一下
主要用到类库中的webrequest,webresponse和webclient类
另外使用到了devexpress进度条控件

整个程序分为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 P
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值