WinForm自动更新程序

WinForm自动更新程序

WinForm自动更新程序

刚刚开始搞Winfrom开发的小伙伴经常遇到这样一个问题:程序在公司内部广泛使用,特别是在自动化的工厂内部,在需求频繁变更的时候每次更新都是一件心态爆炸的事情,这时候一个自动更新的程序就非常有必要。
在查找了网上众多资料后,发现不是收费的,就是代码没法使用,最终决定还是自己写一个。根据网上资料学习和自身业务,完成下述代码。

思路

在用户打开程序的时候,无法直接更新本体程序,那就需要新建一个小的更新程序来进行更新的事情。

在主体程序的开始时先行判断当前版本是否为最新,不是则开始调用更新程序并关闭主体程序。更新程序完成更新后再回调主体程序。

代码

更新程序

			MaterialManageEntities db = new MaterialManageEntities();
            Thread.Sleep(5000);//此处暂停是为了等主体程序完全关闭才能删除
            string sys_path = db.System_Config.Where(x => x.Name == "Path").FirstOrDefault().Text;//获得保存在数据库的下载路径
            var list = db.File_Path.ToList();
            foreach (var info in list)//删除旧的文件
            {
                FileInfo file = new FileInfo(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, info.Name));
                file.Delete();
            }

            WebClient wc = new WebClient();
            foreach (var info in list)
            {
                wc.DownloadFile(new Uri(sys_path + info.Name), info.Name);//要下载文件的路径,下载之后的命名
            }
            string path = Application.StartupPath + "\\";
            System.Diagnostics.Process process = new System.Diagnostics.Process();
            process.StartInfo.FileName = "主体项目.exe";
            process.StartInfo.WorkingDirectory = path;//要掉用得exe路径例如:"C:\windows";               
            process.StartInfo.CreateNoWindow = true;
            process.Start();
            Application.Exit();

主体中如何调用

 //根据电脑的MAC地址从数据库得到该电脑对应的版本号,这是由于之前的业务决定的,如果不需要统一管理,可以采取本地XML文件记录
            MaterialManageEntities db = new MaterialManageEntities();//这块使用的是微软自带的ADO.NET连接数据库,可以改成你们习惯的写法
            //获得MAC地址
            string macAddr = PublicMethod.MachineMac();

            var machine = db.MES_MachineMacList.Where(x => x.MachineMac == macAddr).FirstOrDefault();
            var version = db.System_Config.Where(x => x.Name == "Version").FirstOrDefault().Text;
            if (machine != null)//判断是否有记录授权
            {
                if (machine.IsBan == false)
                {
                    if (machine.Version.ToString() == version)//判断版本号
                    {

                        Application.EnableVisualStyles();
                        Application.SetCompatibleTextRenderingDefault(false); 
                        Login fl = new Login();
                        fl.ShowDialog();
                        if (fl.DialogResult == DialogResult.OK)
                        {
                            Application.Run(new Form1());
                        }

                    }
                    else
                    {
                        if (MessageBox.Show("检查到新版本,是否更新?", "Update", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)
                        {
                            machine.Version = int.Parse(version);
                            db.SaveChanges();
                            //更新
                            string fileName = Application.StartupPath + @"\update.exe";
                            Process p = new Process();
                            p.StartInfo.UseShellExecute = false;
                            p.StartInfo.RedirectStandardOutput = true;
                            p.StartInfo.FileName = fileName;
                            p.StartInfo.CreateNoWindow = true;
                            p.StartInfo.Arguments = "";//参数以空格分隔,如果某个参数为空,可以传入””
                            p.Start();
                            System.Environment.Exit(System.Environment.ExitCode);   //结束主线程
                            //string output = p.StandardOutput.ReadToEnd(); //this.Dispose();//关闭主程序
                        }
                    }
                }
                else
                {
                    MessageBox.Show("请联系IT授权");
                }
            }
            else
            {
                Application.EnableVisualStyles();
                Application.SetCompatibleTextRenderingDefault(false);
                Form1 fl = new Form1();//此处应打开注册页
                fl.ShowDialog();

            }

结尾

该更新程序可以改为7z压缩下载后再解压的方式,可以免去文件列表和部分文件不好下载的问题,作者太忙没来得及去改(其实是比较懒。。。),如有哪位大佬修改完成请提供参考下。

  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
一、软件开发环境以及开发工具: 框架:.NET Framework 4.0 工具:Visual Studio 2017 插件:DevExpress 18.1.7 环境:IIS 7 二、实现步骤 (1)在项目中创建一个名为WinformAutoUpdate.APP的Winform窗体应用工程,并将默认的Form1.cs窗体文件重命名为MainFrm.cs作为主程序窗体 创建主程序窗体 (2)在项目中再创建一个名为AutoUpdateTask的Winform应用程序工程,并将默认的Form1.cs窗体文件重命名为AutoUpdateTaskFrm.cs作为更新程序窗体 创建更新程序窗体 (3)在更新程序窗体中放入图上所示的相关控件; 进度条控件用于显示更新进度,放入一个Button按钮控件用于用户根据提示进行操作! 实现思路: 1、将更新程序放入磁盘的目录下面,并将其放在已经发布了的IIS中 当用户在运行主程序窗体并点击左上角的更新按钮时,弹出程序更新窗体,并先自动从IIS中拉取updateList.xml文件,然后与本地程序作对比,检测是否需要升级软件; 如果有新版本发布,则点击“立即更新”按钮,程序将从IIS中拉取新发布的ZIP软件包,并自动解压到主程序目录中,覆盖主程序目录中的相关文件(这里值得注意的是,在解压程序之前,我们需要先结束主程序的进程,不然会因主程序进程正在使用而导致报错,另外,我们用到的插件是ICSharpCode.SharpZipLib.dll第三方动态链接库,网上有现成的,可以直接Down下来用);

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值