在應用程序工程MyApp中的部分代碼如下:
OptionExplicit
PrivateConstApp_Name="MyApp"
PrivateConstExePath="NtServer01Refresh"
PrivateConstMidExeName="FastCopy"
PrivateSubForm_Load()
IfUCase(Trim(App.EXEName))<>UCase(Trim(App_Name))Then
MsgBox"必須將訂單管理系統的名稱更改為:" App_Name
End
EndIf
CallExeRefresh
EndSub
PrivateSubExeRefresh()
Dims1AsString
Dims2AsString
Dims3AsString
Dims4AsString
OnErrorResumeNext
'將本地中介程序FastCopy.exe的全路徑名存入s3
s1="TNT"
IfLen(App.Path)>3Then
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"
EndIf
s4="TNT"
s4=FileDateTime(s1)
s2="TNT"
s2=FileDateTime(ExePath App_Name ".EXE")
Ifs2="TNT"Then
MsgBox"沒有找到最新的可執行文件:" ExePath App_Name ".EXE"_
vbCrLf vbCrLf "原因1:存放最新EXE的服務器或者工作站沒有打開;"_
vbCrLf "原因2:存放最新EXE的路徑錯誤或者EXE文件不存在;"_
vbCrLf "請將此情況通知程序員." vbCrLf vbCrLf_
vbCrLf "按確定按鈕後,將繼續運行本地EXE文件.",vbCritical,"提示"
EndIf
Ifs2="TNT"Ors4="TNT"ThenExitSub
'然後再運行本地MyApp.EXE,中介程序退出後,整個更新過程結束.
IfCDate(s2)>CDate(s4)Then
FileCopyExePath MidExeName ".EXE",s3
s1=Shell(s3 "" ExePath "," App_Name ".EXE",vbNormalFocus)
End
EndIf
EndSub
將以上程序編譯為:MyApp.exe存儲在共享目錄中.
向工程中增加一個窗體Form1,向Form1中添加一個定時器Timer1,增加一個標簽控件Label1,其Caption為"應用程序正在更新",並調整窗體大小.
OptionExplicit
PrivatesPathAsString
PrivatesNameAsString
PrivateSubForm_Load()
DimsAsString
s=Trim(Command())
DimpAsInteger
p=InStr(1,s,",")
Ifp>0Then
sPath=Mid(s,1,p-1)
sName=Mid(s,p 1,Len(s)-p)
Timer1.Interval=6000
Else
MsgBox"Error",vbCritical,""
UnloadMe
End
EndIf
EndSub
PrivateSubTimer1_Timer()
Timer1.Interval=0
Dims1AsString
IfLen(App.Path)>3Then
s1=App.Path "" sName
Else
s1=App.Path sName
EndIf
OnErrorResumeNext
FileCopysPath sName,s1
DimaAsLong
a=Shell(s1,vbNormalFocus)
UnloadForm1
End
EndSub
將工程FastCopy編譯為FastCopy.exe並存儲於服務器的共享目錄。
1、將服務器共享目錄中的:MyApp.exe復制到本地硬盤的某個目錄中;
2、重新編譯MyApp工程,將MyApp.exe復制到服務器的共享目錄中,注意一定不要覆蓋本地的MyExe.app;
3、這樣服務器上MyApp.exe的修改時間肯定大於本地MyApp.exe的修改時間;
4、運行本地MyApp.exe,幾秒鐘後屏幕上會出現"應用程序正在更新"的窗體,隨後更新後應用程序再次被運行。則自動更新成功。
5、程序的修改時間可通過在文件上用鼠標按右鍵的屬性或內容的菜單觀察。
本程序在Windows98和VB6.0,NT局域網絡下測試通過。
本文內容也適用於其它語言參考。->