【C#】在线更新--解压

版权声明:我的博客我做主! https://blog.csdn.net/lk1822791193/article/details/85603721

上一篇博客,分享了如何通过程序下载服务器中的更新文件,这次我为大家分享一下,如何将下载好的更新文件的压缩包解压并替换掉之前的文件。

1.由于我们设定的是程序关闭之后提醒用户,是否更新软件,所以我们需要将解压的程序独立出来,否则,更新程序和执行的程序同时执行会导致,无法替换旧版本的系统。

2.由于解压程序和系统程序分离,所以我们解压之前,需要判断(与服务器的版本号进行对比),是否触发解压程序。

解压代码(解压程序中):

        /// <summary>
        /// 更新文件成功方法(返回true/false)
        /// </summary>
        /// <param name="dir">本地程序运行路径</param>
        /// <param name="zipfile">本地压缩文件路径</param>
        /// <returns></returns>
        public bool Replace()
        {
            //创建服务客户端
            UpdateServiceClient client = new UpdateServiceClient();
            //接受服务器的版本等信息
            List<string> stringList = client.SelectVersion();
            //文件名
            string fileName = stringList[1].ToString();

            // GetCurrentDirectory
            // 摘要:获取应用程序的当前工作目录
            // 返回结果:包含当前工作目录的路径且不以反斜杠 (\) 结尾的字符串。
            string dir = Directory.GetCurrentDirectory();
            //压缩包的路径
            string zipfile = Path.Combine(dir, fileName + ".zip");
            //当前工作目录中新建临时文件NewVersion存放新版本文件
            string extractPath = Path.Combine(dir,"version");
            //解压缩文件到NewVersion中
            ZipFile.ExtractToDirectory(zipfile, extractPath);

            //遍历所有解压出来的文件
            foreach (string item in Directory.GetFiles(extractPath))
            {
                //把文件更新到程序运行路径
                File.Copy(item, System.IO.Path.Combine(dir, System.IO.Path.GetFileName(item)), true);
            }
            //删除压缩包
            File.Delete(zipfile);
            DirectoryInfo di = new DirectoryInfo((extractPath));
            //删除临时文件夹
            di.Delete(true);
            return true;

        }

系统退出的方法中添加启动解压程序(运行程序中):

        // 获取当前执行程序的路径
        string dir = Directory.GetCurrentDirectory();
        // 实例化下载类
        DownLoad dl = new DownLoad();
        // 判断是否有版本
        // isUpdate方法去判断是否需要更新
        // 此方法上片博客里有方法体
        if (dl.IsUpdate())
        {
            // 启动一个新的程序
            Process unZip;
            // 程序的路径和名字
            unZip= Process.Start(dir + "\\update" + ".exe");
        }

大家需要注意的就是:我们需要把解压程序中生成的exe以及所需的dll拷贝到运行程序bin中的debug文件中(与Process.Start()中的路径相同就可以)。

核心代码的话就这些了,关于服务器的设置,可以将更新的文件打成压缩包,然后发布到IIS服务上,然后使用ftp协议进行传输,这样可能不太安全,所以也可以同nigx反向代理,将压缩包方法网站上,通过http协议进行传输。

小编只是简单总结实现,如有不足,欢迎大神指点!

猜你喜欢

转载自blog.csdn.net/lk1822791193/article/details/85603721