Beispiel #1
0
        public bool CaptureImage(string wimFile, string imageName, string imageDescription, string InputDirectory, CompressionType compressionType = CompressionType.LZX, AddFlags addFlags = AddFlags.DEFAULT, ProgressCallback progressCallback = null)
        {
            string title = $"Creating {wimFile.Split('\\').Last()}";

            try
            {
                CallbackStatus ProgressCallback(ProgressMsg msg, object info, object progctx)
                {
                    switch (msg)
                    {
                    case ProgressMsg.SCAN_BEGIN:
                    {
                        ProgressInfo_Scan m = (ProgressInfo_Scan)info;
                        progressCallback?.Invoke($"Scanning files ({m.NumBytesScanned} bytes scanned, Current directory: {m.CurPath})", 0, true);
                    }
                    break;

                    case ProgressMsg.SCAN_END:
                    {
                        ProgressInfo_Scan m = (ProgressInfo_Scan)info;
                        progressCallback?.Invoke($"Scanning files ({m.NumBytesScanned} bytes scanned, Current directory: {m.CurPath})", 0, true);
                    }
                    break;

                    case ProgressMsg.WRITE_METADATA_BEGIN:
                        break;

                    case ProgressMsg.WRITE_STREAMS:
                    {
                        ProgressInfo_WriteStreams m = (ProgressInfo_WriteStreams)info;
                        progressCallback?.Invoke(title, (int)Math.Round((double)m.CompletedBytes / m.TotalBytes * 100), false);
                    }
                    break;

                    case ProgressMsg.WRITE_METADATA_END:
                        break;
                    }
                    return(CallbackStatus.CONTINUE);
                }

                using (Wim wim = Wim.CreateNewWim((ManagedWimLib.CompressionType)compressionType))
                {
                    wim.RegisterCallback(ProgressCallback);
                    wim.AddImage(InputDirectory, imageName, null, (ManagedWimLib.AddFlags)addFlags);
                    if (!string.IsNullOrEmpty(imageDescription))
                    {
                        wim.SetImageDescription(1, imageDescription);
                    }
                    wim.Write(wimFile, Wim.AllImages, WriteFlags.DEFAULT, Wim.DefaultThreads);
                }
            }
            catch
            {
                return(false);
            }
            return(true);
        }
Beispiel #2
0
        public void JoinProgress_Template(string[] splitWimNames)
        {
            string[] splitWims = splitWimNames.Select(x => Path.Combine(TestSetup.SampleDir, x)).ToArray();
            string   destDir   = Path.Combine(Path.GetTempPath(), Path.GetRandomFileName());
            string   destWim   = Path.Combine(TestSetup.SampleDir, "Dest.wim");

            try
            {
                Directory.CreateDirectory(destDir);

                bool[] _checked = new bool[3];
                for (int i = 0; i < _checked.Length; i++)
                {
                    _checked[i] = false;
                }
                CallbackStatus ProgressCallback(ProgressMsg msg, object info, object progctx)
                {
                    switch (msg)
                    {
                    case ProgressMsg.WRITE_METADATA_BEGIN:
                        Assert.IsNull(info);
                        _checked[0] = true;
                        break;

                    case ProgressMsg.WRITE_METADATA_END:
                        Assert.IsNull(info);
                        _checked[1] = true;
                        break;

                    case ProgressMsg.WRITE_STREAMS:
                    {
                        ProgressInfo_WriteStreams m = (ProgressInfo_WriteStreams)info;
                        Assert.IsNotNull(m);

                        Assert.AreEqual(m.CompressionType, CompressionType.LZX);
                        _checked[2] = true;
                    }
                    break;
                    }
                    return(CallbackStatus.CONTINUE);
                }

                Wim.Join(splitWims, destWim, OpenFlags.DEFAULT, WriteFlags.DEFAULT, ProgressCallback);

                Assert.IsTrue(_checked.All(x => x));

                TestHelper.CheckWimPath(SampleSet.Src03, destWim);
            }
            finally
            {
                if (Directory.Exists(destDir))
                {
                    Directory.Delete(destDir, true);
                }
            }
        }
