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

感觉用的到,存下来,转自: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();
            }
        }
时间: 2024-10-09 17:24:44

C# 编写自动更新程序 (转)的相关文章

C#之tcp自动更新程序

.NETTCP自动更新程序有如下几步骤: 第一步:服务端开启监听 ServiceHost host; private void button1_Click(object sender, EventArgs e) { host = new ServiceHost(typeof(WCFService.Service)); host.Open(); if (host.State == CommunicationState.Opened) { this.button1.Enabled = false;

完美世界自动更新程序

附件:http://url.cn/J04mZB 来自为知笔记(Wiz) 完美世界自动更新程序

winform自动更新程序实现

一.问题背景 本地程序在实际项目使用过程中,因为可以操作电脑本地的一些信息,并且对于串口.OPC.并口等数据可以方便的进行收发,虽然现在软件行业看着动不动都是互联网啊啥的,大有Web服务就是高大上的感觉,但是作为本地的应用还是有着非常重要的位置,特别是在制造业工厂里,车间里相关的程序. 抛开一切业务上的功能不谈,本地程序一直比较诟病的地方就是在于软件的更新上,由于程序都在客户端电脑上运行,当需要更新的时候,就不得不由专门的实施人员过去,部署更新,无形中增加项目成本,SO,对于c/s程序的自动更新

Winfrom强大的自动更新程序

.Net 小型软件自动更新库(SimpAutoUpdater) http://www.fishlee.net/soft/simple_autoupdater/usage.html 下载地址:https://github.com/iccfish/FSLib.App.SimpleUpdater 比较吸引的就是提供了更新包生成工具

写自动更新程序出现&quot;远程服务器返回错误: (404) 未找到&quot;

在win2003配置后,在客户端运行时能够下载exe和dll文件,但是在更新lib文件时总是报“远程服务器返回错误: (404) 未找到”错误,不明白咋会出现这个问题,去网上一查,发现以下解决办法: 发现如下方法可以解决该问题: 给网站添加MIME的类型,如下: .*application/octet-stream 按照说法做,在服务器上打开iis,找到自动升级的文件夹,查看属性,选择”HTTP头“选项卡,发现有个MIME映射选项,单击”文件类型“,再单击”新类型”,在关联扩展名里添加“.*”,

c#自动更新+安装程序的制作 (转)

c#自动更新+安装程序的制作 (转)  http://blog.csdn.net/myhuli120/article/details/6927588 一.自动更新的实现 让客户端实现自动更新,通常做法是在客户端部署一个单独的自动更新程序.主程序启动后,访问服务端,检查配置文件是 否有更新版本,有更新版本就启动更新程序,由更新负责下载更新版本,并更新客户端程序,流程如下: 当流程进行到红色部分的是后就调用更新程序进行更新. 1)版本判断: 客户端和服务端都部署同一个版本文件,客户端登陆时发送验证给

c#自动更新+安装程序的制作

一.自动更新的实现 让客户端实现自动更新,通常做法是在客户端部署一个单独的自动更新程序.主程序启动后,访问服务端,检查配置文件是否有更新版本,有更新版本就启动更新程序,由更新负责下载更新版本,并更新客户端程序,流程如下: 当流程进行到红色部分的是后就调用更新程序进行更新. 1)版本判断: 客户端和服务端都部署同一个版本文件,客户端登陆时发送验证给服务端判断版本是否一致. Version.xml代码 <iq xmlns="http://www.dynastech.com/xmtp"

分享一个自己写的简单的自动更新插件

自动更新插件通常需要三部分 1.配合需要升级的程序的一个dll 2.自动升级程序 3.打包程序 第一部分 配合主程序的dll 在这个升级程序中我将配合主程序用来校验版本号的代码封装在AutoUpdateHelper中,主要包括两个函数,一个是检查版本并自动更新CheckAndUpdate,一个是用来获取当前的版本号GetVersion 第二部分 自动升级程序 升级程序主要的步骤: 1.根据本地的update.xml中的manifest文件的远程地址下载manifest文件 2.根据本地的vers

SNF开发平台WinForm之八-自动升级程序部署使用说明-SNF快速开发平台3.3-Spring.Net.Framework

9.1运行效果: 9.2开发实现: 1.首先配置服务器端,把“SNFAutoUpdate2.0\服务器端部署“目录按网站程序进行发布到IIS服务器上. 2.粘贴语句,生成程序 需要调用的应用程序的Load事件或者Program入口的Main方法第一行代码加上如下代码: 注意:是主程序的 Load事件要加上调整自动更新程序的代码.要以模式打开窗口.如果没有差异会自动关闭升级窗口显示主窗口. 3.把下面目录里的文件拷贝到 应用程序的同级目录下: 4.配置WINFORMS应用程序目录下Updateli