需要兩個程序,一個是主程序;一個是升級程序;所有升級任務都由升級程序完成。
1.啟動升級程序,升級程序連接到網站,下載新的主程序(當然還包括支持的庫文件、XML配置文檔等)到臨時文件夾;
2.升級程序獲取服務器端XML配置文件中新版本程序的更新日期或版本號或文件大小;
3.升級程序獲取原有客戶端應用程序的最近一次更新日期或版本號或文件大小,兩者進行比較;如果發現升級程序的日期大於原有程序的最新日期,則提示用戶是否升級;或者是采用將現有版本與最新版本作比較,發現最新的則提示用戶是否升級;也有人用其它屬性如文件大小進行比較,發現升級程序的文件大小大於舊版本的程序的大小則提示用戶升級。本文主要采用比較新舊版本更新日期號來提示用戶升級。
4.如果用戶選擇升級,則獲取下載文件列表,開始進行批量下載文檔;
5.升級程序檢測舊的主程序是否活動,若活動則關閉舊的主程序;
6.刪除舊的主程序,拷貝臨時文件夾中的文件到相應的位置;
7.檢查主程序的狀態,若狀態為活動的,則啟動新的主程序;
8.關閉升級程序,升級完成。
升級程序的自動升級
把需要更新的dll等文件放在服務端
客戶端的程序啟動,檢測到有需要更新的時候啟動update.exe,從服務端下載需要更新的dll文件,並退出主程序,通過update.exe進行更新操作等,文件的下載,注冊表的操作等都寫在了update.exe里
現在的問題是 如果update.exe本身需要更新,要怎么做
要更新UPDATE.EXE,先把UPDATE.EXE程序下載下來,命名為UPDATE_NEW.EXE.
主程序啟動后每次都檢測下是否有UPDATE_NEW.EXE文件,如果有,主程序刪除UPDATE.EXE並重命名UPDATE_NEW.EXE為UPDATE.EXE.這樣主程序不用連網檢測是否有新的UPDATE.EXE.
“客戶端的程序啟動,檢測到有需要更新的時候啟動update.exe,從服務端下載需要更新的dll文件,並退出主程序”
啟動update.exe之后,update.exe檢測自身是否需要更新。如果需要,則啟動第三個程序abc.exe關閉update.exe更新update.exe,完畢之后啟動update.exe。
如果update.exe也不能修改了,那把abc.exe命名為update.exe讓主程序來啟動它。
寫兩個updatea.exe updateb.exe每次先啟動updatea.exe檢查updateb.exe是否需要更新,如果有就更新updateb.exe,更新完了啟動updateb.exe,updateb.exe用於更新updatea.exe和主程序
下載需要更新的文件到update目錄(包括update.exe), 下載完畢設置標記, 啟動主程序, 主程序拷貝所有更新文件到安裝目錄(包括update.exe). 如果下載過程中失敗, 則主程序再次啟動時候不拷貝(更新不完整), 而是重新調度update.exe下載(可斷點續傳).