Beispiel #3
0
        public bool ExportImage(string wimFile, int imageIndex, string outputWIMFile, CompressionType compressionType = CompressionType.LZX, ExportFlags exportFlags = ExportFlags.DEFAULT, ProgressCallback progressCallback = null)
        {
            string title = $"Exporting {wimFile.Split('\\').Last()} - Index {imageIndex}";

            try
            {
                CallbackStatus ProgressCallback(ProgressMsg msg, object info, object progctx)
                {
                    switch (msg)
                    {
                    case ProgressMsg.WRITE_STREAMS:
                    {
                        ProgressInfo_WriteStreams m = (ProgressInfo_WriteStreams)info;
                        progressCallback?.Invoke(title, (int)Math.Round((double)m.CompletedBytes / m.TotalBytes * 100), false);
                    }
                    break;

                    case ProgressMsg.WRITE_METADATA_BEGIN:
                        break;

                    case ProgressMsg.WRITE_METADATA_END:
                        break;
                    }
                    return(CallbackStatus.CONTINUE);
                }

                using (Wim srcWim = Wim.OpenWim(wimFile, OpenFlags.DEFAULT))
                {
                    string imageName = srcWim.GetImageName(imageIndex);

                    using (Wim destWim = Wim.CreateNewWim((ManagedWimLib.CompressionType)compressionType))
                    {
                        destWim.RegisterCallback(ProgressCallback);
                        srcWim.ExportImage(imageIndex, destWim, imageName, null, (ManagedWimLib.ExportFlags)exportFlags);
                        destWim.Write(outputWIMFile, Wim.AllImages, WriteFlags.DEFAULT, Wim.DefaultThreads);
                    }
                }
            }
            catch
            {
                return(false);
            }
            return(true);
        }
        public void ExportImage_Template(string wimFileName, int imageIndex, string destImageName)
        {
            string srcWimPath  = Path.Combine(TestSetup.SampleDir, wimFileName);
            string destDir     = TestHelper.GetTempDir();
            string destWimPath = Path.Combine(destDir, wimFileName);

            try
            {
                Directory.CreateDirectory(destDir);

                bool[] _checked = new bool[3];
                for (int i = 0; i < _checked.Length; i++)
                {
                    _checked[i] = false;
                }
                CallbackStatus ProgressCallback(ProgressMsg msg, object info, object progctx)
                {
                    switch (msg)
                    {
                    case ProgressMsg.WRITE_STREAMS:
                    {
                        ProgressInfo_WriteStreams m = (ProgressInfo_WriteStreams)info;
                        Assert.IsNotNull(m);

                        Assert.AreEqual(m.CompressionType, CompressionType.LZMS);
                        _checked[0] = true;
                    }
                    break;

                    case ProgressMsg.WRITE_METADATA_BEGIN:
                        Assert.IsNull(info);
                        _checked[1] = true;
                        break;

                    case ProgressMsg.WRITE_METADATA_END:
                        Assert.IsNull(info);
                        _checked[2] = true;
                        break;
                    }
                    return(CallbackStatus.CONTINUE);
                }

                using (Wim srcWim = Wim.OpenWim(srcWimPath, OpenFlags.DEFAULT))
                {
                    WimInfo swi = srcWim.GetWimInfo();
                    Assert.IsTrue(swi.ImageCount == 3);

                    string imageName = srcWim.GetImageName(imageIndex);
                    Assert.IsTrue(imageName.Equals(destImageName, StringComparison.Ordinal));

                    using (Wim destWim = Wim.CreateNewWim(CompressionType.LZMS))
                    {
                        destWim.RegisterCallback(ProgressCallback);

                        srcWim.ExportImage(imageIndex, destWim, destImageName, null, ExportFlags.GIFT);
                        destWim.Write(destWimPath, Wim.AllImages, WriteFlags.DEFAULT, Wim.DefaultThreads);
                    }

                    for (int i = 0; i < _checked.Length; i++)
                    {
                        _checked[i] = false;
                    }
                }

                using (Wim destWim = Wim.OpenWim(destWimPath, OpenFlags.DEFAULT))
                {
                    WimInfo dwi = destWim.GetWimInfo();
                    Assert.IsTrue(dwi.ImageCount == 1);
                    string imageName = destWim.GetImageName(1);
                    Assert.IsTrue(imageName.Equals(destImageName, StringComparison.Ordinal));
                }

                long srcSize  = new FileInfo(srcWimPath).Length;
                long destSize = new FileInfo(destWimPath).Length;
                Assert.IsTrue(destSize < srcSize);
            }
            finally
            {
                if (Directory.Exists(destDir))
                {
                    Directory.Delete(destDir, true);
                }
            }
        }
Beispiel #5
0
        public void AddImageMultiSource_Template(CompressionType compType, string wimFileName, AddFlags addFlags = AddFlags.DEFAULT)
        {
            string destDir = TestHelper.GetTempDir();

            try
            {
                bool[] _checked = new bool[5];
                for (int i = 0; i < _checked.Length; i++)
                {
                    _checked[i] = false;
                }
                CallbackStatus ProgressCallback(ProgressMsg msg, object info, object progctx)
                {
                    switch (msg)
                    {
                    case ProgressMsg.SCAN_BEGIN:
                    {
                        ProgressInfo_Scan m = (ProgressInfo_Scan)info;
                        Assert.IsNotNull(m);

                        _checked[0] = true;
                    }
                    break;

                    case ProgressMsg.SCAN_END:
                    {
                        ProgressInfo_Scan m = (ProgressInfo_Scan)info;
                        Assert.IsNotNull(m);

                        _checked[1] = true;
                    }
                    break;

                    case ProgressMsg.WRITE_METADATA_BEGIN:
                        Assert.IsNull(info);
                        _checked[2] = true;
                        break;

                    case ProgressMsg.WRITE_STREAMS:
                    {
                        ProgressInfo_WriteStreams m = (ProgressInfo_WriteStreams)info;
                        Assert.IsNotNull(m);

                        _checked[3] = true;
                    }
                    break;

                    case ProgressMsg.WRITE_METADATA_END:
                        Assert.IsNull(info);
                        _checked[4] = true;
                        break;
                    }
                    return(CallbackStatus.CONTINUE);
                }

                string srcDir1 = Path.Combine(TestSetup.SampleDir, "Src01");
                string srcDir3 = Path.Combine(TestSetup.SampleDir, "Src03");
                string wimFile = Path.Combine(destDir, wimFileName);
                using (Wim wim = Wim.CreateNewWim(compType))
                {
                    wim.RegisterCallback(ProgressCallback);

                    CaptureSource[] srcs = new CaptureSource[]
                    {
                        new CaptureSource(srcDir1, @"\A"),
                        new CaptureSource(srcDir3, @"\Z"),
                    };

                    wim.AddImageMultiSource(srcs, "UnitTest", null, addFlags);
                    wim.Write(wimFile, Wim.AllImages, WriteFlags.DEFAULT, Wim.DefaultThreads);

                    WimInfo wi = wim.GetWimInfo();
                    Assert.IsTrue(wi.ImageCount == 1);
                    Assert.IsTrue(wim.DirExists(1, "A"));
                    Assert.IsTrue(wim.DirExists(1, "Z"));
                }

                for (int i = 0; i < _checked.Length; i++)
                {
                    Assert.IsTrue(_checked[i]);
                }
            }
            finally
            {
                if (Directory.Exists(destDir))
                {
                    Directory.Delete(destDir, true);
                }
            }
        }
