您的位置:首页 > 编程语言 > C#

C#实现在线更新系统

2017-04-05 19:12 246 查看
http://www.cnblogs.com/skylgmg/p/4792990.html

先来看一下程序完成后长什么样。





这个是程序的组成部分。





 

主要功能是在InitializationUpdate这个类中完成的,From1主要起到调用的作用,所以重心还是在InitializationUpdate这个类上,下面我们来看一下这个类完成了什么工作,都是如何完成的。

先调用两个类:

        //使用WebClient下载

        public WebClient client = new WebClient();

待会儿下载更新文件要用到

 

还有几个全局变量

        //当前版本

        public string localversion = null;

        //最新版本

        public string latesversion = null;

        //主窗体

        public Form1 form;

        //通知内容

        public string nnidtext = null;

 

        //获取本地版本号

        public void NowVersion()

        {

            System.Diagnostics.FileVersionInfo fv = System.Diagnostics.FileVersionInfo.GetVersionInfo("新云翻译器.exe");

            localversion = fv.FileVersion;

        }

这个方法帮我们拿到目前软件的版本,因为我们要拿到的版本号是我们要更新的软件的版本号,而不是本软件的版本号,这里需要注意下,别搞错了。

 

        /// <summary>

        /// 从服务器上获取最新的版本号

        /// </summary>

        public void DownloadCheckUpdateXml()

        {

            try

            {

                //第一个参数是文件的地址,第二个参数是文件保存的路径文件名

                client.DownloadFile(http://cloudyours.net/Software//Update/NewcloudTranslator/NewcloudTranslator221210.XML,
@"Update\NewcloudTranslator221210.XML");

            }

            catch

            {

                nnidtext = "没有检测到更新";

                Environment.Exit(0);

            }

        }

我们用这个方法从服务器上拿到最新的软件版本,之后会进行对比。

 

        /// <summary>

        /// 读取从服务器获取的最新版本号

        /// </summary>

        public void LatestVersion()

        {

            if (File.Exists(@"Update\NewcloudTranslator221210.XML"))

            {

                XmlDocument doc = new XmlDocument();

                //加载要读取的XML

                doc.Load(@"Update\NewcloudTranslator221210.XML");

                //获得根节点

                XmlElement WriteBook = doc.DocumentElement;

                //获得子节点 返回节点的集合

                XmlNodeList Update = WriteBook.ChildNodes;

                foreach (XmlNode item in Update)

                {

                    latesversion = item.InnerText;

                }

            }

            else if (!File.Exists(@"Update\NewcloudTranslator221210.XML"))

            {

                nnidtext = "检查更新失败";

                Environment.Exit(0);

            }

        }

 

这个方法就是用来读取我们拿到的文档,然后存储一下,后面会用到。

 

        /// <summary>

        /// 下载安装包

        /// </summary>

        public void DownloadInstall()

        {

            if (localversion == latesversion)

            {

                nnidtext = "恭喜你,已经更新到最新版本";

            }

            else if (localversion != latesversion && File.Exists(@"Update\NewcloudTranslator221210.XML"))

            {

                nnidtext = "发现新版本,即将下载更新补丁";

                client.DownloadFile("http://cloudtours.net/Software//Update/NewcloudTranslator/NewCloudTranslator2_2_1_210_Setup.exe",
@"Update\NewCloudTranslator2_2_1_210_Setup.exe");

                if (File.Exists(@"Update\NewCloudTranslator2_2_1_210_Setup.exe"))

                {

                    InstallandDelete();//这里调用安装的类

                }

                else if (!File.Exists(@"Update\NewCloudTranslator2_2_1_210_Setup.exe"))

                {

                    //如果一次没有下载成功,则检查三次

                    for (int i = 1; i < 3; i++)

                    {

                        client.DownloadFile("http://cloudtours.net/Software//Update/NewcloudTranslator/NewCloudTranslator2_2_1_210_Setup.exe",
@"Update\NewCloudTranslator2_2_1_210_Setup.exe");

                    }

                    nnidtext = "下载失败,请检查您的网络连接是否正常";

                    Environment.Exit(0);

                }

            }

        }

 

这个方法是用来下载安装包的,先对比一下我们读取到的最新版本号和本地版本号,如果一样就不用下载安装包,如果不一样就下载更新。

 

        /// <summary>

        /// 安装及删除

        /// </summary>

        private void InstallandDelete()

        {

            //安装前关闭正在运行的程序

            KillProgram();

            //启动安装程序

            Process.Start(@"Update\NewCloudTranslator2_2_1_210_Setup.exe");

            JudgeInstall();

        }

 这个方法就简单了,就打开一下我们的安装包,之后调用几个其他方法,其他方法会在下面附上。

 

/// <summary>

/// 判断安装进程是否存在

/// </summary>

public void JudgeInstall()

{

    Process[] processList = Process.GetProcesses();

    foreach (Process process in processList)

    {

        if (process.ProcessName == "NewCloudTranslator2_2_1_210_Setup.exe")

        {

            process.Kill();

            File.Delete(@"Update\NewCloudTranslator2_2_1_210_Setup.exe");

            File.Delete(@"Update\NewcloudTranslator221210.XML");

        }

        else

        {

            File.Delete(@"Update\NewCloudTranslator2_2_1_210_Setup.exe");

            File.Delete(@"Update\NewcloudTranslator221210.XML");

            return;

        }

    }

}

这个方法就完成了简单的删除更新文件的。

 

/// <summary>

/// 结束程序

/// </summary>

public void KillProgram()

{

    Process[] processList = Process.GetProcesses();

    foreach (Process process in processList)

    {

        //如果程序启动了,则杀死

        if (process.ProcessName == "新云翻译器.exe")

        {

            process.Kill();

        }

    }

}

有几个方法中用到了这个方法,并没有什么技术含量。

 

到这里就结束了,这个程序就算做完了,其实蛮简单的,就看你没有想到这点。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: