예제 #1
0
        /// <summary>
        /// 获得服务端更新版本列表,及最新的版本信息,同时去除比本地版本旧的版本信息
        /// 修改升级策略,升级最近的全量包和最新的版本。不进行增量升级
        /// 当UpdateFlag为2时,说明是全量升级包,之前的增量版本可以不升级
        /// </summary>
        /// <returns>返回更新列表</returns>
        protected List <Version> GetServerVersions(ref string msg)
        {
            try
            {
                msg         = string.Empty;
                _newVersion = null;

                Version fullVersion = null;//全量升级包

                XmlFiles xmlserverfile = new XmlFiles(ServerUpdateFileClone);
                string   serverUrl     = xmlserverfile.GetNodeValue("//Updater/Url");
                string   entryPoint    = xmlserverfile.GetNodeValue("//Application/EntryPoint");

                XmlNodeList fileNodes = xmlserverfile.GetChildNodeList("//Dir");
                if (fileNodes == null || fileNodes.Count < 1)
                {
                    msg = "没有发现版本信息!";
                    LogHelper.WriteLog("服务端升级文件中没有包含升级版本信息!");
                    return(null);
                }
                _newVersion = new Version();
                List <Version> serverVersions = new List <Version>();
                int            versionid      = -1;//记录最新的版本标记
                foreach (XmlNode node in fileNodes)
                {
                    string sysifuse = node.Attributes["sysifuse"].InnerText.Trim();
                    if (sysifuse != "1")
                    {
                        continue;
                    }

                    string updateflag = "0";
                    try
                    {
                        updateflag = node.Attributes["updateflag"].InnerText.Trim();
                    }
                    catch
                    { updateflag = "0"; }

                    int id = 0;
                    int.TryParse(node.Attributes["value"].InnerText, out id);
                    Version version    = new Version();
                    string  versionstr = string.Empty;
                    try
                    {
                        versionstr = node.Attributes["ver"].InnerText;
                    }
                    catch { }
                    version.StrVersion   = versionstr;
                    version.Ifuse        = sysifuse;
                    version.ValueVersion = id;
                    version.Updateflag   = updateflag;
                    //比较版本,获得最新版本
                    if (versionid < id)
                    {
                        versionid = id;
                        _newVersion.StrVersion   = version.StrVersion;
                        _newVersion.ValueVersion = version.ValueVersion;
                        _newVersion.Ifuse        = version.Ifuse;
                        _newVersion.Updateflag   = version.Updateflag;
                        _newVersion.ServerUrl    = serverUrl;
                        _newVersion.EntryPoint   = entryPoint;
                    }
                    //比较版本,去除老版本
                    if (id <= LocalVersion.ValueVersion)
                    {
                        continue;
                    }

                    //当当前版本是全量升级包时,记录最新的全量包 modify 2014.11.7
                    if (updateflag.Equals("2"))
                    {
                        if (fullVersion == null)
                        {
                            fullVersion = version;
                        }
                        else if (fullVersion.ValueVersion < id)
                        {
                            fullVersion = version;
                        }
                    }

                    serverVersions.Add(version);
                    //当 服务端版本配置文件 中有 必须升级标记则强制升级
                    if (version.Updateflag == "1")
                    {
                        _forceUpdate = true;
                    }
                }

                //serverVersions.Clear();

                //修改 保存 全量包的版本信息 modify 2014.11.7
                if (fullVersion != null && fullVersion.ValueVersion > LocalVersion.ValueVersion && fullVersion.ValueVersion != versionid)
                {
                    serverVersions.Clear();
                    serverVersions.Add(fullVersion);
                }

                //修改 保存 最新的版本信息 modify 2014.4.8
                //if (versionid > LocalVersion.ValueVersion )
                //{
                //    serverVersions.Add(_newVersion);
                //}


                return(serverVersions);
            }
            catch (Exception ex)
            {
                msg = "获得服务端版本信息时发生错误:" + ex.Message;
                LogHelper.WriteException(ex);
                return(null);
            }
        }