`
net_liu
  • 浏览: 233009 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

程序动态升级版本

阅读更多

C#实现程序动态升级版本。通过反射获取本地版本,然后跟服务器中的版本进行对比,从而实现版本更新。(参考别人的,供自己记忆和参看)

 

 

1.把代码编译为一个类库文件,通过程序引用

namespace SoftUpdate
{

    /// <summary>   
    /// 更新完成触发的事件   
    /// </summary>   
    public delegate void UpdateState();

    /// <summary>   
    /// 程序更新   
    /// </summary> 
    public class Update
    {
        private string download;
        private const string updateUrl = @"d:\update.xml";//升级配置的XML文件地址  

        #region 构造函数
        public Update() { }

        /// <summary>   
        /// 程序更新   
        /// </summary>   
        /// <param name="file">要更新的文件</param>   
        public Update(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; }
        }

        #endregion

        /// <summary>   
        /// 更新完成时触发的事件   
        /// </summary>   
        public event UpdateState UpdateFinish;
        private void isFinish()
        {
            if (UpdateFinish != null)
                UpdateFinish();
        }

        /// <summary>   
        /// 下载更新   
        /// </summary>   
        public void UpdateMethod()
        {
            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;
                wc.DownloadFile(download, filename);
                wc.Dispose();
                isFinish();
            }
            catch
            {
                throw new Exception("更新出现错误,网络连接失败!");
            }
        }

        /// <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;
        }
    }
}

 

 

2.XML文件类容

<?xml version="1.0" encoding="utf-8" ?>    
<Update>  
   <Soft Name="BlogWriter">  
     <Verson>1.0.1.2</Verson>    
     <DownLoad>D:\ilyin\Socket.rar</DownLoad>    
  </Soft>  
</Update> 

 

 

3.单击事件里面调用下面的方法:

  public void checkUpdate()   
        {   
            SoftUpdate app = new SoftUpdate(Application.ExecutablePath, "BlogWriter");   
            app.UpdateFinish += new UpdateState(app_UpdateFinish);   
            try  
            {   
                if (app.IsUpdate && MessageBox.Show("检查到新版本,是否更新?", "Update", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)   
                {   
  
                    Thread update = new Thread(new ThreadStart(app.Update));   
                    update.Start();   
                }   
            }   
            catch (Exception ex)   
            {   
                MessageBox.Show(ex.Message);   
            }   
        }   
  
        void app_UpdateFinish() {   
                MessageBox.Show("更新完成,请重新启动程序!", "Update", MessageBoxButtons.OK, MessageBoxIcon.Information);   
        }   

 

分享到:
评论

相关推荐

    JAVA项目更新升级程序

    6. **部署流程**:有效的升级程序会有一套规范的部署流程,包括备份当前状态、安装新版本、验证新版本功能、切换到新版本以及回滚机制。这个流程需要自动化和脚本化,以减少人为错误和提高效率。 7. **测试**:在...

    C#WinForm自动升级程序源代码

    3. **AutoUpt升级程序**:这是实际的自动升级程序可执行文件,可能包含主逻辑、UI界面以及与服务器通信的代码,负责检查新版本、下载更新包并安装。 4. **DLL**:通常,DLL(动态链接库)文件包含可重用的代码模块...

    PB程序自动升级,检测版本自动更新程序

    PB程序自动升级与检测版本自动更新程序是一种常见的软件维护策略,尤其在企业级应用中,以确保用户始终运行的是最新、最安全的软件版本。PB是PowerBuilder的缩写,这是一种由Sybase(现为SAP)开发的可视化编程工具...

    版本自动升级程序修补版

    10. **DMM.AddUpdater**:这个文件名可能是升级程序的组件或模块,可能用于实现特定的升级功能,如动态加载更新、管理更新文件等。 综上所述,"版本自动升级程序修补版"意味着开发者针对之前的自动升级程序进行了...

    Delphi程序自动升级软件

    本文将深入探讨如何利用Delphi开发一个程序自动升级系统,该系统适用于Delphi XE10及更高版本,并基于VCL(Visual Component Library)框架。 自动升级系统通常由以下几个核心组件组成: 1. **升级服务器**:这是...

    c语言实现最精简自动升级程序

    本程序精简最小化。 配置文件示例: ;FileShow [cfg] ;当前版本 Version = 1.0.3 ;升级文件总数量 Files = 1 ;文件1 [f1] ;文件名,在工程中的相对路径 FileName = ./FileShow.exe ;文件MD5 FileMD5 = ;文件Url ...

    andorid 实现程序版本更新升级

    在Android平台上,实现程序的更新升级是每个应用开发者必须面对的重要任务。这涉及到用户能够方便地获取新版本,以及在后台或前台无缝地完成安装过程。以下是对Android应用程序更新升级的关键知识点的详细说明: 1....

    Android程序如何升级.zip

    在Android平台上,应用程序的升级是一个常见且重要的过程,它涉及到版本控制、安装更新以及用户数据的处理。本文将深入探讨Android程序的升级机制,包括自动更新、手动更新、APK安装流程、版本管理以及如何处理用户...

    让.NET程序兼容不同版本的Dll文件

    对于那些未使用强名称签名的库,开发者可以考虑使用`Assembly.Load`方法在运行时动态加载指定版本的DLL,或者通过修改项目引用的路径来确保加载最新的DLL版本。但这通常不推荐,因为它可能导致难以跟踪和管理依赖...

    无法定位程序输入点于动态链接库上的问题1

    在开发和部署基于Qt的软件时,可能会遇到“无法定位程序输入点于动态链接库上”的问题。这个错误通常表明程序在运行时找不到它依赖的一些动态链接库(DLLs)。以下是一个详细的分析和解决此类问题的步骤: 1. **...

    修改程序版本信息

    最后,测试修改后的程序以确保其功能未受任何影响,特别是当版本信息被用于动态加载或依赖管理时。发布新版本时,确保更新相关的文档、安装包描述以及市场平台上的信息,提供给用户清晰的版本升级指引。 总之,修改...

    android app自动升级demo

    - 自动升级涉及到网络访问和存储读写,需要在`AndroidManifest.xml`中添加`INTERNET`和`WRITE_EXTERNAL_STORAGE`权限(对于Android 6.0及以上,还需要在运行时动态申请权限)。 8. **处理异常情况**: - 实际开发...

    通过数据库客户端自动升级程序

    1. **自动升级**:这是指程序能自动检测并应用新版本,减轻用户的维护负担。 2. **数据库**:在此上下文中,数据库可能用于存储软件更新的元数据,比如新版本信息、更新脚本等,客户端通过查询数据库来检查更新。 3....

    asp.net(c#)程序版本升级更新的实现代码

    在***(C#)环境下,为了保证程序的持续运行与功能改进,经常会遇到需要对现有程序进行版本升级的情况。自动更新功能的实现,可减少手动更新的繁琐,提高软件维护效率。以下将从多个方面详细介绍***(c#)程序版本升级...

    中学学习家V1.5版主程序升级

    4. **学习数据分析**:新版本可能增强了数据收集和分析功能,能够更精准地跟踪学生的学习动态,为教师和家长提供详细的学习报告,以便更好地了解学生的学习状态。 5. **教育资源更新**:随着版本升级,软件内包含的...

    XML方式升级程序_XML方式升级程序源码_

    1. **版本控制**:升级程序会自动识别当前安装的版本号,这通常通过读取应用程序或安装目录下的XML文件来实现。XML文件可以包含版本信息,如主版本号、次版本号、修订版号等。 2. **XML结构**:XML文件可能设计成...

    ftp自动升级程序

    标题中的“ftp自动升级程序”指的是一个利用FTP(File Transfer Protocol)协议实现的软件自动更新功能。FTP是一种标准网络协议,用于在Internet上在客户端和服务器之间进行文件传输。在这个程序中,它被用于检查和...

    glibc-2.28编译时版本过低,进行升级make-4.3版本

    在本例中,由于glibc的版本为2.28,可能无法满足某个程序或更新软件对更高版本glibc的需求,因此需要进行升级。同时,make工具作为构建系统的重要部分,用于自动化编译过程,其版本4.3也可能是为了适应新需求而更新...

    Android应用源码之程序如何升级.zip

    在Android应用开发中,程序升级是一项重要的功能,它允许开发者发布新版本的软件来修复问题、添加新功能或提升用户体验。本压缩包“Android应用源码之程序如何升级.zip”包含了一个示例项目,用于展示如何实现...

    Android app升级程序

    通过以上步骤,我们可以构建一个完整的APP升级Demo,让应用程序能够自动或手动检查并安装新版本。这个Demo对于开发者来说是一个很好的学习资源,帮助理解Android应用升级的完整流程。在实践中,还应注意遵循最佳实践...

Global site tag (gtag.js) - Google Analytics