DotNet 笔记

东方欲晓,莫道君起早。

C# Winform 自动更新程序实现与使用

源码下载:AutoUpdater.rar (894.81 kb)

/*
 项目介绍:
 * 
 * AutoUpdater:主要是更新对话框,下载对话框。dll形式。
 * AutoUpdaterBuilder:放于网站服务器中,每次有更新的文件,需要点击一次,生成新的AutoupdateService.xml文件。
 * AutoUpdaterDemo:测试客户端主程序例子。
 * AutoUpdaterTool:更新工具,生成后需要和主程序的生成文件合并文件夹。负责更新后启动主程序,下载更新文件等功能。
 * 
 原理:对比本地的AutoUpdater.config文件与服务器的AutoupdateService.xml文件内,同一个文件的版本号大小。

    一:建立更新服务器
    1:重新生成AutoUpdaterBuilder项目。
   
    2:新建一个网站(注意必须是动态网站,含有web.config),然后把【1步】生成的项目放入网站根目录内(pdb文件可删除)。

 
    二:对更新工具设置 服务器地址、设置启动程序名字
    3:修改AutoUpdaterTool项目内AutoUpdater.config文件ServerUrl节点,节点值为第二步网站中AutoupdateService.xml文件的网络地址。
       如: <ServerUrl>http://localhost:8833/AutoupdateService.xml</ServerUrl>
    
    4:修改AutoUpdaterTool项目内主配置文件【key="MainProgramName"】节点的值,值为:主程序(需要更新的的程序)的可执行文件名
       如:<add  key="MainProgramName" value="AutoUpdaterDemo.exe"/>,
   
 
    三:修改主程序(AutoUpdaterDemo),每次启动检查更新。
    5:修改主程序main函数,在主窗口显示前,检验是否用户手动取消更新。
       代码示例:
 
        /// <summary>
        /// 应用程序的主入口点。
        /// </summary>
        [STAThread]
        static void Main(string[] args)
        {
            ...
            ...
            var mainForm = new Form1();
            //验证是否已经取消更新了
            if (args != null && args.Length > 0)
            {
                mainForm.IsCancelUpdate = Convert.ToBoolean(args[0]);
            }
            Application.Run(mainForm);
            ...
            ...
        }
 
    6:
      a:在主程序中,首先添加一个新类:直接复制源代码AutoUpdaterDemo项目中的ClassCheckProIsRun.cs文件

      b:在主程序的 启动窗口程序中(第一个窗口程序)  添加两个变量
        /// <summary>
        /// 是否已经取消了更新
        /// </summary>
        public bool IsCancelUpdate { get; set; }


        /// <summary>
        /// 自动更新程序路径
        /// </summary>
        private readonly string autoUpdaterPath = AppDomain.CurrentDomain.BaseDirectory + "AutoUpdaterTool.exe";
        
       c:然后在添加如下代码
        /// <summary>
        /// 检测更新程序
        /// </summary>
        void CheckUpdate()
        {
            try
            {
                IAutoUpdater autoUpdater = new AutoUpdater();
                if (autoUpdater.CheckUpdate())
                {
                    if (new lib.ClassCheckProIsRun().checkProcess(autoUpdaterPath))
                    {
                        MessageBox.Show(@"更新程序已经运行!");
                        return;
                    }
                    System.Diagnostics.Process.Start(autoUpdaterPath);
                    Application.Exit();
                }
            }
            catch (Exception exception)
            {
                MessageBox.Show(exception.Message);
            }
        } 
 
       6.3 添加page_load事件,事件中实现如下代码:
        private void Form1_Load(object sender, EventArgs e)
        {
            if (!IsCancelUpdate) CheckUpdate();
        }
 
    四:整合更新程序到主程序内。
        
    7:重新生成AutoUpdaterTool项目(pdb文件可以删除)。
    
    8:成新生成主程序项目(本例中的AutoUpdaterDemo,生成后pdb文件可以删除)
    
    9:拷贝【7】生成后的项目到【8】生成后的项目中。OK!可以运行了。
 */

 

源码与示例下载:

AutoUpdater.rar (894.81 kb)

 

Loading