你1.0里做了查找更新的功能么?通常比如做一段连到更新服务器,验证下最新版本信息比如服务器目录下放个记录版本号和新版位置的txt,有了就用单写的更新程序更新(不能更新正在运行的自己的关系).至于没做这部分而要让原来的1.0自己"感应"到那是天方夜谭了.
自动升级?提供个思路供你参考.
独立编写升级模块,编译为单独文件,并且在主程序中通过事件或方法以调用外部程序的方式调用.
可另创二进制文件记录,本机软件版本号及版本日期.升级模块内有与网络文件日期或版本号比较的代码.比较结果发现已经更新提示后由用户选择是否更新,更新时直接覆盖.当然,更人性化的可以让用户选择新功能安装.
文件位置?一般可以通过注册表确认.开始学时,可以直接记录到一个文件里,更新时取出来就是了.
具体程序实现如下:
在应用程序工程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
On Error Resume Next
'将本地应用程序MyApp.EXE的全路径名存入 s1
s1 = "TNT"
s1 = App.Path + "\" + Trim(App_Name) + ".exe"
Else
s1 = App.Path + Trim(App_Name) + ".exe"
MsgBox "没有找到最新的可执行文件:" + ExePath + App_Name + ".EXE" _
+ vbCrLf + vbCrLf + "原因1:存放最新EXE的服务器或者工作站没有打开;" _
+ vbCrLf + "请将此情况通知程序员." + vbCrLf + vbCrLf _
+ vbCrLf + "按确定按钮后,将继续运行本地EXE文件.", vbCritical, "提示"
'如果网络上应用程序MyApp.EXE文件的修改时间,大于本地MyApp.EXE文件的修改时间
'然后再运行本地MyApp.EXE ,中介程序退出后,整个更新过程结束.
'将网络上的中介程序FastCopy.exe复制到本地,这样可防止本地无中介程序时无法进行更新
'则运行中介程序FastCopy.exe ,将最新的MyApp.EXE 复制到本地
'本地应用程序MyApp.EXE 终止运行,否则已经更新的MyApp.EXE无法覆盖本地的MyApp.EXE .
将以上程序编译为:MyApp.exe 存储在共享目录中.
问题补充:在中介程序工程 FastCopy 中的代码如下:
向工程中增加一个窗体Form1 ,向Form1中添加一个定时器 Timer1 , 增加一个标签控件 Label1 ,其 Caption 为 "应用程序正在更新",并调整窗体大小.
Private sPath As String '用于存储服务器上的共享目录
Private sName As String '用于存储应用程序名
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)
'参数错误则退出
MsgBox "Error", vbCritical, ""
Unload Me
s=trim(command())
'取得命令行参数
应该是这个形式:FastCopy.exe
网络目录名,文件名
's的返回值是
如:"\\liang\,myadd.exe"
'然后为了区分开目录名和文件名,就查找","号
p=instr(1,s,",")
'如果找到就分别取","前面的目录和后面的应用程序名.