示例#1
0
        private void VersionForm_Load(object sender, EventArgs e)
        {
            string strNewAppName     = XMLProcess.Read(@"temp\UpdateInfo.xml", "UpdateInformation", "ApplicationInformation", "ApplicationName");
            string strNewAppVersion  = XMLProcess.Read(@"temp\UpdateInfo.xml", "UpdateInformation", "ApplicationInformation", "ApplicationVersion");
            string strNewAppMessages = XMLProcess.Read(@"temp\UpdateInfo.xml", "UpdateInformation", "ApplicationInformation", "ApplicationMessages");

            string[] str = strNewAppMessages.Split(new char[] { ';' });
            lblAppName_Version.Text = strNewAppName + " " + strNewAppVersion;
            for (int i = 0; i < str.Length; i++)
            {
                txtUpdateInfo.Text = txtUpdateInfo.Text + str[i] + Environment.NewLine;
            }
            txtUpdateInfo.SelectionStart  = 0;
            txtUpdateInfo.SelectionLength = 0;
        }
示例#2
0
        static void Main()
        {
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            #region 检查是否存在UpdateInfo.xml文件,如果不存在则启动设置窗口,创建UpdateInfo.xml文件,并配置该文件
            if (!File.Exists(AppDomain.CurrentDomain.BaseDirectory.ToString() + "UpdateInfo.xml"))
            {
                //启动设置窗口
                SettingsForm settingForm = new SettingsForm();
                settingForm.ShowDialog();
            }

            #endregion
            #region 连接到FTP,下载最新的XML配置文件到临时文件夹
            //从原程序目录下读取XML文件中的FTP信息,并下载最新的XML文件
            FTPPath     = XMLProcess.Read("UpdateInfo.xml", "UpdateInformation", "FTPInformation", "FTPPath");
            FTPUser     = XMLProcess.Read("UpdateInfo.xml", "UpdateInformation", "FTPInformation", "FTPUser");
            FTPPassword = XMLProcess.Read("UpdateInfo.xml", "UpdateInformation", "FTPInformation", "FTPPassword");
            //检查temp文件夹是否存在,并创建temp文件夹
            DirFile.CreateDir("temp");
            //将最新的XML文件下载到temp文件夹中
            ftp = new FTPHelper(FTPPath, "", FTPUser, FTPPassword);
            ftp.Download(FTPPath, AppDomain.CurrentDomain.BaseDirectory.ToString() + @"\temp", "UpdateInfo.xml");
            #endregion

            #region 获取临时文件夹XML文件中的版本更新日期,以及原程序的版本更新日期
            //获取旧版本版本号及更新时间
            strOldAppName       = XMLProcess.Read("UpdateInfo.xml", "UpdateInformation", "ApplicationInformation", "ApplicationName");
            strOldAppVersion    = XMLProcess.Read("UpdateInfo.xml", "UpdateInformation", "ApplicationInformation", "ApplicationVersion");
            strOldAppUpdateTime = XMLProcess.Read("UpdateInfo.xml", "UpdateInformation", "ApplicationInformation", "ApplicationUpdateTime");
            strOldAppMessages   = XMLProcess.Read("UpdateInfo.xml", "UpdateInformation", "ApplicationInformation", "ApplicationMessages");
            //获取新版本版本号及更新时间
            strNewAppName       = XMLProcess.Read(@"temp\UpdateInfo.xml", "UpdateInformation", "ApplicationInformation", "ApplicationName");
            strNewAppVersion    = XMLProcess.Read(@"temp\UpdateInfo.xml", "UpdateInformation", "ApplicationInformation", "ApplicationVersion");
            strNewAppUpdateTime = XMLProcess.Read(@"temp\UpdateInfo.xml", "UpdateInformation", "ApplicationInformation", "ApplicationUpdateTime");
            strNewAppMessages   = XMLProcess.Read(@"temp\UpdateInfo.xml", "UpdateInformation", "ApplicationInformation", "ApplicationMessages");
            #endregion

            #region 比较两个版本的更新日期,提示用户是否升级,若选择不升级,则退出升级程序
            if (strOldAppVersion != strNewAppVersion || strOldAppUpdateTime != strNewAppUpdateTime)
            {
                VersionForm versionform = new VersionForm();
                versionform.ShowDialog();
            }
            else
            {
                Application.Exit();
            }
            #endregion

            #region 检测原程序是否在运行,若运行则杀死
            //检测原程序是否在运行,若运行则杀死。
            proc = Process.GetProcessesByName(strOldAppName);
            if (proc.Length != 0)
            {
                KillForm killform = new KillForm();
                killform.ShowDialog();
            }
            #endregion

            #region 开始批量下载文件到临时文件夹
            //下载FTP上的文件到temp文件夹
            string[] filelist = ftp.GetFileList(FTPPath);
            for (int i = 0; i < filelist.Length; i++)
            {
                ftp.Download(FTPPath, AppDomain.CurrentDomain.BaseDirectory.ToString() + @"\temp", filelist[i]);
            }
            //下载FTP上的文件夹到temp文件夹(包括文件夹下内容),如果没有文件夹,则folderlist.Length=0,不执行下列循环
            string[] folderlist = ftp.GetFolderList(FTPPath);
            for (int i = 0; i < folderlist.Length; i++)
            {
                //根据得到的文件夹列表,在temp下创建相应的文件夹
                DirFile.CreateDir(@"\temp\" + folderlist[i]);
                //获取该文件夹下的文件列表,并下载到文件夹下
                string   ftpURI        = FTPPath + folderlist[i] + "/";
                string[] InnerFilelist = ftp.GetFileList(ftpURI);
                for (int j = 0; j < InnerFilelist.Length; j++)
                {
                    ftp.Download(ftpURI, AppDomain.CurrentDomain.BaseDirectory.ToString() + @"\temp\" + folderlist[i], InnerFilelist[j]);
                }
            }
            #endregion

            #region 将原程序删除(包括文件和文件夹),拷贝临时文件夹中的文件到原目录
            //删除原程序中的文件
            string[] deletefilelist = DirFile.GetFileNames(AppDomain.CurrentDomain.BaseDirectory.ToString());
            for (int i = 0; i < deletefilelist.Length; i++)
            {
                if (!deletefilelist[i].Contains("UpdateProgram") & !deletefilelist[i].Contains("CSkin"))
                {
                    DirFile.DeleteFile(deletefilelist[i]);
                }
            }
            //删除原程序中的文件夹
            string[] deletefolderlist = DirFile.GetFolderNames(AppDomain.CurrentDomain.BaseDirectory.ToString());
            for (int i = 0; i < deletefolderlist.Length; i++)
            {
                if (!deletefolderlist[i].Contains("temp") & !deletefolderlist[i].Contains("Backup"))
                {
                    DirFile.DeleteDirectory(deletefolderlist[i]);
                }
            }
            //拷贝temp文件夹下文件到原程序目录
            string[] copyfilelist = DirFile.GetFileNames(AppDomain.CurrentDomain.BaseDirectory.ToString() + "temp");
            string[] strFileName  = new string[copyfilelist.Length];
            for (int i = 0; i < copyfilelist.Length; i++)
            {
                strFileName[i] = Path.GetFileName(copyfilelist[i]);
                DirFile.CopyFile(copyfilelist[i], AppDomain.CurrentDomain.BaseDirectory.ToString() + strFileName[i]);
            }
            //拷贝temp文件夹下文件夹到原程序目录
            string[] copyfolderlist = DirFile.GetFolderNames(AppDomain.CurrentDomain.BaseDirectory.ToString() + "temp");
            string[] strFolderName  = new string[copyfolderlist.Length];
            for (int i = 0; i < copyfolderlist.Length; i++)
            {
                strFolderName[i] = Path.GetFileName(copyfolderlist[i]);
                DirFile.CopyFolder(copyfolderlist[i], AppDomain.CurrentDomain.BaseDirectory.ToString() + strFolderName[i]);
            }
            #endregion

            #region 拷贝完成后,删除temp文件夹,提示更新完毕,然后启动新的主程序
            DirFile.DeleteDirectory(AppDomain.CurrentDomain.BaseDirectory.ToString() + "temp");
            Process.Start(strNewAppName + ".exe");
            #endregion

            Application.Run(new UpdateForm());
        }