public void ReferenceTemplateImage_Template(string[] splitWimNames, RefFlags refFlags = RefFlags.DEFAULT, bool failure = false) { string[] splitWims = splitWimNames.Select(x => Path.Combine(TestSetup.SampleDir, x)).ToArray(); string destDir = Path.Combine(Path.GetTempPath(), Path.GetRandomFileName()); 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.EXTRACT_IMAGE_BEGIN: { ProgressInfo_Extract m = (ProgressInfo_Extract)info; Assert.IsNotNull(m); _checked[0] = true; } break; case ProgressMsg.EXTRACT_IMAGE_END: { ProgressInfo_Extract m = (ProgressInfo_Extract)info; Assert.IsNotNull(m); _checked[1] = true; } break; case ProgressMsg.EXTRACT_FILE_STRUCTURE: { ProgressInfo_Extract m = (ProgressInfo_Extract)info; Assert.IsNotNull(m); _checked[2] = true; } break; case ProgressMsg.EXTRACT_STREAMS: { ProgressInfo_Extract m = (ProgressInfo_Extract)info; Assert.IsNotNull(m); _checked[3] = true; } break; case ProgressMsg.EXTRACT_METADATA: { ProgressInfo_Extract m = (ProgressInfo_Extract)info; Assert.IsNotNull(m); _checked[4] = true; } break; } return(CallbackStatus.CONTINUE); } try { using (Wim wim = Wim.OpenWim(splitWims[0], OpenFlags.DEFAULT, ProgressCallback)) { var leftSplitWims = splitWims.Skip(1); wim.ReferenceResourceFiles(leftSplitWims, refFlags, OpenFlags.DEFAULT); wim.ExtractImage(1, destDir, ExtractFlags.NO_ACLS); } } catch (WimLibException) { if (failure) { return; } else { Assert.Fail(); } } Assert.IsTrue(_checked.All(x => x)); TestHelper.CheckFileSystem(SampleSet.Src03, destDir); } finally { if (Directory.Exists(destDir)) { Directory.Delete(destDir, true); } } }
public void ExtractImage_Template(string wimFileName) { string wimFile = Path.Combine(TestSetup.SampleDir, wimFileName); 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.EXTRACT_IMAGE_BEGIN: { ProgressInfo_Extract m = (ProgressInfo_Extract)info; Assert.IsNotNull(m); Assert.IsTrue(m.ImageName.Equals("Sample", StringComparison.Ordinal)); _checked[0] = true; } break; case ProgressMsg.EXTRACT_IMAGE_END: { ProgressInfo_Extract m = (ProgressInfo_Extract)info; Assert.IsNotNull(m); Assert.IsTrue(m.ImageName.Equals("Sample", StringComparison.Ordinal)); _checked[1] = true; } break; case ProgressMsg.EXTRACT_FILE_STRUCTURE: { ProgressInfo_Extract m = (ProgressInfo_Extract)info; Assert.IsNotNull(m); Assert.IsTrue(m.ImageName.Equals("Sample", StringComparison.Ordinal)); _checked[2] = true; } break; case ProgressMsg.EXTRACT_STREAMS: { ProgressInfo_Extract m = (ProgressInfo_Extract)info; Assert.IsNotNull(m); Assert.IsTrue(m.ImageName.Equals("Sample", StringComparison.Ordinal)); _checked[3] = true; } break; case ProgressMsg.EXTRACT_METADATA: { ProgressInfo_Extract m = (ProgressInfo_Extract)info; Assert.IsNotNull(m); Assert.IsTrue(m.ImageName.Equals("Sample", StringComparison.Ordinal)); _checked[4] = true; } break; } return(CallbackStatus.CONTINUE); } using (Wim wim = Wim.OpenWim(wimFile, OpenFlags.DEFAULT)) { wim.RegisterCallback(ProgressCallback); WimInfo wi = wim.GetWimInfo(); Assert.IsTrue(wi.ImageCount == 1); wim.ExtractImage(1, destDir, ExtractFlags.DEFAULT); } Assert.IsTrue(_checked.All(x => x)); TestHelper.CheckFileSystem(SampleSet.Src01, destDir); } finally { if (Directory.Exists(destDir)) { Directory.Delete(destDir, true); } } }
public bool ApplyImage(string wimFile, int imageIndex, string Output, IEnumerable <string> referenceWIMs = null, ExtractFlags extractFlags = ExtractFlags.DEFAULT, RefFlags refFlags = RefFlags.DEFAULT, ProgressCallback progressCallback = null) { string title = $"Applying {wimFile.Split('\\').Last()}..."; try { CallbackStatus ProgressCallback(ProgressMsg msg, object info, object progctx) { switch (msg) { case ProgressMsg.EXTRACT_IMAGE_BEGIN: { ProgressInfo_Extract m = (ProgressInfo_Extract)info; } break; case ProgressMsg.EXTRACT_IMAGE_END: { ProgressInfo_Extract m = (ProgressInfo_Extract)info; } break; case ProgressMsg.EXTRACT_FILE_STRUCTURE: { ProgressInfo_Extract m = (ProgressInfo_Extract)info; progressCallback?.Invoke($"Applying file structure ({(int)Math.Round((double)m.CurrentFileCount / m.EndFileCount * 100)}%)", 0, true); } break; case ProgressMsg.EXTRACT_STREAMS: { ProgressInfo_Extract m = (ProgressInfo_Extract)info; progressCallback?.Invoke(title, (int)Math.Round((double)m.CompletedBytes / m.TotalBytes * 100), false); } break; case ProgressMsg.EXTRACT_METADATA: { ProgressInfo_Extract m = (ProgressInfo_Extract)info; progressCallback?.Invoke($"Applying metadata ({(int)Math.Round((double)m.CompletedBytes / m.TotalBytes * 100)}%)", 0, true); } break; } return(CallbackStatus.CONTINUE); } using (Wim wim = Wim.OpenWim(wimFile, OpenFlags.DEFAULT)) { wim.RegisterCallback(ProgressCallback); if (referenceWIMs != null && referenceWIMs.Count() > 0) { wim.ReferenceResourceFiles(referenceWIMs, (ManagedWimLib.RefFlags)refFlags, OpenFlags.DEFAULT); } wim.ExtractImage(imageIndex, Output, (ManagedWimLib.ExtractFlags)extractFlags); } } catch { return(false); } return(true); }
public void ExtractList_Template(string fileName, string[] paths) { 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.EXTRACT_TREE_BEGIN: { ProgressInfo_Extract m = (ProgressInfo_Extract)info; Assert.IsNotNull(m); _checked[0] = true; } break; case ProgressMsg.EXTRACT_TREE_END: { ProgressInfo_Extract m = (ProgressInfo_Extract)info; Assert.IsNotNull(m); _checked[1] = true; } break; case ProgressMsg.EXTRACT_FILE_STRUCTURE: { ProgressInfo_Extract m = (ProgressInfo_Extract)info; Assert.IsNotNull(m); _checked[2] = true; } break; case ProgressMsg.EXTRACT_STREAMS: { ProgressInfo_Extract m = (ProgressInfo_Extract)info; Assert.IsNotNull(m); _checked[3] = true; } break; case ProgressMsg.EXTRACT_METADATA: { ProgressInfo_Extract m = (ProgressInfo_Extract)info; Assert.IsNotNull(m); _checked[4] = true; } break; } return(CallbackStatus.CONTINUE); } string listFile = Path.Combine(destDir, "ListFile.txt"); using (StreamWriter w = new StreamWriter(listFile, false, Encoding.Unicode)) { foreach (string path in paths) { w.WriteLine(path); } } string wimFile = Path.Combine(TestSetup.SampleDir, fileName); using (Wim wim = Wim.OpenWim(wimFile, OpenFlags.DEFAULT)) { wim.RegisterCallback(ProgressCallback); wim.ExtractPathList(1, destDir, listFile, ExtractFlags.GLOB_PATHS); } Assert.IsTrue(_checked.All(x => x)); foreach (string path in paths.Select(x => TestHelper.NormalizePath(x.TrimStart('\\')))) { if (path.IndexOfAny(new char[] { '*', '?' }) == -1) { // No wlidcard Assert.IsTrue(File.Exists(Path.Combine(destDir, path))); } else { // With wildcard string destFullPath = Path.Combine(destDir, path); string[] files = Directory.GetFiles(Path.GetDirectoryName(destFullPath), Path.GetFileName(destFullPath), SearchOption.AllDirectories); Assert.IsTrue(0 < files.Length); } } } finally { if (Directory.Exists(destDir)) { Directory.Delete(destDir, true); } } }