转 C#实现在线更新系统

转载自:

C#实现在线更新系统

http://www.cnblogs.com/skylgmg/p/4792990.html

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

image

这个是程序的组成部分。

image

主要功能是在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();
    }

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

///
/// 判断安装进程是否存在
///
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;
}
}
}

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

///
/// 结束程序
///
public void KillProgram()
{
Process[] processList = Process.GetProcesses();
foreach (Process process in processList)
{
//如果程序启动了,则杀死
if (process.ProcessName == “新云翻译器.exe”)
{
process.Kill();
}
}
}

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

到这里就结束了,这个程序就算做完了,其实蛮简单的,就看你没有想到这点。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值