.net winform软件自动更新

原创 2012年03月23日 17:12:18

   关于.NET windows软件实现自动更新,本人今天写了一个DEMO,供大家参考。

     大家先看下效果图:

       

    主要涉及到两个方面

         1. 更新软件主项目和DLL文件

         2.升级包自身的更新

       

      1.   一个项目通常包括主项目和类库项目,主项目就是启动项目,以.exe结尾,类库项目主要是DLL, 简单的说更新就是将软件本地的主项目和类库项目进行更新。

可以采用将最新的软件放到一个远程服务器上,然后每次启动本地软件时候,检查如果有更新,就从服务器上下载最新的.EXE文件和DLL文件,

来替换本地的DLL文件和exe文件

     实现思路:在本地和服务器上各放一个XML文件,里面记录了软件版本号,发布日期,要更新的DLL等一些信息,如果发现本地软件的版本号和服务器上的不相等,或者

    本地软件中的类库项目的发布时间比服务上的晚,就开始下载服务器上的文件,替换掉本地的文件。

     XML格式如下

       

<?xml version="1.0" encoding="utf-8"?>
<AutoUpdater>
  <AppName>WinUpdate</AppName>
  <ReleaseURL>http://127.0.0.1/webdown/</ReleaseURL>
  <ReleaseDate>2012/3/1 10:42:34</ReleaseDate>
  <ReleaseVersion>1.0.1.99</ReleaseVersion>
  <MinVersion>1.0.1.88</MinVersion>
  <UpdateDes>
    1、	添加打印菜单
    2、	增加DLL
    3、增加关于模块
  </UpdateDes>
  <ApplicationStart>WinUpdate.exe</ApplicationStart>
  <ShortcutIcon>ico</ShortcutIcon>
  <Releases>
    <File name="AboutForm.dll" date="2012/2/21 10:07:31" size="39" />
  </Releases>
</AutoUpdater>

 

            

      public static void DownloadFile(string localFolder, string remoteFolder, string fileName, ProgressBar bar,
                                        Label lblSize)
        {
             string url = remoteFolder + "/" + fileName;
            string path = localFolder+ fileName;
            string dir = Path.GetDirectoryName(path);
            if (!Directory.Exists(dir))
                Directory.CreateDirectory(dir);

            WebRequest req = WebRequest.Create(url);
            WebResponse res = req.GetResponse();
            if (res.ContentLength == 0)
                return;

            long fileLength = res.ContentLength;
            string totalSize = FormatFileSizeDescription(bar.Maximum);
            using (Stream srm = res.GetResponseStream())
            {
                var srmReader = new StreamReader(srm);
                var bufferbyte = new byte[fileLength];
                int allByte = bufferbyte.Length;
                int startByte = 0;
                while (fileLength > 0)
                {
                    int downByte = srm.Read(bufferbyte, startByte, allByte);
                    if (downByte == 0)
                    {
                        break;
                    }
                    ;
                    startByte += downByte;
                    allByte -= downByte;
                    int progress = bar.Value + downByte;
                    progress = progress > bar.Maximum ? bar.Maximum : progress;
                    bar.Value = progress;

                    lblSize.Text = string.Format("已完成{0}/{1}", FormatFileSizeDescription(progress), totalSize);
       
                }

                var fs = new FileStream(path, FileMode.OpenOrCreate, FileAccess.Write);
                fs.Write(bufferbyte, 0, bufferbyte.Length);
                srm.Close();
                srmReader.Close();
                fs.Close();
            }
        }
    }



 

   2.关于升级包自身的更新,采用如下思路,在服务器上放置一个TXT文件,里面存放着升级包的版本号,每次本地软件启动的时候,

 读取服务器上TXT文件的版本号和本地升级包的版本信息进行比较,如果不同,就从服务器上下载升级包。

 

    关于下载本项目都是使用WebClient进行完成的。

 

     自己可以采用如下方式进行测试

    首先,在你的IIS下面建立一个虚拟目录:http://127.0.0.1/webdown ,此目录用来放置要更新的文件,内容如下

      

      1.ReleaseList.xml和1.0.4.98文件夹主要是实现软件更新

          ReleaseList.xml存放了需要更新的内容。1.0.4.98文件夹存放了需要更新的类库和文件

     2.  AutoUpdate.exe,UpdaterVerson.txt这两个文件实现的升级包自身进行更新.

          AutoUpdate.exe是升级包,UpdaterVerson.txt存放的是升级包的版本号

    将以上内容部署到IIS下面

 

   

 

    本代码使用VS2008进行开发,

     DEMO下载

     http://download.csdn.net/detail/zx13525079024/4167121

 

  

 

 

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

[转]在WinForm应用程序中实现自动升级

原文地址:点击打开链接 这是本人第一次写比较复杂的文章,表达不清之处,请各位见谅。好,闲话少说,入正题。 最近单位开发一个项目,其中需要用到自动升级功能。因为自动升级是一个比较常用的功能,...

C# winform自动更新程序扫盲

http://bbs.bccn.net/viewthread.php?tid=428255&extra=page%3D1%26amp%3Bfilter%3Ddigest&page=1 自动更新 我直...

C#实现自动升级(附源码)

目前主流的程序自动升级策略是,重新下载最新的安装包,然后重新安装整个客户端。这种方式虽然简单直观,但是缺陷也很明显。比如,即使整个客户端有100M,而本次更新仅仅只是修改了一个1k大小的dll,那也意...

Delphi7高级应用开发随书源码

  • 2003年04月30日 00:00
  • 676KB
  • 下载

C#Winform程序如何使用ClickOnce发布并自动升级(图解)

有不少朋友问到C#Winform程序怎么样配置升级,怎么样打包,怎么样发布的,在这里我解释一下打包和发布 关于打包的大家可以看我的文章C# winform程序怎么打包成安装项目(图解) 其实打包是打包...

WinForm通用自动更新器AutoUpdater项目实战

一、项目背景介绍 最近单位开发一个项目,其中需要用到自动升级功能。因为自动升级是一个比较常用的功能,可能会在很多程序中用到,于是,我就想写一个自动升级的组件,在应用程序中,只需要引用这个自动升级...

Delphi7高级应用开发随书源码

  • 2003年04月30日 00:00
  • 676KB
  • 下载

C#Winform程序如何发布并自动升级(图解)

http://www.sufeinet.com/thread-2187-1-1.html 有不少朋友问到C#Winform程序怎么样配置升级,怎么样打包,怎么样发布的,在这里我解释一下打包和发布...

Delphi7高级应用开发随书源码

  • 2003年04月30日 00:00
  • 676KB
  • 下载

Winform自动升级系统的设计与实现(源码)

Winform自动升级系统的设计与实现(源码)
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:.net winform软件自动更新
举报原因:
原因补充:

(最多只允许输入30个字)