您的位置:首页 > 其它

inform自动更新程序扫盲贴

2014-03-18 19:15 106 查看
这是自动更新是单独的一个exe 可能有童鞋要问 为啥子是单独一个exe呢 俺的思路是这样 这个exe根据版本号从服务端下载程序 下载完成后 替换主程序的exe 并重新启动主程序exe
看看这个autoupdate的代码吧 
主要如下 这里提供一个思路


程序代码:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using Update;
using System.Threading;
using System.IO;
using System.Runtime.InteropServices;
namespace autoUpdate

{

    public partial class Form1 : Form

    {

        [DllImport("zipfile.dll")]

        public static extern int MyZip_ExtractFileAll(string zipfile, string pathname);

        public Form1()

        {

            InitializeComponent();

            //清除之前下载来的rar文件
            if (File.Exists(Application.StartupPath + "\\Update_autoUpdate.rar"))

            {

                try

                {

                    File.Delete(Application.StartupPath + "\\Update_autoUpdate.rar");

                }

                catch (Exception)

                {

                }

            }

            if (Directory.Exists(Application.StartupPath + "\\autoupload"))

            {

                try

                {

                    Directory.Delete(Application.StartupPath + "\\autoupload", true);

                }

                catch (Exception)

                {

                }

            }

           

            //检查服务端是否有新版本程序
            checkUpdate();

            timer1.Enabled = true;

        }

        SoftUpdate app = new SoftUpdate(Application.ExecutablePath, "xinDianClient");

        public void checkUpdate()

        {

            app.UpdateFinish += new UpdateState(app_UpdateFinish);

            try

            {

                if (app.IsUpdate)

                {

                    app.Update();

                }

                else

                {

                    MessageBox.Show("未检测到新版本!");

                    Application.Exit();

                }

            }

            catch (Exception ex)

            {

                MessageBox.Show(ex.Message);

            }

        }

        void app_UpdateFinish()

        {

            //解压下载后的文件
            string path = app.FinalZipName;

            if (File.Exists(path))

            {

                 //后改的 先解压滤波zip植入ini然后再重新压缩
                string dirEcgPath = Application.StartupPath + "\\" + "autoupload";

                if (!Directory.Exists(dirEcgPath))

                {

                    Directory.CreateDirectory(dirEcgPath);

                }

                //开始解压压缩包
                MyZip_ExtractFileAll(path, dirEcgPath);

                try

                {

                    //复制新文件替换旧文件
            
4000
        DirectoryInfo TheFolder = new DirectoryInfo(dirEcgPath);

                    foreach (FileInfo NextFile in TheFolder.GetFiles())

                    {

                        File.Copy(NextFile.FullName, Application.StartupPath + "\\program\\" + NextFile.Name, true);

                    }

                    Directory.Delete(dirEcgPath,true);

                    File.Delete(path);

                    //覆盖完成 重新启动程序
                    path = Application.StartupPath + "\\program";

                    System.Diagnostics.Process process = new System.Diagnostics.Process();

                    process.StartInfo.FileName = "xinDianClient.exe";

                    process.StartInfo.WorkingDirectory = path;//要掉用得exe路径例如:"C:\windows";               
                    process.StartInfo.CreateNoWindow = true;

                    process.Start();

                    Application.Exit();

                }

                catch (Exception)

                {

                    MessageBox.Show("请关闭系统在执行更新操作!");

                    Application.Exit();

                }

               

            

               

            }

        }

        private void timer1_Tick(object sender, EventArgs e)

        {

            label2.Text = "下载文件进度:" + COMMON.CommonMethod.autostep.ToString() + "%";

            if (COMMON.CommonMethod.autostep==100)

            {

                timer1.Enabled = false;

            }

        }

    }

}
http://www.anjuke.com/sale/rd1/?kw=2014%E5%B9%B4%E6%BE%B3%E9%97%A8%E5%BD%A9%E7%A5%A8%E5%8D%9A%E5%BD%A9%E7%BD%91%e2%98%85%e7%99%be%e5%ba%a6%e6%8e%a8%e8%8d%90%e2%98%85%e3%80%9068LB.COM%e3%80%91%e2%98%85%e5%a4%8d%e5%88%b6%e6%89%93%e5%bc%80%e2%98%85 http://www.anjuke.com/sale/rd1/?kw=2014%E5%B9%B4%E6%96%B0%E6%BE%B3%E9%97%A8%E5%A8%B1%E4%B9%90%E5%9F%8E%E5%8D%9A%E5%BD%A9%E7%BD%91%e2%98%85%e7%99%be%e5%ba%a6%e6%8e%a8%e8%8d%90%e2%98%85%e3%80%9068LB.COM%e3%80%91%e2%98%85%e5%a4%8d%e5%88%b6%e6%89%93%e5%bc%80%e2%98%85 http://www.anjuke.com/sale/rd1/?kw=2014%E5%B9%B4%E4%B9%90%E9%80%8F%E4%B9%90%E5%8D%9A%E5%BD%A9%E7%BD%91%e2%98%85%e7%99%be%e5%ba%a6%e6%8e%a8%e8%8d%90%e2%98%85%e3%80%9068LB.COM%e3%80%91%e2%98%85%e5%a4%8d%e5%88%b6%e6%89%93%e5%bc%80%e2%98%85 http://www.anjuke.com/sale/rd1/?kw=2014%E5%B9%B4%E9%A1%B6%E5%B0%96%E5%8D%9A%E5%BD%A9%E7%BD%91%e2%98%85%e7%99%be%e5%ba%a6%e6%8e%a8%e8%8d%90%e2%98%85%e3%80%9068LB.COM%e3%80%91%e2%98%85%e5%a4%8d%e5%88%b6%e6%89%93%e5%bc%80%e2%98%85 http://www.anjuke.com/sale/rd1/?kw=2014%E5%B9%B4%E5%8D%9A%E5%BD%A9%E7%BD%91qx5%e2%98%85%e7%99%be%e5%ba%a6%e6%8e%a8%e8%8d%90%e2%98%85%e3%80%9068LB.COM%e3%80%91%e2%98%85%e5%a4%8d%e5%88%b6%e6%89%93%e5%bc%80%e2%98%85 http://www.anjuke.com/sale/rd1/?kw=2014%E5%B9%B4%E4%BA%9A%E6%B4%B2%E5%8D%9A%E5%BD%A9%E7%BD%91%e2%98%85%e7%99%be%e5%ba%a6%e6%8e%a8%e8%8d%90%e2%98%85%e3%80%9068LB.COM%e3%80%91%e2%98%85%e5%a4%8d%e5%88%b6%e6%89%93%e5%bc%80%e2%98%85
SoftUpdate是一个下载操作类


程序代码:

using System;
using System.Collections.Generic;
using System.Text;
using System.Reflection;
using System.IO;
using System.Net;
using System.Xml;
using COMMON;

namespace Update

{

    /// <summary>  

    /// 更新完成触发的事件  

    /// </summary>  
    public delegate void UpdateState();

    /// <summary>  

    /// 程序更新  

    /// </summary>  
    public class SoftUpdate

    {

        private string download;

        private const string updateUrl = "http://33.8.11.117:8019/update.xml";//升级配置的XML文件地址  

        #region 构造函数

        public SoftUpdate() { }

        /// <summary>  

        /// 程序更新  

        /// </summary>  

        /// <param name="file">要更新的文件</param>  
        public SoftUpdate(string file, string softName)

        {

            this.LoadFile = file;

            this.SoftName = softName;

        }

        #endregion

        #region 属性

        private string loadFile;

        private string newVerson;

        private string softName;

        private bool isUpdate;

        /// <summary>  

        /// 或取是否需要更新  

        /// </summary>  
        public bool IsUpdate

        {

            get

            {

                checkUpdate();

                return isUpdate;

            }

        }

        /// <summary>  

        /// 要检查更新的文件  

        /// </summary>  
        public string LoadFile

        {

            get { return loadFile; }

            set { loadFile = value; }

        }

        /// <summary>  

        /// 程序集新版本  

        /// </summary>  
        public string NewVerson

        {

            get { return newVerson; }

        }

        /// <summary>  

        /// 升级的名称  

        /// </summary>  
        public string SoftName

        {

            get { return softName; }

            set { softName = value; }

        }

        private string _finalZipName = string.Empty;

        public string FinalZipName

        {

            get { return _finalZipName; }

            set { _finalZipName = value; }

        }

        #endregion

        /// <summary>  

        /// 更新完成时触发的事件  

        /// </summary>  
        public event UpdateState UpdateFinish;

        private void isFinish()

        {

            if (UpdateFinish != null)

                UpdateFinish();

        }

        /// <summary>  

        /// 下载更新  

        /// </summary>  
        public void Update()

        {

            try

            {

                if (!isUpdate)

                    return;

                WebClient wc = new WebClient();

                string filename = "";

                string exten = download.Substring(download.LastIndexOf("."));

                if (loadFile.IndexOf(@"\") == -1)

                    filename = "Update_" + Path.GetFileNameWithoutExtension(loadFile) + exten;

                else

                    filename = Path.GetDirectoryName(loadFile) + "\\Update_" + Path.GetFileNameWithoutExtension(loadFile) + exten;

                FinalZipName = filename;

                //wc.DownloadFile(download, filename);
                wc.DownloadFileAsync(new Uri(download), filename);

                wc.DownloadProgressChanged += new DownloadProgressChangedEventHandler(wc_DownloadProgressChanged);

                wc.DownloadFileCompleted += new System.ComponentModel.AsyncCompletedEventHandler(wc_DownloadFileCompleted);

                //wc.Dispose();
             

            }

            catch

            {

                throw new Exception("更新出现错误,网络连接失败!");

            }

        }

        void wc_DownloadFileCompleted(object sender, System.ComponentModel.AsyncCompletedEventArgs e)

        {

            (sender as WebClient).Dispose();

            isFinish();

        }

        void wc_DownloadProgressChanged(object sender, DownloadProgressChangedEventArgs e)

        {

            CommonMethod.autostep = e.ProgressPercentage;

        }

        /// <summary>  

        /// 检查是否需要更新  

        /// </summary>  
        public void checkUpdate()

        {

            try

            {

                WebClient wc = new WebClient();

                Stream stream = wc.OpenRead(updateUrl);

                XmlDocument xmlDoc = new XmlDocument();

                xmlDoc.Load(stream);

                XmlNode list = xmlDoc.SelectSingleNode("Update");

                foreach (XmlNode node in list)

                {

                    if (node.Name == "Soft" && node.Attributes["Name"].Value.ToLower()
== SoftName.ToLower())

                    {

                        foreach (XmlNode xml in node)

                        {

                            if (xml.Name == "Verson")

                                newVerson = xml.InnerText;

                            else

                                download = xml.InnerText;

                        }

                    }

                }

                Version ver = new Version(newVerson);

                Version verson = Assembly.LoadFrom(loadFile).GetName().Version;

                int tm = verson.CompareTo(ver);

                if (tm >= 0)

                    isUpdate = false;

                else

                    isUpdate = true;

            }

            catch (Exception ex)

            {

                throw new Exception("更新出现错误,请确认网络连接无误后重试!");

            }

        }

        /// <summary>  

        /// 获取要更新的文件  

        /// </summary>  

        /// <returns></returns>  
        public override string ToString()

        {

            return this.loadFile;

        }

    }

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: