diff --git a/src/Lessmsi.Tests/MiscTests.cs b/src/Lessmsi.Tests/MiscTests.cs
index 3e468e9..035eade 100644
--- a/src/Lessmsi.Tests/MiscTests.cs
+++ b/src/Lessmsi.Tests/MiscTests.cs
@@ -1,4 +1,5 @@
using Xunit;
+using LessIO;
namespace LessMsi.Tests
{
@@ -59,6 +60,39 @@ public void ExtractFromExternalCab()
ExtractAndCompareToMaster("msi_with_external_cab.msi");
}
+ ///
+ /// This test is for github issue 169: https://github.com/activescott/lessmsi/issues/169
+ ///
+ [Fact]
+ public void ExtractFromExternalCabWithSourceDirAndOutputDirSame()
+ {
+ var msiFileName = "vcredist.msi";
+ var cabFileName = "vcredis1.cab";
+ // put the msi and cab into the output directory (as this is all about having the source dir and output dir be the same):
+ var outputDir = GetTestOutputDir(Path.Empty, msiFileName);
+ if (FileSystem.Exists(outputDir))
+ {
+ FileSystem.RemoveDirectory(outputDir, true);
+ }
+ FileSystem.CreateDirectory(outputDir);
+ var msiFileOutputDir = Path.Combine(outputDir, msiFileName);
+ FileSystem.Copy(GetMsiTestFile(msiFileName), msiFileOutputDir);
+ FileSystem.Copy(GetMsiTestFile(cabFileName), Path.Combine(outputDir, cabFileName));
+
+ // run test normally:
+ var cleanOutputDirectoryBeforeExtracting = false;
+ //var actualFileEntries = ExtractFilesFromMsi(msiFileName, null, outputDir, true, cleanOutputDirectoryBeforeExtracting);
+ LessMsi.Msi.Wixtracts.ExtractFiles(msiFileOutputDir, outputDir.PathString);
+ // build actual file entries extracted
+ var actualFileEntries = FileEntryGraph.GetActualEntries(outputDir.PathString, msiFileName);
+ // this test has the original msi and cab as the first two entries and their times change. so we drop them here:
+ actualFileEntries.Entries.RemoveRange(0, 2);
+ // dump to actual dir (for debugging and updating tests)
+ actualFileEntries.Save(GetActualOutputFile(msiFileName));
+ var expectedEntries = GetExpectedEntriesForMsi(msiFileName);
+ AssertAreEqual(expectedEntries, actualFileEntries);
+ }
+
///
/// This one demonstrates a problem were paths are screwed up.
/// Note that the output path ends up being SourceDir\SlikSvn\bin\Windows\winsxs\... and it should be just \windows\winsxs\...
diff --git a/src/Lessmsi.Tests/TestBase.cs b/src/Lessmsi.Tests/TestBase.cs
index 42b2cb4..b24aa4f 100644
--- a/src/Lessmsi.Tests/TestBase.cs
+++ b/src/Lessmsi.Tests/TestBase.cs
@@ -37,6 +37,11 @@ protected FileEntryGraph ExtractFilesFromMsi(string msiFileName, string[] fileNa
return ExtractFilesFromMsi(msiFileName, fileNamesToExtractOrNull, new Path(outputDir), true);
}
+ protected FileEntryGraph ExtractFilesFromMsi(string msiFileName, string[] fileNamesToExtractOrNull, Path outputDir, bool returnFileEntryGraph)
+ {
+ return ExtractFilesFromMsi(msiFileName, fileNamesToExtractOrNull, outputDir, true, true);
+ }
+
///
/// Extracts some or all of the files from the specified MSI and returns a representing the files that were extracted.
///
@@ -44,11 +49,12 @@ protected FileEntryGraph ExtractFilesFromMsi(string msiFileName, string[] fileNa
/// The files to extract from the MSI or null to extract all files.
/// A relative directory to extract output to or an empty string to use the default output directory.
/// True to return the . Otherwise null will be returned.
- protected FileEntryGraph ExtractFilesFromMsi(string msiFileName, string[] fileNamesToExtractOrNull, Path outputDir, bool returnFileEntryGraph)
+ /// True to delete the output directory before extracting.
+ protected FileEntryGraph ExtractFilesFromMsi(string msiFileName, string[] fileNamesToExtractOrNull, Path outputDir, bool returnFileEntryGraph, bool cleanOutputDirectoryBeforeExtracting)
{
outputDir = GetTestOutputDir(outputDir, msiFileName);
- if (FileSystem.Exists(outputDir))
+ if (cleanOutputDirectoryBeforeExtracting && FileSystem.Exists(outputDir))
{
FileSystem.RemoveDirectory(outputDir, true);
}
@@ -210,7 +216,7 @@ protected FileEntryGraph GetExpectedEntriesForMsi(string forMsi)
return FileEntryGraph.Load(GetExpectedOutputFile(forMsi), forMsi);
}
- private Path GetMsiTestFile(string msiFileName)
+ protected Path GetMsiTestFile(string msiFileName)
{
return Path.Combine(AppPath, "TestFiles", "MsiInput", msiFileName);
}
diff --git a/src/Lessmsi.Tests/TestFiles/ExpectedOutput/vcredist.msi.expected.csv b/src/Lessmsi.Tests/TestFiles/ExpectedOutput/vcredist.msi.expected.csv
new file mode 100644
index 0000000..33d5f79
--- /dev/null
+++ b/src/Lessmsi.Tests/TestFiles/ExpectedOutput/vcredist.msi.expected.csv
@@ -0,0 +1,97 @@
+Path,Size,CreationTime,LastWriteTime,Attributes
+\SourceDir\Windows\winsxs\x86_policy.8.0.microsoft.vc80.openmp_1fc8b3b9a1e18e3b_8.0.50727.6195_none_6b8a9829b015faa3\8.0.50727.6195.cat,7346,2011-05-14T02:13:12.0000000,2011-05-14T02:13:12.0000000,Archive
+\SourceDir\Windows\winsxs\x86_policy.8.0.microsoft.vc80.openmp_1fc8b3b9a1e18e3b_8.0.50727.6195_none_6b8a9829b015faa3\8.0.50727.6195.policy,810,2011-05-13T20:17:02.0000000,2011-05-13T20:17:02.0000000,Archive
+\SourceDir\Windows\winsxs\x86_policy.8.0.microsoft.vc80.mfc_1fc8b3b9a1e18e3b_8.0.50727.6195_none_49f31fd71413cdc6\8.0.50727.6195.cat,7340,2011-05-14T02:02:56.0000000,2011-05-14T02:02:56.0000000,Archive
+\SourceDir\Windows\winsxs\x86_policy.8.0.microsoft.vc80.mfc_1fc8b3b9a1e18e3b_8.0.50727.6195_none_49f31fd71413cdc6\8.0.50727.6195.policy,804,2011-05-13T20:04:22.0000000,2011-05-13T20:04:22.0000000,Archive
+\SourceDir\Windows\winsxs\x86_policy.8.0.microsoft.vc80.mfcloc_1fc8b3b9a1e18e3b_8.0.50727.6195_none_4db63e267dcf142c\8.0.50727.6195.cat,7346,2011-05-14T02:13:12.0000000,2011-05-14T02:13:12.0000000,Archive
+\SourceDir\Windows\winsxs\x86_policy.8.0.microsoft.vc80.mfcloc_1fc8b3b9a1e18e3b_8.0.50727.6195_none_4db63e267dcf142c\8.0.50727.6195.policy,810,2011-05-13T20:04:24.0000000,2011-05-13T20:04:24.0000000,Archive
+\SourceDir\Windows\winsxs\x86_policy.8.0.microsoft.vc80.crt_1fc8b3b9a1e18e3b_8.0.50727.6195_none_517205a10f4550e3\8.0.50727.6195.cat,7340,2011-05-14T02:13:12.0000000,2011-05-14T02:13:12.0000000,Archive
+\SourceDir\Windows\winsxs\x86_policy.8.0.microsoft.vc80.crt_1fc8b3b9a1e18e3b_8.0.50727.6195_none_517205a10f4550e3\8.0.50727.6195.policy,804,2011-05-13T18:36:58.0000000,2011-05-13T18:36:58.0000000,Archive
+\SourceDir\Windows\winsxs\x86_policy.8.0.microsoft.vc80.atl_1fc8b3b9a1e18e3b_8.0.50727.6195_none_4de39e0d118f2d3f\8.0.50727.6195.cat,7340,2011-05-14T02:13:12.0000000,2011-05-14T02:13:12.0000000,Archive
+\SourceDir\Windows\winsxs\x86_policy.8.0.microsoft.vc80.atl_1fc8b3b9a1e18e3b_8.0.50727.6195_none_4de39e0d118f2d3f\8.0.50727.6195.policy,804,2011-05-13T18:37:58.0000000,2011-05-13T18:37:58.0000000,Archive
+\SourceDir\Windows\winsxs\x86_Microsoft.VC80.OpenMP_1fc8b3b9a1e18e3b_8.0.50727.6195_x-ww_452bf920\vcomp.dll,65536,2011-05-13T20:17:00.0000000,2011-05-13T20:17:00.0000000,Archive
+\SourceDir\Windows\winsxs\x86_microsoft.vc80.openmp_1fc8b3b9a1e18e3b_8.0.50727.6195_none_3b1209fdc9ac7774\vcomp.dll,65536,2011-05-13T20:17:00.0000000,2011-05-13T20:17:00.0000000,Archive
+\SourceDir\Windows\winsxs\x86_microsoft.vc80.openmp_1fc8b3b9a1e18e3b_8.0.50727.6195_none_3b1209fdc9ac7774\x86_Microsoft.VC80.OpenMP_1fc8b3b9a1e18e3b_8.0.50727.6195_x-ww_452bf920.cat,7331,2011-05-14T02:12:52.0000000,2011-05-14T02:12:52.0000000,Archive
+\SourceDir\Windows\winsxs\x86_microsoft.vc80.openmp_1fc8b3b9a1e18e3b_8.0.50727.6195_none_3b1209fdc9ac7774\x86_Microsoft.VC80.OpenMP_1fc8b3b9a1e18e3b_8.0.50727.6195_x-ww_452bf920.manifest,469,2011-05-13T20:17:02.0000000,2011-05-13T20:17:02.0000000,Archive
+\SourceDir\Windows\winsxs\x86_Microsoft.VC80.MFC_1fc8b3b9a1e18e3b_8.0.50727.6195_x-ww_150c9e8b\mfc80.dll,1101824,2011-05-13T20:04:20.0000000,2011-05-13T20:04:20.0000000,Archive
+\SourceDir\Windows\winsxs\x86_Microsoft.VC80.MFC_1fc8b3b9a1e18e3b_8.0.50727.6195_x-ww_150c9e8b\mfc80u.dll,1093120,2011-05-13T20:04:20.0000000,2011-05-13T20:04:20.0000000,Archive
+\SourceDir\Windows\winsxs\x86_Microsoft.VC80.MFC_1fc8b3b9a1e18e3b_8.0.50727.6195_x-ww_150c9e8b\mfcm80.dll,69632,2011-05-14T01:23:14.0000000,2011-05-14T01:23:14.0000000,Archive
+\SourceDir\Windows\winsxs\x86_Microsoft.VC80.MFC_1fc8b3b9a1e18e3b_8.0.50727.6195_x-ww_150c9e8b\mfcm80u.dll,57856,2011-05-14T01:06:18.0000000,2011-05-14T01:06:18.0000000,Archive
+\SourceDir\Windows\winsxs\x86_microsoft.vc80.mfc_1fc8b3b9a1e18e3b_8.0.50727.6195_none_cbf5e994470a1a8f\mfc80.dll,1101824,2011-05-13T20:04:20.0000000,2011-05-13T20:04:20.0000000,Archive
+\SourceDir\Windows\winsxs\x86_microsoft.vc80.mfc_1fc8b3b9a1e18e3b_8.0.50727.6195_none_cbf5e994470a1a8f\mfc80u.dll,1093120,2011-05-13T20:04:20.0000000,2011-05-13T20:04:20.0000000,Archive
+\SourceDir\Windows\winsxs\x86_microsoft.vc80.mfc_1fc8b3b9a1e18e3b_8.0.50727.6195_none_cbf5e994470a1a8f\mfcm80.dll,69632,2011-05-14T01:23:14.0000000,2011-05-14T01:23:14.0000000,Archive
+\SourceDir\Windows\winsxs\x86_microsoft.vc80.mfc_1fc8b3b9a1e18e3b_8.0.50727.6195_none_cbf5e994470a1a8f\mfcm80u.dll,57856,2011-05-14T01:06:18.0000000,2011-05-14T01:06:18.0000000,Archive
+\SourceDir\Windows\winsxs\x86_microsoft.vc80.mfc_1fc8b3b9a1e18e3b_8.0.50727.6195_none_cbf5e994470a1a8f\x86_Microsoft.VC80.MFC_1fc8b3b9a1e18e3b_8.0.50727.6195_x-ww_150c9e8b.cat,7318,2011-05-14T02:02:56.0000000,2011-05-14T02:02:56.0000000,Archive
+\SourceDir\Windows\winsxs\x86_microsoft.vc80.mfc_1fc8b3b9a1e18e3b_8.0.50727.6195_none_cbf5e994470a1a8f\x86_Microsoft.VC80.MFC_1fc8b3b9a1e18e3b_8.0.50727.6195_x-ww_150c9e8b.manifest,2372,2011-05-14T02:06:06.0000000,2011-05-14T02:06:06.0000000,Archive
+\SourceDir\Windows\winsxs\x86_Microsoft.VC80.MFCLOC_1fc8b3b9a1e18e3b_8.0.50727.6195_x-ww_6a5bb789\mfc80CHS.dll,40960,2011-05-13T19:45:58.0000000,2011-05-13T19:45:58.0000000,Archive
+\SourceDir\Windows\winsxs\x86_Microsoft.VC80.MFCLOC_1fc8b3b9a1e18e3b_8.0.50727.6195_x-ww_6a5bb789\mfc80CHT.dll,45056,2011-05-13T19:45:58.0000000,2011-05-13T19:45:58.0000000,Archive
+\SourceDir\Windows\winsxs\x86_Microsoft.VC80.MFCLOC_1fc8b3b9a1e18e3b_8.0.50727.6195_x-ww_6a5bb789\mfc80DEU.dll,65536,2011-05-13T19:45:56.0000000,2011-05-13T19:45:56.0000000,Archive
+\SourceDir\Windows\winsxs\x86_Microsoft.VC80.MFCLOC_1fc8b3b9a1e18e3b_8.0.50727.6195_x-ww_6a5bb789\mfc80ENU.dll,57344,2011-05-13T19:45:58.0000000,2011-05-13T19:45:58.0000000,Archive
+\SourceDir\Windows\winsxs\x86_Microsoft.VC80.MFCLOC_1fc8b3b9a1e18e3b_8.0.50727.6195_x-ww_6a5bb789\mfc80ESP.dll,61440,2011-05-13T19:45:58.0000000,2011-05-13T19:45:58.0000000,Archive
+\SourceDir\Windows\winsxs\x86_Microsoft.VC80.MFCLOC_1fc8b3b9a1e18e3b_8.0.50727.6195_x-ww_6a5bb789\mfc80FRA.dll,61440,2011-05-13T19:45:56.0000000,2011-05-13T19:45:56.0000000,Archive
+\SourceDir\Windows\winsxs\x86_Microsoft.VC80.MFCLOC_1fc8b3b9a1e18e3b_8.0.50727.6195_x-ww_6a5bb789\mfc80ITA.dll,61440,2011-05-13T19:45:58.0000000,2011-05-13T19:45:58.0000000,Archive
+\SourceDir\Windows\winsxs\x86_Microsoft.VC80.MFCLOC_1fc8b3b9a1e18e3b_8.0.50727.6195_x-ww_6a5bb789\mfc80JPN.dll,49152,2011-05-13T19:45:56.0000000,2011-05-13T19:45:56.0000000,Archive
+\SourceDir\Windows\winsxs\x86_Microsoft.VC80.MFCLOC_1fc8b3b9a1e18e3b_8.0.50727.6195_x-ww_6a5bb789\mfc80KOR.dll,49152,2011-05-13T19:45:58.0000000,2011-05-13T19:45:58.0000000,Archive
+\SourceDir\Windows\winsxs\x86_microsoft.vc80.mfcloc_1fc8b3b9a1e18e3b_8.0.50727.6195_none_03ce2c72205943d3\mfc80CHS.dll,40960,2011-05-13T19:45:58.0000000,2011-05-13T19:45:58.0000000,Archive
+\SourceDir\Windows\winsxs\x86_microsoft.vc80.mfcloc_1fc8b3b9a1e18e3b_8.0.50727.6195_none_03ce2c72205943d3\mfc80CHT.dll,45056,2011-05-13T19:45:58.0000000,2011-05-13T19:45:58.0000000,Archive
+\SourceDir\Windows\winsxs\x86_microsoft.vc80.mfcloc_1fc8b3b9a1e18e3b_8.0.50727.6195_none_03ce2c72205943d3\mfc80DEU.dll,65536,2011-05-13T19:45:56.0000000,2011-05-13T19:45:56.0000000,Archive
+\SourceDir\Windows\winsxs\x86_microsoft.vc80.mfcloc_1fc8b3b9a1e18e3b_8.0.50727.6195_none_03ce2c72205943d3\mfc80ENU.dll,57344,2011-05-13T19:45:58.0000000,2011-05-13T19:45:58.0000000,Archive
+\SourceDir\Windows\winsxs\x86_microsoft.vc80.mfcloc_1fc8b3b9a1e18e3b_8.0.50727.6195_none_03ce2c72205943d3\mfc80ESP.dll,61440,2011-05-13T19:45:58.0000000,2011-05-13T19:45:58.0000000,Archive
+\SourceDir\Windows\winsxs\x86_microsoft.vc80.mfcloc_1fc8b3b9a1e18e3b_8.0.50727.6195_none_03ce2c72205943d3\mfc80FRA.dll,61440,2011-05-13T19:45:56.0000000,2011-05-13T19:45:56.0000000,Archive
+\SourceDir\Windows\winsxs\x86_microsoft.vc80.mfcloc_1fc8b3b9a1e18e3b_8.0.50727.6195_none_03ce2c72205943d3\mfc80ITA.dll,61440,2011-05-13T19:45:58.0000000,2011-05-13T19:45:58.0000000,Archive
+\SourceDir\Windows\winsxs\x86_microsoft.vc80.mfcloc_1fc8b3b9a1e18e3b_8.0.50727.6195_none_03ce2c72205943d3\mfc80JPN.dll,49152,2011-05-13T19:45:56.0000000,2011-05-13T19:45:56.0000000,Archive
+\SourceDir\Windows\winsxs\x86_microsoft.vc80.mfcloc_1fc8b3b9a1e18e3b_8.0.50727.6195_none_03ce2c72205943d3\mfc80KOR.dll,49152,2011-05-13T19:45:58.0000000,2011-05-13T19:45:58.0000000,Archive
+\SourceDir\Windows\winsxs\x86_microsoft.vc80.mfcloc_1fc8b3b9a1e18e3b_8.0.50727.6195_none_03ce2c72205943d3\x86_Microsoft.VC80.MFCLOC_1fc8b3b9a1e18e3b_8.0.50727.6195_x-ww_6a5bb789.cat,7331,2011-05-14T02:12:52.0000000,2011-05-14T02:12:52.0000000,Archive
+\SourceDir\Windows\winsxs\x86_microsoft.vc80.mfcloc_1fc8b3b9a1e18e3b_8.0.50727.6195_none_03ce2c72205943d3\x86_Microsoft.VC80.MFCLOC_1fc8b3b9a1e18e3b_8.0.50727.6195_x-ww_6a5bb789.manifest,1240,2011-05-13T20:04:24.0000000,2011-05-13T20:04:24.0000000,Archive
+\SourceDir\Windows\winsxs\x86_Microsoft.VC80.CRT_1fc8b3b9a1e18e3b_8.0.50727.6195_x-ww_44262b86\msvcm80.dll,479232,2011-05-14T01:11:32.0000000,2011-05-14T01:11:32.0000000,Archive
+\SourceDir\Windows\winsxs\x86_Microsoft.VC80.CRT_1fc8b3b9a1e18e3b_8.0.50727.6195_x-ww_44262b86\msvcp80.dll,554832,2011-05-14T01:12:34.0000000,2011-05-14T01:12:34.0000000,Archive
+\SourceDir\Windows\winsxs\x86_Microsoft.VC80.CRT_1fc8b3b9a1e18e3b_8.0.50727.6195_x-ww_44262b86\msvcr80.dll,632656,2011-05-14T01:17:40.0000000,2011-05-14T01:17:40.0000000,Archive
+\SourceDir\Windows\winsxs\x86_microsoft.vc80.crt_1fc8b3b9a1e18e3b_8.0.50727.6195_none_d09154e044272b9a\msvcm80.dll,479232,2011-05-14T01:11:32.0000000,2011-05-14T01:11:32.0000000,Archive
+\SourceDir\Windows\winsxs\x86_microsoft.vc80.crt_1fc8b3b9a1e18e3b_8.0.50727.6195_none_d09154e044272b9a\msvcp80.dll,554832,2011-05-14T01:12:34.0000000,2011-05-14T01:12:34.0000000,Archive
+\SourceDir\Windows\winsxs\x86_microsoft.vc80.crt_1fc8b3b9a1e18e3b_8.0.50727.6195_none_d09154e044272b9a\msvcr80.dll,632656,2011-05-14T01:17:40.0000000,2011-05-14T01:17:40.0000000,Archive
+\SourceDir\Windows\winsxs\x86_microsoft.vc80.crt_1fc8b3b9a1e18e3b_8.0.50727.6195_none_d09154e044272b9a\x86_Microsoft.VC80.CRT_1fc8b3b9a1e18e3b_8.0.50727.6195_x-ww_44262b86.cat,7318,2011-05-14T02:02:56.0000000,2011-05-14T02:02:56.0000000,Archive
+\SourceDir\Windows\winsxs\x86_microsoft.vc80.crt_1fc8b3b9a1e18e3b_8.0.50727.6195_none_d09154e044272b9a\x86_Microsoft.VC80.CRT_1fc8b3b9a1e18e3b_8.0.50727.6195_x-ww_44262b86.manifest,1870,2011-05-14T02:06:04.0000000,2011-05-14T02:06:04.0000000,Archive
+\SourceDir\Windows\winsxs\x86_Microsoft.VC80.ATL_1fc8b3b9a1e18e3b_8.0.50727.6195_x-ww_a4c618fa\ATL80.dll,97280,2011-05-13T18:37:56.0000000,2011-05-13T18:37:56.0000000,Archive
+\SourceDir\Windows\winsxs\x86_microsoft.vc80.atl_1fc8b3b9a1e18e3b_8.0.50727.6195_none_d1cb102c435421de\ATL80.dll,97280,2011-05-13T18:37:56.0000000,2011-05-13T18:37:56.0000000,Archive
+\SourceDir\Windows\winsxs\x86_microsoft.vc80.atl_1fc8b3b9a1e18e3b_8.0.50727.6195_none_d1cb102c435421de\x86_Microsoft.VC80.ATL_1fc8b3b9a1e18e3b_8.0.50727.6195_x-ww_a4c618fa.cat,7318,2011-05-14T02:02:56.0000000,2011-05-14T02:02:56.0000000,Archive
+\SourceDir\Windows\winsxs\x86_microsoft.vc80.atl_1fc8b3b9a1e18e3b_8.0.50727.6195_none_d1cb102c435421de\x86_Microsoft.VC80.ATL_1fc8b3b9a1e18e3b_8.0.50727.6195_x-ww_a4c618fa.manifest,466,2011-05-13T18:37:58.0000000,2011-05-13T18:37:58.0000000,Archive
+\SourceDir\Windows\winsxs\Policies\x86_policy.8.0.Microsoft.VC80.OpenMP_1fc8b3b9a1e18e3b_x-ww_7d81c9f9\8.0.50727.6195.cat,7346,2011-05-14T02:13:12.0000000,2011-05-14T02:13:12.0000000,Archive
+\SourceDir\Windows\winsxs\Policies\x86_policy.8.0.Microsoft.VC80.OpenMP_1fc8b3b9a1e18e3b_x-ww_7d81c9f9\8.0.50727.6195.policy,810,2011-05-13T20:17:02.0000000,2011-05-13T20:17:02.0000000,Archive
+\SourceDir\Windows\winsxs\Policies\x86_policy.8.0.Microsoft.VC80.MFC_1fc8b3b9a1e18e3b_x-ww_0f75c32e\8.0.50727.6195.cat,7340,2011-05-14T02:02:56.0000000,2011-05-14T02:02:56.0000000,Archive
+\SourceDir\Windows\winsxs\Policies\x86_policy.8.0.Microsoft.VC80.MFC_1fc8b3b9a1e18e3b_x-ww_0f75c32e\8.0.50727.6195.policy,804,2011-05-13T20:04:22.0000000,2011-05-13T20:04:22.0000000,Archive
+\SourceDir\Windows\winsxs\Policies\x86_policy.8.0.Microsoft.VC80.MFCLOC_1fc8b3b9a1e18e3b_x-ww_caeee150\8.0.50727.6195.cat,7346,2011-05-14T02:13:12.0000000,2011-05-14T02:13:12.0000000,Archive
+\SourceDir\Windows\winsxs\Policies\x86_policy.8.0.Microsoft.VC80.MFCLOC_1fc8b3b9a1e18e3b_x-ww_caeee150\8.0.50727.6195.policy,810,2011-05-13T20:04:24.0000000,2011-05-13T20:04:24.0000000,Archive
+\SourceDir\Windows\winsxs\Policies\x86_policy.8.0.Microsoft.VC80.CRT_1fc8b3b9a1e18e3b_x-ww_77c24773\8.0.50727.6195.cat,7340,2011-05-14T02:13:12.0000000,2011-05-14T02:13:12.0000000,Archive
+\SourceDir\Windows\winsxs\Policies\x86_policy.8.0.Microsoft.VC80.CRT_1fc8b3b9a1e18e3b_x-ww_77c24773\8.0.50727.6195.policy,804,2011-05-13T18:36:58.0000000,2011-05-13T18:36:58.0000000,Archive
+\SourceDir\Windows\winsxs\Policies\x86_policy.8.0.Microsoft.VC80.ATL_1fc8b3b9a1e18e3b_x-ww_5f0bbcff\8.0.50727.6195.cat,7340,2011-05-14T02:13:12.0000000,2011-05-14T02:13:12.0000000,Archive
+\SourceDir\Windows\winsxs\Policies\x86_policy.8.0.Microsoft.VC80.ATL_1fc8b3b9a1e18e3b_x-ww_5f0bbcff\8.0.50727.6195.policy,804,2011-05-13T18:37:58.0000000,2011-05-13T18:37:58.0000000,Archive
+\SourceDir\Windows\winsxs\Manifests\x86_Microsoft.VC80.ATL_1fc8b3b9a1e18e3b_8.0.50727.6195_x-ww_a4c618fa.cat,7318,2011-05-14T02:02:56.0000000,2011-05-14T02:02:56.0000000,Archive
+\SourceDir\Windows\winsxs\Manifests\x86_Microsoft.VC80.ATL_1fc8b3b9a1e18e3b_8.0.50727.6195_x-ww_a4c618fa.manifest,466,2011-05-13T18:37:58.0000000,2011-05-13T18:37:58.0000000,Archive
+\SourceDir\Windows\winsxs\Manifests\x86_Microsoft.VC80.CRT_1fc8b3b9a1e18e3b_8.0.50727.6195_x-ww_44262b86.cat,7318,2011-05-14T02:02:56.0000000,2011-05-14T02:02:56.0000000,Archive
+\SourceDir\Windows\winsxs\Manifests\x86_Microsoft.VC80.CRT_1fc8b3b9a1e18e3b_8.0.50727.6195_x-ww_44262b86.manifest,1870,2011-05-14T02:06:04.0000000,2011-05-14T02:06:04.0000000,Archive
+\SourceDir\Windows\winsxs\Manifests\x86_Microsoft.VC80.MFCLOC_1fc8b3b9a1e18e3b_8.0.50727.6195_x-ww_6a5bb789.cat,7331,2011-05-14T02:12:52.0000000,2011-05-14T02:12:52.0000000,Archive
+\SourceDir\Windows\winsxs\Manifests\x86_Microsoft.VC80.MFCLOC_1fc8b3b9a1e18e3b_8.0.50727.6195_x-ww_6a5bb789.manifest,1240,2011-05-13T20:04:24.0000000,2011-05-13T20:04:24.0000000,Archive
+\SourceDir\Windows\winsxs\Manifests\x86_Microsoft.VC80.MFC_1fc8b3b9a1e18e3b_8.0.50727.6195_x-ww_150c9e8b.cat,7318,2011-05-14T02:02:56.0000000,2011-05-14T02:02:56.0000000,Archive
+\SourceDir\Windows\winsxs\Manifests\x86_Microsoft.VC80.MFC_1fc8b3b9a1e18e3b_8.0.50727.6195_x-ww_150c9e8b.manifest,2372,2011-05-14T02:06:06.0000000,2011-05-14T02:06:06.0000000,Archive
+\SourceDir\Windows\winsxs\Manifests\x86_Microsoft.VC80.OpenMP_1fc8b3b9a1e18e3b_8.0.50727.6195_x-ww_452bf920.cat,7331,2011-05-14T02:12:52.0000000,2011-05-14T02:12:52.0000000,Archive
+\SourceDir\Windows\winsxs\Manifests\x86_Microsoft.VC80.OpenMP_1fc8b3b9a1e18e3b_8.0.50727.6195_x-ww_452bf920.manifest,469,2011-05-13T20:17:02.0000000,2011-05-13T20:17:02.0000000,Archive
+\SourceDir\Windows\system32\ATL80.dll,97280,2011-05-13T18:37:56.0000000,2011-05-13T18:37:56.0000000,Archive
+\SourceDir\Windows\system32\ATL80.dll.duplicate1,114688,2011-05-13T18:37:30.0000000,2011-05-13T18:37:30.0000000,Archive
+\SourceDir\Windows\system32\mfc80.dll,1101824,2011-05-13T20:04:20.0000000,2011-05-13T20:04:20.0000000,Archive
+\SourceDir\Windows\system32\mfc80CHS.dll,40960,2011-05-13T19:45:58.0000000,2011-05-13T19:45:58.0000000,Archive
+\SourceDir\Windows\system32\mfc80CHT.dll,45056,2011-05-13T19:45:58.0000000,2011-05-13T19:45:58.0000000,Archive
+\SourceDir\Windows\system32\mfc80DEU.dll,65536,2011-05-13T19:45:56.0000000,2011-05-13T19:45:56.0000000,Archive
+\SourceDir\Windows\system32\mfc80ENU.dll,57344,2011-05-13T19:45:58.0000000,2011-05-13T19:45:58.0000000,Archive
+\SourceDir\Windows\system32\mfc80ESP.dll,61440,2011-05-13T19:45:58.0000000,2011-05-13T19:45:58.0000000,Archive
+\SourceDir\Windows\system32\mfc80FRA.dll,61440,2011-05-13T19:45:56.0000000,2011-05-13T19:45:56.0000000,Archive
+\SourceDir\Windows\system32\mfc80ITA.dll,61440,2011-05-13T19:45:58.0000000,2011-05-13T19:45:58.0000000,Archive
+\SourceDir\Windows\system32\mfc80JPN.dll,49152,2011-05-13T19:45:56.0000000,2011-05-13T19:45:56.0000000,Archive
+\SourceDir\Windows\system32\mfc80KOR.dll,49152,2011-05-13T19:45:58.0000000,2011-05-13T19:45:58.0000000,Archive
+\SourceDir\Windows\system32\mfc80u.dll,1093120,2011-05-13T20:04:20.0000000,2011-05-13T20:04:20.0000000,Archive
+\SourceDir\Windows\system32\mfcm80.dll,69632,2011-05-14T01:23:14.0000000,2011-05-14T01:23:14.0000000,Archive
+\SourceDir\Windows\system32\mfcm80u.dll,57856,2011-05-14T01:06:18.0000000,2011-05-14T01:06:18.0000000,Archive
+\SourceDir\Windows\system32\msvcm80.dll,479232,2011-05-14T01:11:32.0000000,2011-05-14T01:11:32.0000000,Archive
+\SourceDir\Windows\system32\msvcp80.dll,554832,2011-05-14T01:12:34.0000000,2011-05-14T01:12:34.0000000,Archive
+\SourceDir\Windows\system32\msvcr80.dll,632656,2011-05-14T01:17:40.0000000,2011-05-14T01:17:40.0000000,Archive
+\SourceDir\Windows\system32\vcomp.dll,65536,2011-05-13T20:17:00.0000000,2011-05-13T20:17:00.0000000,Archive
+\SourceDir\Program Files\Common Files\Microsoft Shared\VC\msdia80.dll,641536,2011-05-13T21:11:54.0000000,2011-05-13T21:11:54.0000000,Archive
diff --git a/src/Lessmsi.Tests/TestFiles/MsiInput/vcredis1.cab b/src/Lessmsi.Tests/TestFiles/MsiInput/vcredis1.cab
new file mode 100644
index 0000000..d69ae3f
Binary files /dev/null and b/src/Lessmsi.Tests/TestFiles/MsiInput/vcredis1.cab differ
diff --git a/src/Lessmsi.Tests/TestFiles/MsiInput/vcredist.msi b/src/Lessmsi.Tests/TestFiles/MsiInput/vcredist.msi
new file mode 100644
index 0000000..9f7e894
Binary files /dev/null and b/src/Lessmsi.Tests/TestFiles/MsiInput/vcredist.msi differ