三、FaibClass.Update 在线更新
软件往往在发布以后,要进行N次的更新,如果此时软件已经分页到N个客户端,采用传统的复制更新方法将使你的系统看上去相当的别扭,所以我一惯的做法就是,软件发布测试时就将自动更新的功能加上,用户测试、反馈、修改后直接传到服务器,客户端检测有更新时就下载更新。
这包括三个文件:FaibClass.Update.dll 、FaibClass.Transfer.dll 、UpdaterExc.exe 、UpdaterExc.exe.config
通过FaibClass.Update.dll 连接远程地址、检测版本,然后将任务交给UpdaterExc.exe来下载、更新。
UpdaterExc.exe.config 文件:
Code
<?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 文件,放在服务器上,功能是放置每一次版本更新的信息。
Code
<?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类来检测更新。
Code
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的主界面:
只需点击更新,就可以将之前没有更新的所有版本一个一个的更新到本地。