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