Beispiel #1
0
        /// <summary>
        /// 创建指定包
        /// </summary>
        /// <param name="e"></param>
        public void Build(Wrapper.RunworkEventArgs e)
        {
            e.ReportProgress(0, 0, "正在准备信息...");
            AutoLoadInformations();

            UpdateInfo ui = null;

            using (var ms = new MemoryStream())
            {
                UpdateInfo.XmlSerializeToStream(ms);
                ms.Flush();
                ms.Seek(0, SeekOrigin.Begin);
                ui = ms.XmlDeserializeFromStream <UpdateInfo>();
            }
            if (ui == null)
            {
                throw new ApplicationException("准备升级信息时发生异常");
            }

            if (AuProject.CleanBeforeBuild)
            {
                e.ReportProgress(0, 0, "正在清理目录...");
                CleanTargetDirectory();
            }

            Result = new Dictionary <string, string>();
            BuildPackages(e, ui);


            //保存信息文件
            var xmlPath = GetXmlFilePath(false);

            ui.XmlSerilizeToFile(xmlPath);
            if (!AuProject.CompressPackage || AuProject.CreateCompatiblePackage)
            {
                Result.Add(Path.GetFileName(xmlPath), "兼容升级模式(或未开启增量更新时)的升级信息文件");
            }

            //压缩?
            if (AuProject.CompressPackage)
            {
                var xmlCompressPath = GetXmlFilePath(true);
                CompressFile(xmlPath, xmlCompressPath);
                Result.Add(Path.GetFileName(xmlCompressPath), "已压缩的升级信息文件");

                if (!AuProject.CreateCompatiblePackage)
                {
                    File.Delete(xmlPath);
                }
            }

            BuiltUpdateInfo = ui;
        }
Beispiel #2
0
        //创建信息的具体操作函数
        void CreatePackage(object sender, FSLib.Threading.RunworkEventArgs e)
        {
            UpdateInfo info = new UpdateInfo()
            {
                AppName = this.txtAppName.Text,
                AppVersion = this.txtAppVersion.Text,
                Desc = this.txtDesc.Text,
                ExecuteArgumentAfter = this.txtAfterExecuteArgs.Text,
                ExecuteArgumentBefore = this.txtPreExecuteArgs.Text,
                PublishUrl = this.txtPublishUrl.Text,
                FileExecuteAfter = this.fileAfterExecute.SelectedFileName,
                FileExecuteBefore = this.filePreExecute.SelectedFileName,
                MD5 = "",
                Package = System.IO.Path.GetFileName(this.txtPackagePath.Text),
                ExecuteTimeout = txtTimeout.Text.ToInt32(),
                PackageSize = 0,
                RequiredMinVersion = ""
            };
            this.options.SaveSetting(info);

            DME.Zip.Zip.FastZipEvents evt = new DME.Zip.Zip.FastZipEvents();
            evt.ProcessFile += (s, f) =>
            {
                e.ReportProgress(0, 0, "正在压缩文件 " + System.IO.Path.GetFileName(f.Name));
            };
            DME.Zip.Zip.FastZip zip = new DME.Zip.Zip.FastZip(evt);
            if (!info.PackagePassword.IsNullOrEmpty()) zip.Password = info.PackagePassword;
            zip.CreateZip(this.txtPackagePath.Text, this.txtNewSoftDir.Text, true, "");

            //校验MD5
            byte[] hash = null;
            var size = 0;
            using (var fs = new FSLib.IO.ExtendFileStream(SelectedPackagePath, System.IO.FileMode.Open))
            {
                e.ReportProgress((int)fs.Length, 0, "");
                fs.ProgressChanged += (s, f) =>
                {
                    e.ReportProgress((int)fs.Position);
                };
                MD5 md5 = System.Security.Cryptography.MD5CryptoServiceProvider.Create();

                hash = md5.ComputeHash(fs);
                size = (int)fs.Length;
            }
            info.MD5 = BitConverter.ToString(hash).Replace("-", "").ToUpper();
            info.PackageSize = size;
            info.XmlSerilizeToFile(GetXmlPath(SelectedPackagePath));

            e.ReportProgress(0, 0, "生成成功,MD5校验:" + info.MD5);
        }
Beispiel #3
0
        //创建信息的具体操作函数
        private void CreatePackage(object sender, RunworkEventArgs e)
        {
            var info = new UpdateInfo
                           {
                               AppName = txtAppName.Text,
                               AppVersion = txtAppVersion.Text,
                               Desc = txtDesc.Text,
                               ExecuteArgumentAfter = txtAfterExecuteArgs.Text,
                               ExecuteArgumentBefore = txtPreExecuteArgs.Text,
                               PublishUrl = txtPublishUrl.Text,
                               FileExecuteAfter = fileAfterExecute.SelectedFileName,
                               FileExecuteBefore = filePreExecute.SelectedFileName,
                               MD5 = "",
                               Package = Path.GetFileName(txtPackagePath.Text),
                               ExecuteTimeout = txtTimeout.Text.ToInt32(),
                               PackageSize = 0,
                               RequiredMinVersion = ""
                           };
            options.SaveSetting(info);

            var evt = new FastZipEvents();
            evt.ProcessFile += (s, f) => e.ReportProgress(0, 0, "正在压缩文件 " + Path.GetFileName(f.Name));
            var zip = new FastZip(evt);
            if (!info.PackagePassword.IsNullOrEmpty()) zip.Password = info.PackagePassword;
            //zip.CreateZip(this.txtPackagePath.Text, this.txtNewSoftDir.Text, true, "");

            if (ckbModifyTime.Checked)
            {
                IScanFilter df = new DateTimeFilter(DateTime.Parse(dateTimePicker1.Text));
                zip.CreateZip(File.Create(txtPackagePath.Text), txtNewSoftDir.Text, true, df, null);
            }
            else
            {
                zip.CreateZip(txtPackagePath.Text, txtNewSoftDir.Text, true, "", null);
            }

            //校验MD5
            byte[] hash = null;
            int size = 0;
            using (var fs = new ExtendFileStream(SelectedPackagePath, FileMode.Open))
            {
                e.ReportProgress((int) fs.Length, 0, "");
                fs.ProgressChanged += (s, f) => { e.ReportProgress((int) fs.Position); };
                MD5 md5 = MD5.Create();

                hash = md5.ComputeHash(fs);
                size = (int) fs.Length;
            }
            info.MD5 = BitConverter.ToString(hash).Replace("-", "").ToUpper();
            info.PackageSize = size;
            info.XmlSerilizeToFile(GetXmlPath(SelectedPackagePath));

            e.ReportProgress(0, 0, "生成成功,MD5校验:" + info.MD5);
        }