自動公升級的原理及實現

2021-08-26 03:10:27 字數 3249 閱讀 7529

c/s程式自動公升級是乙個很重要的功能,原理其實很簡單,一般包含兩個程式乙個是主程式,也就是除了公升級功能以外的程式,另乙個就是公升級程式,常見的360,金山安全衛士都是這樣。

一般服務端會有乙個配置檔案包含最新更新的檔案資訊的配置檔案,當然這些更新資訊也可以存到資料庫,或者其他地方。客戶端(也就是需要更新的那部分程式)也有乙個配置檔案包含客戶端版本資訊,這些資訊可以存到專門的乙個配置檔案中,或者是config檔案中,沒有一定的規定,可以根據實際設計。

優點:處理完成後,啟動的直接就是更新後的程式。不會出現由於主程式在執行導致替換檔案之類的錯誤。

1 比較版本

比較依據:

可以通過檔案的最後修改時間,或者使用檔案版本作為比較依據,使用檔案最後修改時間顯然不是標準的做法,但也沒有錯誤,但需要注意日期的格式一定要統一,避免日 期格式不一致導致錯誤。可以使用fileinfo類獲取最後修改時間,注意時間應該取伺服器時間,編譯程式集的機器時間應該相同,否則可能導致混亂。

fileinfo類官網參考

使用檔案版本作為標準,則每次修改時必須修改版本號,c#程式就是要修assemblyinfo.cs檔案中的內容了,多了一步,規範多了。version類處理版本資訊並比較。

view plain

copy to clipboard

print?

assemblythisassem=assembly.getexecutingassembly();

assemblynamethisassemname=thisassem.getname();

versionver=thisassemname.version;

assembly thisassem = assembly.getexecutingassembly(); assemblyname thisassemname = thisassem.getname(); version ver = thisassemname.version;

version類官網參考

當然也有其他的方式,例如md5校驗值比較,檔案大小比較,之類的方法。不過個人認為檔案大小缺陷很明顯,新版本檔案就一定比舊檔案大嗎?不一定吧。重構是可能變小的。

當然如果考慮客戶端有不同的版本,都需要公升級到最新的版本,顯然不同的版本對應的公升級檔案不同,會更複雜,比較的資訊也更多。

獲取服務端版本資訊:

如果服務端的版本資訊存在資料庫,直接讀取資料庫,就可以獲取。如果存在配置檔案,則可以通過webservice方法獲取,或者請求乙個網頁 通過response.write();的方式獲取資訊,當然這兩種方式都要建立虛擬目錄或者**。

儲存位置:

如果新版本的檔案存在資料庫,就直接讀取資料庫,不過這種方式個人不建議使用,例如更新檔案很大時效能不是很好。

3更新檔案

更新型別:

直接替換的,例如修改了bug,直接替換的。

新增加的,例如新增加的功能做成了新的類庫。

需要刪除的,例如有些功能由於重構或者使用了了新方法不需要的。

需要執行的,例如寫登錄檔,註冊com元件的。

每一種處理方式都不一樣,需要根據型別分開處理

缺點:公升級後,沒辦法取消公升級,像windows的補丁程式可以安裝,可以解除安裝的原理,目前還沒有研究明白,希望知道的牛人指導。

當然也可以簡單的先解除安裝,再安裝,對於配置檔案之類的資訊特殊處理一下也可以。

當然如果考慮客戶端有不同的版本,都需要公升級到最新的版本,顯然不同的版本對應的公升級檔案不同,會更複雜,但基本原理卻不變。

4啟動主程式

主程式路徑的獲取:

相對路徑 主程式,更新程式,都使用相對路徑,缺點是一旦相對路徑確定後,後續的更新就不能更改這種目錄關係。

登錄檔 路徑都存入登錄檔,需要時通過登錄檔互動,主程式寫登錄檔,更新程式讀取登錄檔,缺點是讀寫登錄檔需要許可權,寫的路徑也要固定,後續的更新不能改變寫在登錄檔中的位置,也就是登錄檔路徑。

執行程式**

view plain

copy to clipboard

print?

private

static

voidrunfile(stringdir,stringlocalfilename)

if(output!=string.empty)

log.logprocessend(info);}}

catch(exceptionex)}}

private static void runfile(string dir, string localfilename) if (output != string.empty) log.logprocessend(info); } } catch (exception ex) } }

自動公升級的原理及實現

c s程式自動公升級是乙個很重要的功能,原理其實很簡單,一般包含兩個程式乙個是主程式,也就是除了公升級功能以外的程式,另乙個就是公升級程式,常見的360,金山安全衛士都是這樣。一般服務端會有乙個配置檔案包含最新更新的檔案資訊的配置檔案,當然這些更新資訊也可以存到資料庫,或者其他地方。客戶端 也就是需...

自動公升級的原理及實現

c s程式自動公升級是乙個很重要的功能,原理其實很簡單,一般包含兩個程式乙個是主程式,也就是除了公升級功能以外的程式,另乙個就是公升級程式,常見的360,金山安全衛士都是這樣。一般服務端會有乙個配置檔案包含最新更新的檔案資訊的配置檔案,當然這些更新資訊也可以存到資料庫,或者其他地方。客戶端 也就是需...

IT C S自動公升級程式原理

背景 執行形式 原理 我們都知道,當乙個程式或檔案正在執行的時候,我們是無法對它進行刪除或修改等操作,一般情況都是因為目標正在被占用。同樣,當你執行乙個軟體,檢測到新版本的時候你不能直接將自己給替換了,因為此時該軟體正處於乙個執行狀態。這就需要第三方程式來幫助你進行這個公升級更新的動作。自動公升級程...