三、FaibClass.Update 在線更新
軟件往往在發布以後,要進行N次的更新,如果此時軟件已經分頁到N個客戶端,采用傳統的復制更新方法將使你的系統看上去相當的別扭,所以我一慣的做法就是,軟件發布測試時就將自動更新的功能加上,用戶測試、反饋、修改後直接傳到服務器,客戶端檢測有更新時就下載更新。
這包括三個文件:FaibClass.Update.dll 、FaibClass.Transfer.dll 、UpdaterExc.exe 、UpdaterExc.exe.config
通過FaibClass.Update.dll 連接遠程地址、檢測版本,然後將任務交給UpdaterExc.exe來下載、更新。
UpdaterExc.exe.config 文件:
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<appSettings>
<!- 主程序名 ->
<add key="FileName" value="Client" />
<!- 是否使用config裡的版本號,否則的話使FileName程序集版本 ->
<add key="UseConfigVersion" value="1" />
<!- 服務器地址 ->
<add key="ServerUrl" value="http://1.1.1.1:8088" />
<!- 服務器上的配置文件 ->
<add key="UpdaterXml" value="" />
<!- 當前本地版本號 ->
<add key="Version" value="1.0.0.021" />
<!- 下載塊大小 ->
<add key="BlockSize" value="" />
</appSettings>
</configuration>
Updater.xml 文件,放在服務器上,功能是放置每一次版本更新的信息。
<?xml version="1.0" encoding="gb2312" ?>
<Items xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<UpdaterItem>
<Name>D100025</Name>
<Version>1.0.0.025</Version>
<Date>2009-04-30T11:17:07.546875+08:00</Date>
<Descript>
<string>1、修正用戶反饋的錯誤提成的問題</string>
<string>2、修正每個月只能返現一次</string>
<string>3、加入數據統計功能接口(如報表處)</string>
</Descript>
<FileName>zips/1.0.0.025.rar</FileName>
<CloseMain>true</CloseMain>
</UpdaterItem>
<UpdaterItem>
<Name>D100026</Name>
<Version>1.0.0.026</Version>
<Date>2009-05-01T02:12:03.546875+08:00</Date>
<Descript>
<string>1、修正用戶反饋的錯誤提成的問題</string>
<string>2、修正提現方案二後幾個月返現錯誤</string>
<string>3、單積分消費處加入現金劵支付</string>
<string>4、修正消費界面中快捷鍵輸入時積分為0的錯誤</string>
</Descript>
<FileName>zips/1.0.0.026.rar</FileName>
<CloseMain>true</CloseMain>
</UpdaterItem>
<UpdaterItem>
<Name>D100027</Name>
<Version>1.0.0.027</Version>
<Date>2009-05-04T00:50:03.546875+08:00</Date>
<Descript>
<string>1、修正代理商提成錯誤</string>
<string>2、修正返現提成錯誤</string>
<string>3、修正員工上級無法修改錯誤</string>
<string>4、在視圖菜單中加入窗口控制</string>
</Descript>
<FileName>zips/1.0.0.027.rar</FileName>
<CloseMain>true</CloseMain>
</UpdaterItem>
</Items>
在主程序裡,使用FaibClass.Update中的Updater類來檢測更新。
Updater up = null;
try
{
up = new Updater(Assembly.GetExecutingAssembly());
if (up.CheckUpdate())
{
Utility.ShowInfoMessage("檢測到新版本,單擊確定後開始更新。");
up.BeginUpdate();
Application.Exit();
return;
}
else
{
//自更新更新程序
string file1 = Path.Combine(Application.StartupPath, "UpdaterExc.exc");
string file2 = Path.Combine(Application.StartupPath, "UpdaterExc.exe");
if (File.Exists(file1))
{
File.Replace(file1, file2, null, true);
}
}
}
catch (System.Exception e)
{
}
檢測到新版本後,會顯示UpdateExc的主界面:
只需點擊更新,就可以將之前沒有更新的所有版本一個一個的更新到本地。