Beispiel #6
0
        public void DeleteImage_Template(string wimFileName, int deleteIndex, string deleteImageName)
        {
            string srcWim  = Path.Combine(TestSetup.SampleDir, wimFileName);
            string destDir = Path.Combine(Path.GetTempPath(), Path.GetRandomFileName());
            string destWim = Path.Combine(destDir, wimFileName);

            try
            {
                Directory.CreateDirectory(destDir);
                File.Copy(srcWim, destWim, true);

                bool[] _checked = new bool[2];
                for (int i = 0; i < _checked.Length; i++)
                {
                    _checked[i] = false;
                }
                CallbackStatus ProgressCallback(ProgressMsg msg, object info, object progctx)
                {
                    switch (msg)
                    {
                    case ProgressMsg.WRITE_STREAMS:
                    {
                        ProgressInfo_WriteStreams m = (ProgressInfo_WriteStreams)info;
                        Assert.IsNotNull(m);

                        Assert.AreEqual(m.CompressionType, CompressionType.LZX);
                        _checked[0] = true;
                    }
                    break;

                    case ProgressMsg.RENAME:
                    {
                        ProgressInfo_Rename m = (ProgressInfo_Rename)info;
                        Assert.IsNotNull(m);

                        Assert.IsNotNull(m.From);
                        Assert.IsNotNull(m.To);
                        _checked[1] = true;
                    }
                    break;
                    }
                    return(CallbackStatus.CONTINUE);
                }

                using (Wim wim = Wim.OpenWim(destWim, OpenFlags.WRITE_ACCESS))
                {
                    wim.RegisterCallback(ProgressCallback);

                    WimInfo swi = wim.GetWimInfo();
                    Assert.IsTrue(swi.ImageCount == 3);

                    string imageName = wim.GetImageName(deleteIndex);
                    Assert.IsTrue(imageName.Equals(deleteImageName, StringComparison.Ordinal));

                    wim.DeleteImage(deleteIndex);
                    wim.Overwrite(WriteFlags.DEFAULT, Wim.DefaultThreads);

                    for (int i = 0; i < _checked.Length; i++)
                    {
                        _checked[i] = false;
                    }

                    WimInfo dwi = wim.GetWimInfo();
                    Assert.IsTrue(dwi.ImageCount == 2);
                    for (int i = 1; i <= dwi.ImageCount; i++)
                    {
                        imageName = wim.GetImageName(i);
                        Assert.IsFalse(imageName.Equals(deleteImageName, StringComparison.Ordinal));
                    }
                }
            }
            finally
            {
                if (Directory.Exists(destDir))
                {
                    Directory.Delete(destDir, true);
                }
            }
        }
Beispiel #7
0
        public void AddImage_Template(string wimFileName, CompressionType compType, AddFlags addFlags = AddFlags.DEFAULT)
        {
            string srcDir  = Path.Combine(TestSetup.SampleDir, "Src01");
            string destDir = Path.Combine(Path.GetTempPath(), Path.GetRandomFileName());
            string wimFile = Path.Combine(destDir, wimFileName);

            try
            {
                Directory.CreateDirectory(destDir);

                bool[] _checked = new bool[5];
                for (int i = 0; i < _checked.Length; i++)
                {
                    _checked[i] = false;
                }
                CallbackStatus ProgressCallback(ProgressMsg msg, object info, object progctx)
                {
                    switch (msg)
                    {
                    case ProgressMsg.SCAN_BEGIN:
                    {
                        ProgressInfo_Scan m = (ProgressInfo_Scan)info;
                        Assert.IsNotNull(info);

                        _checked[0] = true;
                    }
                    break;

                    case ProgressMsg.SCAN_END:
                    {
                        ProgressInfo_Scan m = (ProgressInfo_Scan)info;
                        Assert.IsNotNull(info);

                        _checked[1] = true;
                    }
                    break;

                    case ProgressMsg.WRITE_METADATA_BEGIN:
                        Assert.IsNull(info);
                        _checked[2] = true;
                        break;

                    case ProgressMsg.WRITE_STREAMS:
                    {
                        ProgressInfo_WriteStreams m = (ProgressInfo_WriteStreams)info;
                        Assert.IsNotNull(m);

                        _checked[3] = true;
                    }
                    break;

                    case ProgressMsg.WRITE_METADATA_END:
                        Assert.IsNull(info);
                        _checked[4] = true;
                        break;
                    }
                    return(CallbackStatus.CONTINUE);
                }

                using (Wim wim = Wim.CreateNewWim(compType))
                {
                    wim.RegisterCallback(ProgressCallback);
                    wim.AddImage(srcDir, "UnitTest", null, addFlags);
                    wim.Write(wimFile, Wim.AllImages, WriteFlags.DEFAULT, Wim.DefaultThreads);

                    WimInfo wi = wim.GetWimInfo();
                    Assert.IsTrue(wi.ImageCount == 1);
                }

                Assert.IsTrue(_checked.All(x => x));

                TestHelper.CheckWimPath(SampleSet.Src01, wimFile);
            }
            finally
            {
                if (Directory.Exists(destDir))
                {
                    Directory.Delete(destDir, true);
                }
            }
        }
