From 1f4652516a385aeeeea1558738efa0863f63c9fc Mon Sep 17 00:00:00 2001 From: Sean Hall Date: Fri, 5 Mar 2021 17:38:14 -0600 Subject: Fix harvesting providers from MSI packages. --- .../Bundles/ProcessMsiPackageCommand.cs | 14 ++--- .../DependencyExtensionFixture.cs | 60 +++++++++++++++++++++- .../TestData/Dependency/UsingProvidesBundle.wxs | 8 +++ .../TestData/UsingProvides/Package.wxs | 2 +- 4 files changed, 76 insertions(+), 8 deletions(-) create mode 100644 src/test/WixToolsetTest.CoreIntegration/TestData/Dependency/UsingProvidesBundle.wxs (limited to 'src') diff --git a/src/WixToolset.Core.Burn/Bundles/ProcessMsiPackageCommand.cs b/src/WixToolset.Core.Burn/Bundles/ProcessMsiPackageCommand.cs index b598af96..5ba1ad07 100644 --- a/src/WixToolset.Core.Burn/Bundles/ProcessMsiPackageCommand.cs +++ b/src/WixToolset.Core.Burn/Bundles/ProcessMsiPackageCommand.cs @@ -512,7 +512,7 @@ namespace WixToolset.Core.Burn.Bundles { if (db.Tables.Contains("WixDependencyProvider")) { - var query = "SELECT `ProviderKey`, `Version`, `DisplayName`, `Attributes` FROM `WixDependencyProvider`"; + var query = "SELECT `WixDependencyProvider`, `ProviderKey`, `Version`, `DisplayName`, `Attributes` FROM `WixDependencyProvider`"; using (var view = db.OpenView(query)) { @@ -526,14 +526,16 @@ namespace WixToolset.Core.Burn.Bundles break; } + var id = new Identifier(AccessModifier.Section, Common.GenerateIdentifier("dep", msiPackage.Id.Id, record.GetString(1))); + // Import the provider key and attributes. - this.Section.AddSymbol(new ProvidesDependencySymbol(msiPackage.SourceLineNumbers) + this.Section.AddSymbol(new ProvidesDependencySymbol(msiPackage.SourceLineNumbers, id) { PackageRef = msiPackage.Id.Id, - Key = record.GetString(1), - Version = record.GetString(2) ?? msiPackage.ProductVersion, - DisplayName = record.GetString(3) ?? this.Facade.PackageSymbol.DisplayName, - Attributes = record.GetInteger(4), + Key = record.GetString(2), + Version = record.GetString(3) ?? msiPackage.ProductVersion, + DisplayName = record.GetString(4) ?? this.Facade.PackageSymbol.DisplayName, + Attributes = record.GetInteger(5), Imported = true }); } diff --git a/src/test/WixToolsetTest.CoreIntegration/DependencyExtensionFixture.cs b/src/test/WixToolsetTest.CoreIntegration/DependencyExtensionFixture.cs index 14eb8ff7..de038bde 100644 --- a/src/test/WixToolsetTest.CoreIntegration/DependencyExtensionFixture.cs +++ b/src/test/WixToolsetTest.CoreIntegration/DependencyExtensionFixture.cs @@ -2,6 +2,10 @@ namespace WixToolsetTest.CoreIntegration { + using System.Collections.Generic; + using System.IO; + using System.Linq; + using System.Xml; using WixBuildTools.TestSupport; using WixToolset.Core.TestPackage; using Xunit; @@ -9,7 +13,61 @@ namespace WixToolsetTest.CoreIntegration public class DependencyExtensionFixture { [Fact] - public void CanBuildUsingProvides() + public void CanBuildBundleUsingMsiWithProvides() + { + var folder = TestData.Get(@"TestData"); + + using (var fs = new DisposableFileSystem()) + { + var baseFolder = fs.GetFolder(); + var intermediateFolder = Path.Combine(baseFolder, "obj"); + var binFolder = Path.Combine(baseFolder, "bin"); + var bundlePath = Path.Combine(binFolder, "test.exe"); + var baFolderPath = Path.Combine(baseFolder, "ba"); + var extractFolderPath = Path.Combine(baseFolder, "extract"); + + var result = WixRunner.Execute(new[] + { + "build", + Path.Combine(folder, "UsingProvides", "Package.wxs"), + Path.Combine(folder, "UsingProvides", "PackageComponents.wxs"), + "-loc", Path.Combine(folder, "UsingProvides", "Package.en-us.wxl"), + "-bindpath", Path.Combine(folder, "UsingProvides"), + "-intermediateFolder", intermediateFolder, + "-o", Path.Combine(binFolder, "UsingProvides.msi"), + }); + + result.AssertSuccess(); + + result = WixRunner.Execute(new[] + { + "build", + Path.Combine(folder, "Dependency", "UsingProvidesBundle.wxs"), + Path.Combine(folder, "BundleWithPackageGroupRef", "Bundle.wxs"), + "-bindpath", Path.Combine(folder, "SimpleBundle", "data"), + "-bindpath", binFolder, + "-intermediateFolder", intermediateFolder, + "-o", bundlePath, + }); + + result.AssertSuccess(); + + Assert.True(File.Exists(bundlePath)); + + var extractResult = BundleExtractor.ExtractBAContainer(null, bundlePath, baFolderPath, extractFolderPath); + extractResult.AssertSuccess(); + + var provides = extractResult.SelectManifestNodes("/burn:BurnManifest/burn:Chain/burn:MsiPackage/burn:Provides"); + WixAssert.CompareLineByLine(new string[] + { + "", + "", + }, provides.Cast().Select(e => e.GetTestXml()).ToArray()); + } + } + + [Fact] + public void CanBuildPackageUsingProvides() { var folder = TestData.Get(@"TestData\UsingProvides"); var build = new Builder(folder, null, new[] { folder }); diff --git a/src/test/WixToolsetTest.CoreIntegration/TestData/Dependency/UsingProvidesBundle.wxs b/src/test/WixToolsetTest.CoreIntegration/TestData/Dependency/UsingProvidesBundle.wxs new file mode 100644 index 00000000..9c3a9690 --- /dev/null +++ b/src/test/WixToolsetTest.CoreIntegration/TestData/Dependency/UsingProvidesBundle.wxs @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/src/test/WixToolsetTest.CoreIntegration/TestData/UsingProvides/Package.wxs b/src/test/WixToolsetTest.CoreIntegration/TestData/UsingProvides/Package.wxs index 07da1215..9ddcdc90 100644 --- a/src/test/WixToolsetTest.CoreIntegration/TestData/UsingProvides/Package.wxs +++ b/src/test/WixToolsetTest.CoreIntegration/TestData/UsingProvides/Package.wxs @@ -1,5 +1,5 @@ - + -- cgit v1.2.3-55-g6feb