/// <summary>
        /// �ƶ��ļ���
        /// </summary>
        /// <param name="xmlInfo"></param>
        private void MoveFolder(XmlMainConfigInfo xmlInfo, string vername)
        {
            FileInfo f = new FileInfo(xmlInfo.savefile);
            //�ƶ�ǰ����Ҫɾ���ƶ�ȥ��λ���Ƿ����ԭ���ļ�
            FileInfo oldfile = new FileInfo(xmlInfo.oldfile);
            if (oldfile.Exists)//�ж��Ƿ���Ҫɾ��ԭ���ļ�
                oldfile.Delete();
            f.MoveTo(xmlInfo.oldfile);//����code+�汾��-------

            string thisFilePath = AppConfig.filePath + Common.Entities.Constants.TempName;
            //�����ļ���versionnameΪ�����ļ�����ָ����Ŀ¼��
            string FilePath = AppConfig.filePath + xmlInfo.oldCode;//��ǰ���CODE�ļ���
            while (!Directory.Exists(FilePath))
            {
                Directory.CreateDirectory(FilePath);
            }

            //�����Ե�һ�������CODEΪ���ļ��У��Ե�һ�������CODE+�汾�����İ汾�ļ���
            string thispath = Path.Combine(FilePath, Constants.UpdaterCode + "_FG$SP_" + vername);//��ǰ�ƶ���ȥ���ļ���
            //�ƶ�ǰɾ����CODE���Ƿ���ڸð汾�ļ���
            if (Directory.Exists(thispath))
                Directory.Delete(thispath, true);

            Directory.Move(thisFilePath, thispath);//�ƶ�--------
        }
        /// <summary>
        /// �XML
        /// </summary>
        /// <param name="path"></param>
        private XmlMainConfigInfo InsertConfigXml(string Vid)
        {
            XmlMainConfigInfo xml = new XmlMainConfigInfo();
            SearchVersionTrack searchv = new SearchVersionTrack();
            SearchConfig serach = new SearchConfig();

            searchv.VID = Vid;
            VersionTrack v = BoFactory.GetVersionTrackBo.GetVersionTrack(searchv)[0];

            serach.PluginCode = v.PluginCode.ToString();
            IList<ConfigInfoPC> listc = BoFactory.GetVersionTrackBo.GetConfigPCList(serach);//��ȡ������Ϣ

            xml.configList = listc;

            CommonMethods.WriteMaininfoConfigXml(listc, Path.Combine(v.FilePath.Trim(), Constants.UpdaterName));

            return xml;
        }
        /// <summary>
        /// �XML
        /// </summary>
        /// <param name="path"></param>
        private XmlMainConfigInfo InsertXml(string Vid)
        {
            XmlMainConfigInfo xml = new XmlMainConfigInfo();
            SearchVersionTrack searchv = new SearchVersionTrack();
            SearchConfig serach = new SearchConfig();

            searchv.VID = Vid;
            VersionTrack v = BoFactory.GetVersionTrackBo.GetVersionTrack(searchv)[0];

            serach.PluginCode = v.PluginCode.ToString();
            IList<ConfigTemp> listct = BoFactory.GetVersionTrackBo.GetConfigListTemp(serach);//��ȡ������Ϣ

            IList<ConfigInfoPC> listc = new List<ConfigInfoPC>();
            foreach (ConfigTemp c in listct)
            {
                listc.Add(CommonMethods.ConvertToConfigInfoPC(c));//ת��
            }
            xml.configList = listc;

            CommonMethods.WriteMaininfoConfigXml(listc, Path.Combine(v.FilePath.Trim() , Constants.UpdaterName));

            return xml;
        }
        /// <summary>
        /// ��ѹ����ȡ��Ϣ
        /// </summary>
        /// <returns></returns>
        private XmlMainConfigInfo Decompressing(string vername)
        {
            string thisFilePath = AppConfig.filePath + Common.Entities.Constants.TempName;
            while (!Directory.Exists(thisFilePath))//������ʱ�ļ���
            {
                Directory.CreateDirectory(thisFilePath);
            }
            string zipPaht = AppConfig.SaveZipPath;
            while (!Directory.Exists(zipPaht))//�������zip�ļ����ļ���
            {
                Directory.CreateDirectory(zipPaht);
            }

            string saveFile = Path.Combine(zipPaht, System.Guid.NewGuid().ToString() + ".zip");
            Request.Files[0].SaveAs(saveFile);//����zipȥ�ļ�����

            CommonMethods.Uncompress(saveFile, thisFilePath);//��ѹ

            XmlMainConfigInfo xmlInfo = new XmlMainConfigInfo();
            xmlInfo.savefile = saveFile;

            xmlInfo = GetXmlInfo(thisFilePath);//��ȡ����������������Ϣ

            xmlInfo.oldCode = Constants.UpdaterCode;//�����Ե�һ��CODEΪ�ļ���
            //zip�ļ��е�һ��CODE+�汾������
            string oldfilepath = Path.Combine(zipPaht, Constants.UpdaterCode + "_FG$SP_" + vername + ".zip");//��������zip�ļ�
            xmlInfo.savefile = saveFile;
            xmlInfo.oldfile = oldfilepath;

            return xmlInfo;
        }
 /// <summary>
 /// ����XML��ȡ��Ϣ
 /// </summary>
 /// <returns></returns>
 private XmlMainConfigInfo GetXmlInfo(string xmlpath)
 {
     XmlMainConfigInfo x = new XmlMainConfigInfo();
     IList<ConfigInfoPC> listG = CommonMethods.GetMainEntityFromXMLPC(Path.Combine(xmlpath, Common.Entities.Constants.UpdaterName));
     x.configList = listG;
     return x;
 }
        /// <summary>
        /// �XML
        /// </summary>
        /// <param name="path"></param>
        private XmlMainConfigInfo InsertXml(string Vid)
        {
            XmlMainConfigInfo xml = new XmlMainConfigInfo();
            SearchVersionTrack searchv = new SearchVersionTrack();
            SearchConfig serach = new SearchConfig();

            searchv.VID = Vid;
            VersionTrack v = BoFactory.GetVersionTrackBo.GetVersionTrack(searchv)[0];

            serach.PluginCode = v.PluginCode.ToString();
            IList<ConfigTemp> listct = BoFactory.GetVersionTrackBo.GetConfigListTemp(serach);//��ȡ������Ϣ

            IList<ConfigInfoPC> listc = new List<ConfigInfoPC>();
            foreach (ConfigTemp c in listct)
            {
                listc.Add(CommonMethods.ConvertToConfigInfoPC(c));//ת��
            }
            xml.configList = listc;

            //����
            IList<ConfigInfoPC> listA = new List<ConfigInfoPC>();
            IList<ConfigInfoPC> listS = new List<ConfigInfoPC>();
            IList<ConfigInfoPC> listG = new List<ConfigInfoPC>();
            foreach (var config in listc)
            {
                if (config.ConfigCategoryCode.Equals(Constants.SystemConfig))
                    listS.Add(config);
                else if (config.ConfigCategoryCode.Equals(Constants.GlobalConfig))
                    listG.Add(config);
                else
                    listA.Add(config);
            }

            CommonMethods.WriteMaininfoConfigXml(listA, Path.Combine(v.FilePath.Trim(), Constants.AppName));
            CommonMethods.WriteMaininfoConfigXml(listS, Path.Combine(v.FilePath.Trim(), Constants.systemName));
            CommonMethods.WriteMaininfoConfigXml(listG, Path.Combine(v.FilePath.Trim(), Constants.globalName));

            return xml;
        }
 /// <summary>
 /// ����XML��ȡ��Ϣ
 /// </summary>
 /// <returns></returns>
 private XmlMainConfigInfo GetXmlInfo(string xmlpath)
 {
     XmlMainConfigInfo x = new XmlMainConfigInfo();
     IList<ConfigInfoPC> listG = CommonMethods.GetMainEntityFromXMLPC(Path.Combine(xmlpath, Common.Entities.Constants.globalName));
     IList<ConfigInfoPC> listS = CommonMethods.GetMainEntityFromXMLPC(Path.Combine(xmlpath, Common.Entities.Constants.systemName));
     IList<ConfigInfoPC> listA = CommonMethods.GetMainEntityFromXMLPC(Path.Combine(xmlpath, Common.Entities.Constants.AppName));
     foreach (var c in listS)
     {
         listG.Add(c);
     }
     foreach (var c in listA)
     {
         listG.Add(c);
     }
     x.configList = listG;
     return x;
 }
 private void resumeVersionInfoByMain(ArrayList activeVersion, ArrayList resumeVersion, XmlMainConfigInfo xml, string code)
 {
     try
     {
         string filepaht = "";
         if (activeVersion != null)//若有正在使用的版本(未删除正在使用的版本)
         {
             foreach (var a in activeVersion)
             {
                 SearchVersionTrack searchv = new SearchVersionTrack();
                 searchv.VID = a.ToString();
                 VersionTrack v = versionTrackDao.GetVersionTrackList(searchv)[0];
                 v.VersionStatus = 2;
                 versionTrackDao.Update(v);//更新正在使用的版本为过期
             }
         }
         foreach (var a in resumeVersion)
         {
             SearchVersionTrack searchv = new SearchVersionTrack();
             searchv.VID = a.ToString();
             VersionTrack v = versionTrackDao.GetVersionTrackList(searchv)[0];
             v.VersionStatus = 1;
             filepaht = v.FilePath;
             versionTrackDao.Update(v);//更新正在使用的版本为正在使用
         }
         IList<ConfigInfoPC> plist = xml.configList;
         //更新除了versiontrack之外的所有表信息
         for (int i = 0; i < plist.Count; i++)
         {
             SearchConfig search = new SearchConfig();
             search.PluginCode = code;
             configInfoDao.DeleteConfigInfo(search);//删除配置
             foreach (ConfigInfoPC c in plist)
             {
                 c.PluginCode = code;
                 configInfoPCDao.Insert(c);//插入配置
             }
         }
         //发布更新
         string[] codes = filepaht.Split(new string[] { "\\" }, StringSplitOptions.None);
         string name = codes[codes.Length - 2];//获取插件code
         Beyondbit.AutoUpdate.IPublisher pub = new Beyondbit.SmartBox.Publisher.SmartBoxPublisher();
         pub.UpdateApplication(filepaht, name);
     }
     catch (DalException ex)
     {
         throw new BOException("恢复版本出错", ex);
     }
     catch (Exception e)
     {
         throw new BOException("恢复版本出错", e);
     }
 }
        public virtual void UpdateUpdaterPlushVersionTracks(XmlMainConfigInfo xml, string vid, string uid)
        {
            try
            {
                SearchConfig search = new SearchConfig();
                search.PluginCode = Constants.UpdaterCode;
                configInfoDao.DeleteConfigInfo(search);//先删除原由真实参数表数据

                IList<ConfigTemp> listtemp = configTempDao.GetConfigList(search);
                //没修改基本信息,直接发布,需要覆盖
                foreach (ConfigTemp c in listtemp)
                {
                    SearchConfig searchcc = new SearchConfig();
                    searchcc.PluginCode = Constants.UpdaterCode;
                    searchcc.ConfigCategoryCode = c.ConfigCategoryCode;
                    searchcc.key = c.Key1;
                    IList<ConfigInfo> listct = configInfoDao.GetConfigList(searchcc);
                    if (listct.Count > 0)
                        configInfoDao.Update(CommonMethods.ConvertToConfigInfo(c));
                    else
                        configInfoDao.Insert(CommonMethods.ConvertToConfigInfo(c));
                }

                configTempDao.DeleteInfo(search);//删除当前插件临时表数据

                //更新原由版本为过期,当前版本为正在使用
                SearchVersionTrack searchtemps = new SearchVersionTrack();
                searchtemps.VID = vid;
                VersionTrack vsss = versionTrackDao.GetVersionTrackList(searchtemps)[0];//当前版本
                VersionTrack oldver = versionTrackDao.Get(vsss.PreVersionId);//获取上个版本即正在使用的版本
                if (oldver != null)
                {
                    oldver.VersionStatus = 2;
                    versionTrackDao.Update(oldver);
                }
                vsss.VersionStatus = 1;
                versionTrackDao.Update(vsss);
            }
            catch (DalException ex)
            {
                throw new BOException("修改主程序版本信息出错", ex);
            }
        }
        //  [Frame(true, true)]
        public virtual string SaveUpdaterZipInfo(VersionTrack version, XmlMainConfigInfo xmlInfo, string IsAdd, string IsUpdate, string uid, string vids)
        {
            string oldfp = "";
            string oldname = "";
            SearchVersionTrack search = new SearchVersionTrack();
            try
            {
                search.VID = vids;
                VersionTrack v = versionTrackDao.GetVersionTrackList(search)[0];
                //删除
                if (!string.IsNullOrEmpty(IsUpdate))//若为修改
                {
                    if (IsUpdate.Equals("1"))//若已有上传文件
                    {
                        string[] codes = v.FilePath.Split(new string[] { "\\" }, StringSplitOptions.None);
                        oldfp = v.FilePath;
                        oldname = codes[codes.Length - 1];//版本名
                        SearchConfig searchc = new SearchConfig();
                        searchc.PluginCode = Constants.UpdaterCode;
                        configTempDao.DeleteInfo(searchc);
                    }
                }
                //更新版本状态
                if (IsAdd.Equals("1"))
                    v.VersionStatus = 3;
                else
                    v.VersionStatus = 0;
                versionTrackDao.Update(v);
                //转换
                IList<ConfigTemp> listts = new List<ConfigTemp>();
                foreach (ConfigInfoPC c in xmlInfo.configList)
                {
                    listts.Add(CommonMethods.ConvertToConfigInfoPC(c));
                }
                InserConfigInfo(listts, Constants.UpdaterCode);//新赠插件配置临时表

                if (Directory.Exists(oldfp)) //5.需要删除原由文件夹
                    Directory.Delete(oldfp, true);
                //需要删除存在的位置的原由文件
                FileInfo f = new FileInfo(Path.Combine(AppConfig.SaveZipPath, oldname + ".zip"));
                if (f.Exists)
                    f.Delete();

                return vids;
            }
            catch (DalException ex)
            {
                throw new BOException("上传插件zip文件出错", ex);
            }
        }