码迷,mamicode.com
首页 > Windows程序 > 详细

C# 编写自动更新程序 (转)

时间:2015-07-28 12:24:10      阅读:192      评论:0      收藏:0      [点我收藏+]

标签:

 

感觉用的到,存下来,转自:http://blog.csdn.net/gisfarmer/article/details/4437994

现在但凡是一个程序都有相应的升级程序,如果你的程序没有相应的升级程序,那么你就需要留意了。你的用户很可能丢失!!!网上关于自动升级的例子也有很多,前几天一个朋友很苦恼的跟我说它的客户在逐渐减少(据他所说,他都客户因为他的程序升级很麻烦,所以很多人放弃了使用它的软件),问我说怎么办?其实他也知道该怎么办?所以...朋友嘛!就给他做了一个自动升级程序。恰好今天CSDN上的一位老友也询问这件事情,所以就把代码共享大家了。

先个几个图:

技术分享

 

技术分享

 

主要原理(相当简单):

升级程序一定要是一个单独的exe,最好不要和你的程序绑到一起(否则升级程序无法启动)。主程序退出----升级程序启动----升级程序访问你的网站的升级配置文件-----读取配置文件里面信息-----下载-----升级程序关闭----主程序启动

主要代码:

1.读取配置文件:

 1         private void GetUpdateInfo()
 2         {
 3             //获取服务器信息
 4             WebClient client = new WebClient();
 5             doc = new XmlDocument();
 6             try
 7             {
 8                 doc.Load(client.OpenRead("http://192.168.3.43/update/update.xml"));
 9                 //doc.Load(client.OpenRead(Config.IniReadValue("Update","UpdateURL",Application.StartupPath+"//config.ini")+"//update.xml"));
10                 //doc.Load(Application.StartupPath + "//update.xml");
11                 client = null;
12             }
13             catch
14             {
15                 this.labHtml.Text = "无法取得更新文件!程序升级失败!";
16                 return;
17             }
18             if (doc == null)
19                 return;
20             //分析文件
21             XmlNode node;
22             //获取文件列表
23             string RootPath = doc.SelectSingleNode("Product/FileRootPath").InnerText.Trim();
24             node = doc.SelectSingleNode("Product/FileList");
25             if (node != null)
26             {
27                 foreach (XmlNode xn in node.ChildNodes)
28                 {
29                     this.listView1.Items.Add(new ListViewItem(new string[]
30                         {
31                              xn.Attributes["Name"].Value.ToString(),                            
32                              new WebFileInfo(RootPath+xn.Attributes["Name"].Value.ToString()).GetFileSize().ToString(),
33                             "---"
34                         }));
35                 }
36             }
37         }

2.文件下载:

        /// <summary>
        /// 下载文件
        /// </summary>
        public void Download()
        {
            FileStream fs = new FileStream( this.strFile,FileMode.Create,FileAccess.Write,FileShare.ReadWrite );
            try
            {
                this.objWebRequest = (HttpWebRequest)WebRequest.Create( this.strUrl );
                this.objWebRequest.AllowAutoRedirect = true;
//                int nOffset = 0;
                long nCount = 0;
                byte[] buffer = new byte[ 4096 ];    //4KB
                int nRecv = 0;    //接收到的字节数
                this.objWebResponse = (HttpWebResponse)this.objWebRequest.GetResponse();
                Stream recvStream = this.objWebResponse.GetResponseStream();
                long nMaxLength = (int)this.objWebResponse.ContentLength;
                if( this.bCheckFileSize && nMaxLength != this.nFileSize )
                {
                    throw new Exception( string.Format( "文件/"{0}/"被损坏,无法下载!",Path.GetFileName( this.strFile ) ) );
                }
                if( this.DownloadFileStart != null )
                    this.DownloadFileStart( new DownloadFileStartEventArgs( (int)nMaxLength ) );
                while( true )
                {
                    nRecv = recvStream.Read( buffer,0,buffer.Length );
                    if( nRecv == 0 )
                        break;
                    fs.Write( buffer,0,nRecv );
                    nCount += nRecv;
                    //引发下载块完成事件
                    if( this.DownloadFileBlock != null )
                        this.DownloadFileBlock( new DownloadFileEventArgs( (int)nMaxLength,(int)nCount ) );
                }
                recvStream.Close();    
                //引发下载完成事件
                if( this.DownloadFileComplete != null )
                    this.DownloadFileComplete( this,EventArgs.Empty );
            }
            finally
            {
                fs.Close();
            }
        }

 

C# 编写自动更新程序 (转)

标签:

原文地址:http://www.cnblogs.com/CareyZhao/p/4682203.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!