zoukankan      html  css  js  c++  java
  • C#在线更新程序[下载程序、解压缩程序、控制台程序]

    【1】下载文件

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.IO;
    using System.Net;

    namespace XuanWu.Software.EasyInfo.Interface.Update
    {
        public class DownloadThread
        {
            #region DownLoadOneFile(下载单个文件)
            /// <summary>
            /// 下载文件
            /// </summary>
            /// <param name="url">下载地址</param>
            /// <param name="filePath">保存路径</param>
            /// <returns></returns>
            public bool DownLoadOneFile(string url, string filePath)
            {
                FileStream fstream = new FileStream(filePath, FileMode.Create, FileAccess.Write);
                WebRequest wRequest = WebRequest.Create(url);
                try
                {
                    WebResponse wResponse = wRequest.GetResponse();
                    int contentLength = (int)wResponse.ContentLength;

                    byte[] buffer = new byte[Properties.Settings.Default.byte_size];

                    ///备注:Properties.Settings.Default.byte_size是从配置文件中读取的
                    int read_count = 0;
                    int total_read_count = 0;
                    bool complete = false;

                    System.Console.WriteLine("开始下载文件....");

                    while (!complete)
                    {
                        read_count = wResponse.GetResponseStream().Read(buffer, 0, buffer.Length);
                        if (read_count > 0)
                        {
                            fstream.Write(buffer, 0, read_count);
                            total_read_count += read_count;
                            if (total_read_count <= contentLength)
                                System.Console.Write(".");
                        }
                        else
                        {
                            complete = true;
                            System.Console.WriteLine("");
                            System.Console.WriteLine("下载完成!开始安装!");

                        }
                    }
                    fstream.Flush();
                    return true;
                }
               catch(Exception ex)
                {
                    throw ex;
                 }
                finally
                {
                    fstream.Close();
                    wRequest = null;
                }
            }
           #endregion

        }
    }

    【2】解压缩文件

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.IO;
    using ICSharpCode.SharpZipLib.Zip;

    namespace XuanWu.Software.EasyInfo.Interface.Update
    {
        public class UnZipClass
        {
            private byte[] byffer = new byte[Properties.Settings.Default.byte_size];

             ///备注:Properties.Settings.Default.byte_size是从配置文件中读取的

            /// <summary>
            /// 有参构造函数
            /// </summary>
            /// <param name="buffserSize">缓冲大小</param>
            public UnZipClass(int buffserSize)
            { 
                byffer = new byte[buffserSize];
            }

            /// <summary>
            /// 无参构造函数
            /// </summary>
            public UnZipClass()
            { }

            /// <summary>
            /// 解压缩文件
            /// </summary>
            /// <param name="zipFilePath">压缩文件路径</param>
            /// <param name="unZipFilePath">解压缩文件路径</param>
            public void UnZipFile(string zipFilePath, string unZipFilePath)
            {
                using (ZipInputStream zipstream = new ZipInputStream(File.OpenRead(zipFilePath)))
                {
                    ZipEntry zipEntry = null;
                    while ((zipEntry = zipstream.GetNextEntry()) != null)
                    {
                        string fileName = Path.GetFileName(zipEntry.Name);
                        if (!string.IsNullOrEmpty(fileName))
                        {
                            if (zipEntry.CompressedSize == 0)
                                break;

                            using (FileStream stream = File.Create(unZipFilePath + fileName))
                            {
                                while (true)
                                {
                                    int size = zipstream.Read(byffer, 0, byffer.Length);
                                    if (size > 0)
                                        stream.Write(byffer, 0, size);
                                    else break;
                                }
                            }
                        }
                    }
                }
            }

            /// <summary>
            /// 解压缩目录
            /// </解压缩目录summary>
            /// <param name="zipDirectoryPath">压缩目录路径</param>
            /// <param name="unZipDirectoryPath">解压缩目录路径</param>
            public void UnZipDirectory(string zipDirectoryPath, string unZipDirectoryPath)
            { 
                using(ZipInputStream zipStream = new ZipInputStream(File.OpenRead(zipDirectoryPath)))
                {
                    ZipEntry zipentry = null;
                    while ((zipentry = zipStream.GetNextEntry()) != null)
                    {
                        string directoryName = Path.GetDirectoryName(zipentry.Name);
                        string fileName = Path.GetFileName(zipentry.Name);

                        if (!string.IsNullOrEmpty(directoryName))
                        {
                            Directory.CreateDirectory(directoryName);
                        }

                        if (!string.IsNullOrEmpty(fileName))
                        {
                            if (zipentry.CompressedSize == 0)
                                break;
                            if (zipentry.IsDirectory)
                            {
                                directoryName = Path.GetDirectoryName(unZipDirectoryPath + zipentry.Name);
                                Directory.CreateDirectory(directoryName);
                            }

                            using (FileStream stream = File.Create(unZipDirectoryPath + zipentry.Name))
                            {
                                while (true)
                                {
                                    int size = zipStream.Read(byffer, 0, byffer.Length);
                                    if (size > 0)
                                        stream.Write(byffer, 0, size);
                                    else break;
                                }
                            }

                        }
                    }
                }
            }

        }
    }

    【3】控制台应用程序

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Net;
    using System.Diagnostics;
    using System.IO;
    using XuanWu.Software.EasyInfo.Model;
    using XuanWu.Software.EasyInfo.Service.elsp_da;

    namespace XuanWu.Software.EasyInfo.Interface.Update
    {
        class Program
        {
            static void Main(string[] args)
            {

                Protocol.ProtocolRegister.RegisterProcotols();

                string path = "http://" + Properties.Settings.Default.urlServerIP + ":" + Properties.Settings.Default.urlServerPort + "/soft/";

    ///备注:Properties.Settings.Default.urlServerIP和Properties.Settings.Default.urlServerPort 是从配置文件中读取的
                string Version = Properties.Settings.Default.Version;   ///版本号
                string buildno = Properties.Settings.Default.buildno;   ///版本状态
                string clienttypeno = Properties.Settings.Default.clienttypeno;  ///版本类型

    ///备注:上面3个变量的赋值都是从配置文件中取的。
                try
                {

                    ///从本地文件中读取值,如果没有存在文件,报错跳出Try语句.Application.StartupPath + "//Version.bt");

                   

                    buildno = File.ReadAllText(System.Windows.Forms.Application.StartupPath + "//buildno.bt");

                    clienttypeno = File.ReadAllText(System.Windows.Forms.Application.StartupPath + "//clienttypeno.bt");
                }
                catch { }
                updatesoftwareobj updatesfoj = getsoftwareobj(Convert.ToInt32(buildno), Convert.ToInt32(Version), Convert.ToInt32(clienttypeno));

    ///备注:updatesoftwareobj 实体对象
                if (updatesfoj != null)
                {
                    path += updatesfoj.updateurl;
                    int versionstatus = updatesfoj.versionstatus;
                    string  serverVersion = updatesfoj.versionno.ToString();
                    string serverbuildno = updatesfoj.buildno.ToString();
                    string serverclienttypeno = updatesfoj.clienttypeno.ToString();
                    try
                    {
                        if (Convert.ToInt32(serverbuildno)> Convert.ToInt32(buildno))
                        {
                            System.Console.WriteLine("开始升级....");
                            System.Console.WriteLine("————————————————————————");
                            System.Console.WriteLine("开始下载......");
                            DownloadThread down = new DownloadThread();
                            down.DownLoadOneFile(path, System.Windows.Forms.Application.StartupPath + "//updata.zip");
                            System.Console.WriteLine("————————————————————————");
                            System.Console.WriteLine("开始更新......");
                            UnZipClass unzip = new UnZipClass();
                            unzip.UnZipFile(System.Windows.Forms.Application.StartupPath + "//updata.zip", System.Windows.Forms.Application.StartupPath + "//");
                            unzip.UnZipDirectory(System.Windows.Forms.Application.StartupPath + "//updata.zip", System.Windows.Forms.Application.StartupPath + "//");
                            File.Delete(System.Windows.Forms.Application.StartupPath + "//updata.zip");
                            System.Console.WriteLine("更新完成!");
                            System.Console.WriteLine("————————————————————————");
                            System.Console.WriteLine("启动服务程序!");
                            File.WriteAllText(System.Windows.Forms.Application.StartupPath + "//Version.bt", serverVersion);
                            File.WriteAllText(System.Windows.Forms.Application.StartupPath + "//buildno.bt", serverbuildno);
                            File.WriteAllText(System.Windows.Forms.Application.StartupPath + "//clienttypeno.bt", serverclienttypeno);
                            Process.Start(System.Windows.Forms.Application.StartupPath + "//某服务.exe");
                        }
                    }
                    catch (Exception ex)
                    {
                        File.WriteAllText(System.Windows.Forms.Application.StartupPath + "//installLog.erroe", ex.ToString());
                        System.Console.WriteLine(ex.ToString());
                    }
                }
            }

            /// <summary>
            ///端版本号及版本号获取是否有相应的更新信息
            /// </summary>
            /// <param name="buildno"></param>
            /// <param name="versionno"></param>
            /// <param name="clienttypeno"></param>
            /// <returns></returns>
            private static updatesoftwareobj getsoftwareobj(int buildno, int versionno, int clienttypeno)
            {
                DateSourceSystemService datasystesv = new DateSourceSystemService(IPAddress.Parse(Properties.Settings.Default.ServerIP), Properties.Settings.Default.ServerPort);
                updatesoftwareobj updatestobj = datasystesv.getbymodelversion(buildno,versionno,clienttypeno);
                return updatestobj;
            }
        }
    }

     
  • 相关阅读:
    docker 批量删除
    ML
    hdu 1465:不容易系列之一(递推入门题)
    sdut 2162:The Android University ACM Team Selection Contest(第二届山东省省赛原题,模拟题)
    sdut 2163:Identifiers(第二届山东省省赛原题,水题)
    hdu 2108:Shape of HDU(计算几何,判断多边形是否是凸多边形,水题)
    hrbustoj 1545:基础数据结构——顺序表(2)(数据结构,顺序表的实现及基本操作,入门题)
    hdu 1312:Red and Black(DFS搜索,入门题)
    hrbustoj 1429:凸多边形(计算几何,判断点是否在多边形内,二分法)
    poj 1113:Wall(计算几何,求凸包周长)
  • 原文地址:https://www.cnblogs.com/zxtceq/p/5667526.html
Copyright © 2011-2022 走看看