麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 學院 > 開發設計 > 正文

用VB實現應用程序在局域網絡上自動更新

2019-11-18 17:35:55
字體:
來源:轉載
供稿:網友
我們在用VB開發大型應用程序時遇到如下問題,進入調試、維護階段開發小組進駐用戶單位,軟件交用戶試用會經常修改程序并重新編譯。然后再由程序員給用戶復制更新,或者通知用戶自行復制更新。對于少量用戶可以做到及時更新。而我們的一個用戶在一座十層的大廈中辦公,有十幾個部門(即有管理部門又有生產車間分布在不同的樓層),每個部門少則有2~3臺工作站,多則有數十臺工作站,與四臺服務器組成局域網絡.且每個部門應用程序各不相同,應用程序修改編譯后經常不能同步更新,從而造成部門內數據或者部門間的數據不一致。程序員每天都要跑上跑下檢查版本更新程序浪費了很多寶貴時間,即使通知部門主管自行更新,某些工作站也會出現遺漏現象。鑒于以上問題我們考慮使用程序自動更新技術,即自動檢查新版本,將新版本復制到本地,重新執行本地應用程序。
基本原理:在某個服務器上共享出一個目錄,其權限為程序員完全控制,其它用戶只讀。
例如://NtServer01/Refresh,程序員重新編譯后的應用程序.EXE都存放在此目錄下。
在應用程序的入口處調用版本檢查及更新過程,如果服務器應用程序的修改時間大于本地應用程序的修改時間,則認為有新版本出現,應該將服務器上的新版本復制到本地硬盤。
由于應用程序在運行時不能被新版本覆蓋,所以就需要中介程序FastCopy.EXE(也用VB編寫)來完成更新版本并重新運行本地應用程序。為了達到及時更新的目的可在應用程序中每隔5分鐘或10分鐘檢查一次是否有新版本。(此部分略有興趣的讀者可自行編程添加)
本例中:
服務器:NtServer01共享目錄:Refresh
應用程序:MyApp.exe中介程序FastCopy.exe(都存儲于共享目錄中)
下載源代碼(6K)

具體程序實現如下:
在應用程序工程MyApp中的部分代碼如下:
OptionExplicit
'編譯后的應用程序名稱,注意沒有后綴.EXE,本例為MYAPP

PrivateSubForm_Load()
IfUCase(Trim(App.EXEName))<>UCase(Trim(App_Name))Then
MsgBox"必須將訂單管理系統的名稱更改為:" App_Name
End
EndIf
'判斷是否有最新版本的應用程序,如有則自動更新
CallExeRefresh

'下面為訂單管理系統的正常操作略.......
EndSub

'版本檢查及更新過程
PrivateSubExeRefresh()
'定義四個臨時字符串變量
Dims1AsString
Dims2AsString
Dims3AsString
Dims4AsString
OnErrorResumeNext
'將本地應用程序MyApp.EXE的全路徑名存入s1
'將本地中介程序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"
'將本地應用程序MyApp.EXE文件的修改時間存入s4
s4=FileDateTime(s1)
s2="TNT"
'將網絡上應用程序MyApp.EXE文件的修改時間存入s2
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文件的修改時間,大于本地MyApp.EXE文件的修改時間
'然后再運行本地MyApp.EXE,中介程序退出后,整個更新過程結束.
IfCDate(s2)>CDate(s4)Then
'將網絡上的中介程序FastCopy.exe復制到本地,這樣可防止本地無中介程序時無法進行更新
FileCopyExePath MidExeName ".EXE",s3
'則運行中介程序FastCopy.exe,將最新的MyApp.EXE復制到本地
s1=Shell(s3 "" ExePath "," App_Name ".EXE",vbNormalFocus)
'本地應用程序MyApp.EXE終止運行,否則已經更新的MyApp.EXE無法覆蓋本地的MyApp.EXE.
End
EndIf
EndSub
將以上程序編譯為:MyApp.exe存儲在共享目錄中.

在中介程序工程FastCopy中的代碼如下:
向工程中增加一個窗體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)
'定時器延時6秒,保證本地舊版應用程序退出運行
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局域網絡下測試通過。
本文內容也適用于其它語言參考。->


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 国产精品视频久久久 | 精品99在线视频 | 91经典视频 | 91精品久久久久久 | 成人毛片av在线 | 久久av免费 | 国产乱子视频 | 一级毛片在线观看视频 | 一级大黄毛片 | aa级黄色片 | 久久福利国产 | 成人视屏网站 | 男男羞羞视频网站国产 | 国产精品91在线 | 一日本道久久久精品国产 | 男女隐私免费视频 | 国产色爱综合网 | 伊人网站 | 国产精品a一 | 91在线播放国产 | 福利在线免费 | 一级毛片免费版 | 99ri在线| 日本羞羞影院 | 日韩三级伦理在线观看 | 91资源在线观看 | 蜜桃网在线观看 | 中文字幕欧美日韩 | 国产1区2区在线观看 | 国产精品久久久久国产精品三级 | 日本中文字幕电影在线观看 | 欧美人的天堂一区二区三区 | 91精品国产综合久久男男 | 精品国产一区二区三区久久久蜜月 | 国产一级淫片免费看 | 国产 日韩 亚洲 欧美 | 久久91精品久久久久清纯 | 97zyz成人免费视频 | 国产欧美在线观看不卡一 | 麻豆视频在线播放 | 免费观看视频在线观看 |