三、FaibClass.Update 在线更新
    软件往往在发布以后,要进行N次的更新,如果此时软件已经分页到N个客户端,采用传统的复制更新方法将使你的系统看上去相当的别扭,所以我一惯的做法就是,软件发布测试时就将自动更新的功能加上,用户测试、反馈、修改后直接传到服务器,客户端检测有更新时就下载更新。
    这包括三个文件:FaibClass.Update.dll 、FaibClass.Transfer.dll 、UpdaterExc.exe 、UpdaterExc.exe.config
    通过FaibClass.Update.dll 连接远程地址、检测版本,然后将任务交给UpdaterExc.exe来下载、更新。
    UpdaterExc.exe.config 文件:


  <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 文件,放在服务器上,功能是放置每一次版本更新的信息。

  <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类来检测更新。
;
            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, 
nulltrue);
                    }
                }
            }
            
catch (System.Exception e)
            {
            }

    检测到新版本后,会显示UpdateExc的主界面:
    个人开发框架总结(六)
    只需点击更新,就可以将之前没有更新的所有版本一个一个的更新到本地。

相关文章: