|
各位朋友: 最近在開發(fā)一個自動更新的程序,其主要原理是:當(dāng)主程序啟動后,其軟件升級子模塊自動從網(wǎng)上下載主程序(.exe)和與之相關(guān)的DLL等文件到本機(jī)的一個臨時目錄。然后在比較正運行的主程序和DLL等文件與臨時目錄中的文件是否需要替。如果需要,用臨時目錄中的文件替換原有文件。 其中我已經(jīng)實現(xiàn)了下載、比較等功能。但是如何替換正在運行中的主程序和DLL文件時卻遇到了技術(shù)困難。為了解決這個難點我設(shè)計了一個方案即:利用Windows API 中的MoveFileWithProgressW來實現(xiàn)。但是,我發(fā)現(xiàn)在用Delphi開發(fā)的主程序中能實現(xiàn)更新,但是用PB開發(fā)的文件卻出了“文件訪問拒絕”或“有其它進(jìn)程使用,不能移動”錯誤。 特向各位朋友尋求技術(shù)支持: 1、MoveFileWithProgressW在Delphi中的詳細(xì)用法 2、各位是否有更佳的方法來實現(xiàn)自動升級 主進(jìn)程啟動后,自動啟動UPDATE.EXE, UPDATE.EXE負(fù)責(zé)下載更新文件,關(guān)閉主程序,更新文件。 UPDATE.EXE的行為應(yīng)根據(jù)從服務(wù)器下載的更新腳本執(zhí)行,這樣就可以在其他項目中重用。 這樣做下載量是不是太大.一般先下載一個更新說明文件(帶有更新文件名和版本號,文本或者XML),在本地比較之后再決定下載什么文件,然后才是替換. 替換一般的東西,可以關(guān)閉正在運行的程序,然后復(fù)制過去.如果是24*7的程序,就需要更復(fù)雜的方式, 可以參考某些殺毒軟件,下載一個升級包,下載完自動運行升級包,升級包運行的時候把主程序關(guān)掉,更新就是了。 謝謝各位同行的積極參與,我在網(wǎng)上查詢了有關(guān)自動更新的一些技術(shù)和資料??偟膩碚f大多并只是簡單的利用FTP、TCP/IP實現(xiàn)網(wǎng)絡(luò)的傳輸。我根據(jù)客戶網(wǎng)絡(luò)以及軟件開發(fā)工程師的要求,重新設(shè)計了一個通用自動更新軟件。 在通用自動更新系統(tǒng)中,第三方開發(fā)的軟件代碼中加載一個DLL(自動升級客戶端)文件,在服務(wù)器軟件上進(jìn)行相應(yīng)的配置,就可以輕松實現(xiàn)對此軟件的自動更新功能。 在此系統(tǒng)中,對服務(wù)端硬件沒有任何要求。為滿足超大網(wǎng)絡(luò)客戶端(500臺PC以上),服務(wù)端軟件可能根據(jù)網(wǎng)絡(luò)負(fù)載隨時增減。 經(jīng)過測試此系統(tǒng)已能支持VC、VB、DELPHI、PB(6~9)、.NET(2003)開發(fā)的軟件中實現(xiàn)自動更新功能。 單臺服務(wù)端壓力測試支持200客戶端PC、20MB同時在線升級。 |
|
|