Beispiel #8
0
        public void SetOutputPackCompressionType_Template(string wimFileName, CompressionType compType)
        {
            string destDir = TestHelper.GetTempDir();

            try
            {
                Directory.CreateDirectory(destDir);

                bool[] _checked = new bool[5];
                for (int i = 0; i < _checked.Length; i++)
                {
                    _checked[i] = false;
                }
                CallbackStatus ProgressCallback(ProgressMsg msg, object info, object progctx)
                {
                    switch (msg)
                    {
                    case ProgressMsg.SCAN_BEGIN:
                    {
                        ProgressInfo_Scan m = (ProgressInfo_Scan)info;
                        Assert.IsNotNull(m);

                        _checked[0] = true;
                    }
                    break;

                    case ProgressMsg.SCAN_END:
                    {
                        ProgressInfo_Scan m = (ProgressInfo_Scan)info;
                        Assert.IsNotNull(m);

                        _checked[1] = true;
                    }
                    break;

                    case ProgressMsg.WRITE_METADATA_BEGIN:
                        Assert.IsNull(info);
                        _checked[2] = true;
                        break;

                    case ProgressMsg.WRITE_STREAMS:
                    {
                        ProgressInfo_WriteStreams m = (ProgressInfo_WriteStreams)info;
                        Assert.IsNotNull(m);

                        _checked[3] = true;
                    }
                    break;

                    case ProgressMsg.WRITE_METADATA_END:
                        Assert.IsNull(info);
                        _checked[4] = true;
                        break;
                    }
                    return(CallbackStatus.CONTINUE);
                }

                // Capture Wim
                string srcDir  = Path.Combine(TestSetup.SampleDir, "Src01");
                string wimFile = Path.Combine(destDir, wimFileName);
                using (Wim wim = Wim.CreateNewWim(CompressionType.NONE))
                {
                    wim.RegisterCallback(ProgressCallback);
                    wim.SetOutputCompressionType(compType);
                    wim.SetOutputPackCompressionType(compType);

                    wim.AddImage(srcDir, "UnitTest", null, AddFlags.DEFAULT);
                    wim.Write(wimFile, Wim.AllImages, WriteFlags.SOLID, Wim.DefaultThreads);
                }

                using (Wim wim = Wim.OpenWim(wimFile, OpenFlags.DEFAULT))
                {
                    WimInfo wi = wim.GetWimInfo();
                    Assert.AreEqual(wi.ImageCount, 1u);
                    Assert.AreEqual(wi.CompressionType, compType);
                }

                TestHelper.CheckWimPath(SampleSet.Src01, wimFile);
            }
            finally
            {
                if (Directory.Exists(destDir))
                {
                    Directory.Delete(destDir, true);
                }
            }
        }