看网上各种自动更新方法,最后自己找了个比较简单的,在此做个笔记。

服务器上的共享盘里存放生成的可执行文件和XML格式的配置:

<?xml version="1.0" encoding="utf-8"?>

<AutoUpdate>
<version>PackingBarcodeValidation2.0</version>
<downloadURL>//ip/PackingBarcodeValidation2.0.exe</downloadURL>
</AutoUpdate>

直接上代码:

'update revision
Dim updateXMLURL As String = "//ip/revision.xml"
Dim version As String = Nothing
Dim downloadURL As String = Nothing

If System.IO.File.Exists(updateXMLURL) Then

Dim xmldoc As New XmlDocument()
xmldoc.Load(updateXMLURL)

'获取节点列表
Dim topM As XmlNodeList = xmldoc.SelectNodes("//AutoUpdate")
For Each element As XmlElement In topM
version = element.GetElementsByTagName("version")(0).InnerText
downloadURL = element.GetElementsByTagName("downloadURL")(0).InnerText
Next
If version <> Me.Text And System.IO.File.Exists(downloadURL) Then

Me.DownloadFile(downloadURL, "./" & version & ".exe", Me.ProgressBar1)

MsgBox("系统升级成功,请使用新的系统" & version & ".exe")
Me.Close()

End If

End If

下载方法代码:

''' <summary>
''' c#,.net 下载文件
''' </summary>
''' <param name="URL">下载文件地址</param>
'''
''' <param name="Filename">下载后的存放地址</param>
''' <param name="Prog">用于显示的进度条</param>
'''
Public Sub DownloadFile(ByVal URL As String, ByVal filename As String, ByVal prog As System.Windows.Forms.ProgressBar)
Dim percent As Single = 0
Try
URL = "http:" & URL
Dim Myrq As System.Net.HttpWebRequest = DirectCast(System.Net.HttpWebRequest.Create(URL), System.Net.HttpWebRequest)
Dim myrp As System.Net.HttpWebResponse = DirectCast(Myrq.GetResponse(), System.Net.HttpWebResponse)
Dim totalBytes As Long = myrp.ContentLength
If prog IsNot Nothing Then
prog.Maximum = CInt(totalBytes)
End If
Dim st As System.IO.Stream = myrp.GetResponseStream()
Dim so As System.IO.Stream = New System.IO.FileStream(filename, System.IO.FileMode.Create)
Dim totalDownloadedByte As Long = 0
Dim by As Byte() = New Byte(1023) {}
Dim osize As Integer = st.Read(by, 0, CInt(by.Length))
While osize > 0
totalDownloadedByte = osize + totalDownloadedByte
System.Windows.Forms.Application.DoEvents()
so.Write(by, 0, osize)
If prog IsNot Nothing Then
prog.Value = CInt(totalDownloadedByte)
End If
osize = st.Read(by, 0, CInt(by.Length))

percent = CSng(totalDownloadedByte) / CSng(totalBytes) * 100
'label1.Text = "当前补丁下载进度" & percent.ToString() & "%"
'必须加注这句代码,否则label1将因为循环执行太快而来不及显示信息
System.Windows.Forms.Application.DoEvents()
End While
so.Close()
st.Close()
Catch generatedExceptionName As System.Exception
Throw
End Try
End Sub

在界面上添加了一个进度条。

