用VB编写自动升级程序.求助

用VB编写自动升级程序.求助,第1张

其实要写自动更新程序很简单的。。。我写过几次,这里要看你想写详细的(检测+下载),还是简单的(下载)

原理很简单,不要什么SQL。

既然要用FTP,那么需要一个控件,MSINET.ocx也就是Microsoft

Internet

Transfer

Control

6.0

这森迅个控件的属性protocol设为ICFTP,

首先连此唤此接

FTP服务器

Inet1.URL

=

"你的FTP地址"

Inet1.UserName

=

"FTP用户名"

Inet1.Password

=

"FTP密码"

下载

配置文件

(检测是否需要更新)

Inet1.Execute

,

"GET

Config.ini

"链氏

&

App.Path

&

"\Config.ini"

'下载配置文件(Config.ini)到本地,然后读取这个文件里面的内容和本地的是否是一样的,或者哪些不一样,需要下载哪些,

然后就下载需要更新的文件

Inet1.Execute

,

"GET

你要下载的文件.exe

"

&

App.Path

&

"\下载到的目录和文件名"

这样就可以实现一个简单的更新了。。。

s=trim(command())

'取得命令行参数

应该是这个形式:FastCopy.exe

网络目录名,文件名

's的返回值是

网络目录名,文件名

如:“\\liang\,myadd.exe"

'然后为了区分开目录名和文件名,就查找","号

p=instr(1,s,",")

'如果找到就分别取“,”前面的目录和后面的应用程序名。

具体程序实现如下:

在应用程序工程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


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/yw/12564742.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-26
下一篇 2023-05-26

发表评论

登录后才能评论

评论列表(0条)

保存