Exemple #1
0
        /// <summary>
        /// Creates the CAB.
        /// </summary>
        /// <param name="files">The files to .</param>
        /// <param name="compressFile">The compress file.</param>
        public static void CreateCab(ArrayList files, string compressFile)
        {
            if (files.Count > 0)
            {
                // Change this to split the archive into multiple files (200000 --> CAB split size = 200kB)
                // ATTENTION: In this case Parameter 1 of CompressFile() MUST contain "%d"
                int s32_SplitSize = int.MaxValue;

                CabLib.Compress cab = new CabLib.Compress();

                cab.CompressFileList(files, compressFile, true, true, s32_SplitSize);
            }
        }
        private void btnGo_Click(object sender, RoutedEventArgs e)
        {
            try
            {
                txtProgressLog.Text = "starting...\n";
                CabLib.Extract  extractor  = new CabLib.Extract();
                CabLib.Compress compressor = new CabLib.Compress();

                CabLib.Extract.kHeaderInfo cInfo = null;
                if (extractor.IsFileCabinet(txtFilePath.Text, out cInfo))
                {
                    Log("file is a valid cabinet");
                    //extract WSP to temp folder
                    Guid   jobGuid = Guid.NewGuid();
                    string jobid   = jobGuid.ToString("N");

                    Log("current job id is " + jobid);

                    var fi = new FileInfo(txtFilePath.Text);

                    var jobFolder = Directory.CreateDirectory(Directory.GetCurrentDirectory() + "\\" + jobid);
                    Log("job temp directory created");
                    extractor.ExtractFile(txtFilePath.Text, jobFolder.FullName);
                    Log("cabinet exatracted to job temp directory");

                    //Load manifest, change solution ID, remove assemblies, etc
                    XDocument xDoc = XDocument.Load(jobFolder.FullName + "\\manifest.xml");
                    Log("manifest loaded");
                    if (chkSetNewSolutionId.IsChecked.Value)
                    {
                        xDoc.Root.Attribute("SolutionId").Value = jobGuid.ToString("D");
                        Log("solution id set to " + jobGuid.ToString("D"));
                    }
                    if (chkRemoveAllDlls.IsChecked.Value)
                    {
                        var xAssemblies = xDoc.Root.Descendants(xDoc.Root.GetDefaultNamespace() + "Assemblies");
                        xAssemblies.Remove();
                        Log("assemblies element removed from manifest");
                        jobFolder.EnumerateFiles("*.dll").ToList().ForEach(dll => { File.SetAttributes(dll.FullName, FileAttributes.Normal); File.Delete(dll.FullName); });
                        Log("all dll files deleted");
                    }
                    xDoc.Save(jobFolder.FullName + "\\manifest.xml");
                    Log("updated manifest file saved");

                    //repackage as a new WSP or overwrite source file
                    string wspFileName = txtNewFileName.Text.Replace("{filename}", fi.Name.Remove(fi.Name.Length - 4)) + ".wsp";
                    Log("new wsp file name is " + wspFileName);
                    //Build Dictionary<string,string> for all cab files
                    DDFBuilder.Build(jobFolder.FullName, wspFileName);
                    Log("ddf file built");

                    compressor.SwitchCompression(CabLib.Compress.eCompress.MSZIP);
                    compressor.CompressFolder(jobFolder.FullName, fi.Directory.FullName + "\\" + wspFileName, null, true, true, int.MaxValue);
                    Log("cabinet file craeted");


                    jobFolder.EnumerateFiles("*.*", SearchOption.AllDirectories).ToList().ForEach(dll => { File.SetAttributes(dll.FullName, FileAttributes.Normal); });
                    System.IO.Directory.Delete(jobFolder.FullName, true);
                    Log("temp job folder deleted");
                    Log("i'm done. what's next?");
                }
            }
            catch (Exception ex)
            {
                Log("oops! something went wrong, " + ex.ToString());
            }
        }