ITPub博客

首页 > Linux操作系统 > Linux操作系统 > 实用的c/s自动升级程序autoupdate

实用的c/s自动升级程序autoupdate

原创 Linux操作系统 作者:fangqm 时间:2011-06-22 12:28:22 0 删除 编辑
 
http://www.cnblogs.com/KnightsWarrior/archive/2010/10/20/1856255.html
 

1.启动主程序,主程序里面调用升级程序,升级程序连接到IIS或者FTP。

2.升级程序获取服务器端XML配置文件中新版本程序的更新日期或版本号或文件大小。

3.升级程序获取原有客户端应用程序的最近一次更新日期或版本号或文件大小,然后两者进行比较;如果新版本日期>原有程序的最新日期,则提示用户是否升级;或如果新版本版本号>原有程序的版本号,则提示用户是否升级;再或如果新版本文件大小>原有程序的文件大小,则提示用户是否升级。本文主要采用一般的做法,就是通过版本号来进行对比。

4.如果用户选择升级,则获取下载文件列表;

5.在本地建立与远程IIS或者FTP相应的临时目录,然后下载到这个临时目录文件下;

6.删除旧的主程序,拷贝临时文件夹中的文件到相应的位置;

8.结束升级流程并重新启动主程序。  

 

 

具体类介绍:

IAutoUpdater.cs         提供外部调用的接口

AutoUpdater.cs          该组件的主操作类

Autoupdater.config      本地配置文件

DownloadConfirm.cs    提示是否有更新页面

DownloadProgress.cs    下载进度页面

CommonUnitity.cs     一些常用功能

Config.cs         当更新完毕之后需要更新Config,所以这里需要一个提供序列化的Config类

ConstFile.cs      一些常量文件

DownloadFileInfo.cs     需要下载的文件实体类

LocalFile.cs     本地文件实体类

RemoteFile.cs     远程文件实体类

UpdateFileList.cs     本地的实体类集合

 

项目中如何使用

第一步:Host更新的版本到服务器

  如果需要让客户端获取最新的版本,首先我们需要开发人员编译源代码并生成文件,然后拷贝到FTP或者IIS目录下,运行一个自动生成XML文件的程序,把所有的文件都自动生成到一个XML文件,详细见下图:

第二步:配置本地的Config

  经过第一步的流程,这一步要做的就是配置本地的Config用于监测并下载远程IIS或者FTP下需要更新的文件,具体如下图所示:

第三步:修改主程序

  首先把AutoUpdater这个DLL引入我们的主项目,然后在主项目中添加如下代码,当然你可以根据自己的需要进行书写,这个DLL提供了两个外部接口,一个接口用于判断是否有更新及下载,另一个接口则是用于更新出错时进行回滚操作,具体代码如下:

      #region check and download new version program
      bool bHasError = false;
      IAutoUpdater autoUpdater = new AutoUpdater();
      try
      {
          autoUpdater.Update();
      }
      catch (WebException exp)
      {
          MessageBox.Show("Can not find the specified resource");
          bHasError = true;
      }
      catch (XmlException exp)
      {
          bHasError = true;
          MessageBox.Show("Download the upgrade file error");
      }
      catch (NotSupportedException exp)
      {
          bHasError = true;
          MessageBox.Show("Upgrade address configuration error");
      }
      catch (ArgumentException exp)
      {
          bHasError = true;
          MessageBox.Show("Download the upgrade file error");
      }
      catch (Exception exp)
      {
          bHasError = true;
          MessageBox.Show("An error occurred during the upgrade process");
      }
      finally
      {
          if (bHasError == true)
          {
              try
              {
                  autoUpdater.RollBack();
              }
              catch (Exception)
              {
                 //Log the message to your file or database
              }
          }
      }
      #endregion

使用就是这么简单,更详细的操作,大家可以下载源码,也正因为它的简单,所以大家可以对其修改以满足具体项目的需求。

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/23109131/viewspace-700465/,如需转载,请注明出处,否则将追究法律责任。

上一篇: Timer 周期
请登录后发表评论 登录
全部评论

注册时间:2010-03-24

  • 博文量
    298
  • 访问量
    729552