具体程序实现如下:
在应用程序工程MyApp中的部分代码如下:
Option Explicit
'编译后的应用程序名称,注意没有后缀 .EXE,本例为MYAPP
Private Const App_Name = "MyApp"
'最新的应用程序存放的路径,本例为:服务器 NtServer01 共享目录 Refresh
Private Const ExePath = "\\NtServer01\Refresh\"
'中介程序名称,注意没有后缀 .EXE,本例为 FastCopy
Private Const MidExeName = "FastCopy" '应用程序入口
Private Sub Form_Load()
If UCase(Trim(App.EXEName)) <> UCase(Trim(App_Name)) Then
MsgBox "必须将订单管理系统的名称更改为: " + App_Name
End
End If
'判断是否有最新版本的应用程序,如有则自动更新
Call ExeRefresh '下面为订单管理系统的正常操作 略 ... ....
End Sub '版本检查及更新过程
Private Sub ExeRefresh()
'定义四个临时字符串变量
Dim s1 As String
Dim s2 As String
Dim s3 As String
Dim s4 As String
On Error Resume Next
'将本地应用程序MyApp.EXE的全路径名存入 s1
'将本地中介程序FastCopy.exe的全路径名存入 s3
s1 = "TNT"
If Len(App.Path) > 3 Then
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"
End If s4 = "TNT"
'将本地应用程序MyApp.EXE文件的修改时间存入 s4
s4 = FileDateTime(s1)
s2 = "TNT"
'将网络上应用程序MyApp.EXE文件的修改时间存入 s2
s2 = FileDateTime(ExePath + App_Name + ".EXE")
If s2 = "TNT" Then
MsgBox "没有找到最新的可执行文件:" + ExePath + App_Name + ".EXE" _
+ vbCrLf + vbCrLf + "原因1:存放最新EXE的服务器或者工作站没有打开;" _
+ vbCrLf + "原因2:存放最新EXE的路径错误或者EXE文件不存在;" _
+ vbCrLf + "请将此情况通知程序员." + vbCrLf + vbCrLf _
+ vbCrLf + "按确定按钮后,将继续运行本地EXE文件.", vbCritical, "提示"
End If
If s2 = "TNT" Or s4 = "TNT" Then Exit Sub
'如果网络上应用程序MyApp.EXE文件的修改时间,大于本地MyApp.EXE文件的修改时间
'然后再运行本地MyApp.EXE ,中介程序退出后,整个更新过程结束.
If CDate(s2) > CDate(s4) Then
'将网络上的中介程序FastCopy.exe复制到本地,这样可防止本地无中介程序时无法进行更新
FileCopy ExePath + MidExeName + ".EXE", s3
'则运行中介程序FastCopy.exe ,将最新的MyApp.EXE 复制到本地
s1 = Shell(s3 + " " + ExePath + "," + App_Name + ".EXE", vbNormalFocus)
'本地应用程序MyApp.EXE 终止运行,否则已经更新的MyApp.EXE无法覆盖本地的MyApp.EXE .
End
End If
End Sub
将以上程序编译为:MyApp.exe 存储在共享目录中.
在中介程序工程 FastCopy 中的代码如下:
向工程中增加一个窗体Form1 ,向Form1中添加一个定时器 Timer1 , 增加一个标签控件 Label1 ,其 Caption 为 "应用程序正在更新",并调整窗体大小.
Option Explicit
Private sPath As String '用于存储服务器上的共享目录
Private sName As String '用于存储应用程序名
Private Sub Form_Load()
Dim s As String
'从应用程序的命令行参数中取得数据
s = Trim(Command())
Dim p As Integer
p = InStr(1, s, ",")
If p > 0 Then
'取得储服务器上的共享目录
sPath = Mid(s, 1, p - 1)
'取得应用程序名
sName = Mid(s, p + 1, Len(s) - p)
'定时器延时6秒,保证本地旧版应用程序退出运行
Timer1.Interval = 6000
Else
'参数错误则退出
MsgBox "Error", vbCritical, ""
Unload Me
End
End If
End Sub

怎样用VB自动更新应用程序的更多相关文章

  1. c#自动更新+安装程序的制作 (转)

    c#自动更新+安装程序的制作 (转)  http://blog.csdn.net/myhuli120/article/details/6927588 一.自动更新的实现 让客户端实现自动更新,通常做法 ...

  2. c#自动更新+安装程序的制作

    一.自动更新的实现 让客户端实现自动更新,通常做法是在客户端部署一个单独的自动更新程序.主程序启动后,访问服务端,检查配置文件是否有更新版本,有更新版本就启动更新程序,由更新负责下载更新版本,并更新客 ...

  3. C#自动更新本地程序

    关于系统的自动更新.近日有一情况是需要将java端后台最新版本的系统文件覆盖本地客户端,简称自动更新了. 本地会获取当前系统的版本号去请求后台java的接口数据.返回给我的是后台压缩包转的base64 ...

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

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

  5. Windows 程序自动更新方案: Squirrel.Windows

    Windows 程序自动更新方案: Squirrel.Windows 1. Squirrel Squirrel 是一组工具和适用于.Net的库,用于管理 Desktop Windows 应用程序的安装 ...

  6. Web APP自动更新

    我们的手机软件每天都要经营,经常需要更新,比如程序的Bug,好的功能,好的洁面... ... 这就需要我们的用户打开web app时候自动更新客户端程序,而不是再去应用程序商店从新下载.今天的笔记就是 ...

  7. C#[WinForm]实现自动更新

    C#[WinForm]实现自动更新 winform程序相对web程序而言,功能更强大,编程更方便,但软件更新却相当麻烦,要到客户端一台一台地升级,面对这个实际问题,在最近的一个小项目中,本人设计了一个 ...

  8. 分析nuget源码,用nuget + nuget.server实现winform程序的自动更新

    源起 (个人理解)包管理最开始应该是从java平台下的maven开始吧,因为java的开发大多数是基于开源组件开发的,一个开源包在使用时很可能要去依赖其他的开源包,而且必须是特定的版本才可以.以往在找 ...

  9. C#之tcp自动更新程序

    .NETTCP自动更新程序有如下几步骤: 第一步:服务端开启监听 ServiceHost host; private void button1_Click(object sender, EventAr ...

随机推荐

  1. python中yield用法

    在介绍yield前有必要先说明下Python中的迭代器(iterator)和生成器(constructor). 一.迭代器(iterator) 在Python中,for循环可以用于Python中的任何 ...

  2. mysql 中的外键key值的详解

    如果Key是空的, 那么该列值的可以重复, 表示该列没有索引, 或者是一个非唯一的复合索引的非前导列2. 如果Key是PRI,  那么该列是主键的组成部分3. 如果Key是UNI,  那么该列是一个唯 ...

  3. Trail: JDBC(TM) Database Access(2)

    package com.oracle.tutorial.jdbc; import java.sql.CallableStatement; import java.sql.Connection; imp ...

  4. j2ee的十三个规范

    转载 今天在做连接oracle数据库的时候,感受到了什么是规范.平时听到别人说学习j2ee一定要学习他的十三个规范,大概的知道每个规范是做什么的,每个“接口”是做什么的.          很早就听过 ...

  5. 第二百七十八天 how can I 坚持

    生命的意义.必须要做点什么啊.今年我们二十七八岁. 遇事不急,理清头绪就没那么复杂. 今天突然有点悔意,元旦好像应该不回去看房,花销有点大了,算了,过去的就让他过去吧,都是回忆.至少玩的挺嗨. 记住, ...

  6. C#经典面试题 C# 中 Struct 与 Class 的区别,以及两者的适用场合

    在一家公司面试时,第一个问题就是问到这个 转载 文章 http://www.cnblogs.com/waitrabbit/archive/2008/05/18/1202064.html  来解释此问题 ...

  7. C#Windows窗体界面设计_01_绘制三角函数_五点作图法

    binzhouweichao@163.com Visual Stutio 2010 C#开发环境 五点作图绘制三角函数,以正弦函数为例,选取一个周期[0, 2π]上的五个特殊的点,也就是横坐标0, π ...

  8. react native 遇到的坑

    1.项目中新加入组件,应执行npm install命令 2.项目执行react-native run-android 报错,应进入android目录,执行gradlew.bat clean命令 3.L ...

  9. PHP再学习1——cURL表单提交、HTTP请求和响应分析

    1.前言 最近迷恋WEB方面的技术,虽然自己是一个嵌入式工程师,但是我深知若需要把传感器终端的数据推送至“平台”必然会和WEB技术打交道.在工作中发现嵌入式工程师喜欢 二进制形式的协议,例如MODBU ...

  10. when not exists 用法

    USE [ChangHong_612]GO/****** Object: StoredProcedure [dbo].[st_MES_UpdateInspectResult] Script Date: ...