VB winform自动更新 笔记的更多相关文章

  1. winform自动更新程序实现

    一.问题背景 本地程序在实际项目使用过程中,因为可以操作电脑本地的一些信息,并且对于串口.OPC.并口等数据可以方便的进行收发,虽然现在软件行业看着动不动都是互联网啊啥的,大有Web服务就是高大上的感 ...

  2. Winform自动更新组件分享

    作者:圣殿骑士 出处:http://www.cnblogs.com/KnightsWarrior/ 关于作者:专注于微软平台项目架构.管理和企业解决方案.自认在面向对象及面向服务领域有一定的造诣,熟悉 ...

  3. winform自动更新之AutoUpdater.NET

    版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/zhaobw831/article/details/82226291使用AutoUpdater.NET ...

  4. C# winform自动更新 (附 demo下载)

    随着需求的变化,如果Server每次更新出新的内容,Client都要重新安装的话. 太过于复杂化.  所以自动更新是很有必要的. 一..NET自带的更新方式    以服务器端为主  (自动更新,微软爸 ...

  5. winform自动更新并实现文件的批量异步下载

    public partial class update : Form    {        private WebClient client;        int downfilenum = 0; ...

  6. vb脚本自动更新版本信息

    使用的串口显示软件为secureCrt,支持脚本功能,今天写了一个简单的软件升级脚本(VB脚本). 如下: # $language = "VBScript" # $interfac ...

  7. WinForm应用程序中实现自动更新功能

    WinForm应用程序中实现自动更新功能 编写人:左丘文 2015-4-20 近来在给一客户实施ECM系统,但他们使用功能并不是我们ECM制造版提供的标准功能,他们要求对系统作一些定制功能,为了避免因 ...

  8. WinForm通用自动更新AutoUpdater项目实战

    目前我们做的上位机项目还是以Winform为主,在实际应用过程中,可能还会出现一些细节的修改.对于这种情况,如果上位机带有自动更新功能,我们只需要将更新后的应用程序打包放在指定的路径下,可以让用户自己 ...

  9. Winform(C#.NET)自动更新组件的使用及部分功能实现

    声明:核心功能的实现是由园子里圣殿骑士大哥写的,本人是基于他核心代码,按照自己需求进行修改的.   而AutoUpdaterService.xml文件生成工具是基于评论#215楼 ptangbao的代 ...

随机推荐

  1. javascript中false值及其常见比较运算

    1. ture或者false的值 if判断中会被隐式转换成false的boolean类型的值有 false, 0, undefined , null , '', NaN(not a number) 除 ...

  2. interactive_timeout

    [mysqld] interactive_timeout  交互式连接 会话1 [root@localhost ~]# mysql -umysql -p Enter password: Welcome ...

  3. Java基础知识强化之多线程笔记04:并行和并发 区别

    1. 并发 和 并行区别 (1)并发:(单核) 并发,是在同一个cpu上同时(不是真正的同时,而是看来是同时,因为cpu要在多个程序间切换)运行多个程序. 并发是指两个任务都请求运行,而处理器只能按受 ...

  4. check_area

    CCTouch* pTouch = ...; CCSprite* pSprite = ...; CCRect rect = pSprite ->boundingBox(); if ((& ...

  5. 属性文件Plist

    属性文件: Property List File:简称plist 概念iOS开发中常见的一种文件格式.按照固定格式保存数据. 属性文件和XML文件都属性结构化文件.文件的内容按指定的格式保存数据. 作 ...

  6. Sqlserver的触发器的简单使用

    1,触发器有两种 (1)After触发器(之后触发) 触发器有个好处:就是你之前有过什么操作他会将你的操作的数据信息完整的保存下来,比如你删过什么信息,如果用触发器,那么删除后就会显示两行受影响,那么 ...

  7. smarty中的变量使用

    在模板中输出动态数据可以用{},所以容易与css中的标签相互冲突,所以使用{literal}{/literal}标签包起来就不会用模板的解析方式解析,变量的来源有三种,用assign方法赋值,系统保留 ...

  8. 【MINA】序列化和反序列化我们要考虑的问题

    概念 序列化:将java对象转换为字节序列的过程叫做序列化 反序列化:将字节对象转换为java对象的过程叫做反序列化 要解决的问题 1.序列化时间 2.反序列化时间 3.bytes大小 4.操作方便 ...

  9. 【HTML XHTML CSS基础教程(第6版)】笔记之HTML XHTML笔记(1~6章)

      第1章 网页的构造块   1.(X)HTML有三种主要的标记类型:元素,属性,值.   2.浏览器主要通过查看文件的扩展名(.htm或.html)来得知应该按照网页的方式读取文本文件.   3.H ...

  10. ACM——Quicksum

    Quicksum 时间限制(普通/Java):1000MS/3000MS          运行内存限制:65536KByte总提交:615            测试通过:256 描述 A chec ...