aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSean Hall <r.sean.hall@gmail.com>2021-03-05 17:38:14 -0600
committerSean Hall <r.sean.hall@gmail.com>2021-03-08 15:51:55 -0600
commit1f4652516a385aeeeea1558738efa0863f63c9fc (patch)
tree5a0491726c6898ad3b6a99b6caf66ba639a691ae
parent24082aafc87c9cc3ed22749e6b21d80e0d3e6ced (diff)
downloadwix-1f4652516a385aeeeea1558738efa0863f63c9fc.tar.gz
wix-1f4652516a385aeeeea1558738efa0863f63c9fc.tar.bz2
wix-1f4652516a385aeeeea1558738efa0863f63c9fc.zip
Fix harvesting providers from MSI packages.
-rw-r--r--src/WixToolset.Core.Burn/Bundles/ProcessMsiPackageCommand.cs14
-rw-r--r--src/test/WixToolsetTest.CoreIntegration/DependencyExtensionFixture.cs60
-rw-r--r--src/test/WixToolsetTest.CoreIntegration/TestData/Dependency/UsingProvidesBundle.wxs8
-rw-r--r--src/test/WixToolsetTest.CoreIntegration/TestData/UsingProvides/Package.wxs2
4 files changed, 76 insertions, 8 deletions
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
512 { 512 {
513 if (db.Tables.Contains("WixDependencyProvider")) 513 if (db.Tables.Contains("WixDependencyProvider"))
514 { 514 {
515 var query = "SELECT `ProviderKey`, `Version`, `DisplayName`, `Attributes` FROM `WixDependencyProvider`"; 515 var query = "SELECT `WixDependencyProvider`, `ProviderKey`, `Version`, `DisplayName`, `Attributes` FROM `WixDependencyProvider`";
516 516
517 using (var view = db.OpenView(query)) 517 using (var view = db.OpenView(query))
518 { 518 {
@@ -526,14 +526,16 @@ namespace WixToolset.Core.Burn.Bundles
526 break; 526 break;
527 } 527 }
528 528
529 var id = new Identifier(AccessModifier.Section, Common.GenerateIdentifier("dep", msiPackage.Id.Id, record.GetString(1)));
530
529 // Import the provider key and attributes. 531 // Import the provider key and attributes.
530 this.Section.AddSymbol(new ProvidesDependencySymbol(msiPackage.SourceLineNumbers) 532 this.Section.AddSymbol(new ProvidesDependencySymbol(msiPackage.SourceLineNumbers, id)
531 { 533 {
532 PackageRef = msiPackage.Id.Id, 534 PackageRef = msiPackage.Id.Id,
533 Key = record.GetString(1), 535 Key = record.GetString(2),
534 Version = record.GetString(2) ?? msiPackage.ProductVersion, 536 Version = record.GetString(3) ?? msiPackage.ProductVersion,
535 DisplayName = record.GetString(3) ?? this.Facade.PackageSymbol.DisplayName, 537 DisplayName = record.GetString(4) ?? this.Facade.PackageSymbol.DisplayName,
536 Attributes = record.GetInteger(4), 538 Attributes = record.GetInteger(5),
537 Imported = true 539 Imported = true
538 }); 540 });
539 } 541 }
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 @@
2 2
3namespace WixToolsetTest.CoreIntegration 3namespace WixToolsetTest.CoreIntegration
4{ 4{
5 using System.Collections.Generic;
6 using System.IO;
7 using System.Linq;
8 using System.Xml;
5 using WixBuildTools.TestSupport; 9 using WixBuildTools.TestSupport;
6 using WixToolset.Core.TestPackage; 10 using WixToolset.Core.TestPackage;
7 using Xunit; 11 using Xunit;
@@ -9,7 +13,61 @@ namespace WixToolsetTest.CoreIntegration
9 public class DependencyExtensionFixture 13 public class DependencyExtensionFixture
10 { 14 {
11 [Fact] 15 [Fact]
12 public void CanBuildUsingProvides() 16 public void CanBuildBundleUsingMsiWithProvides()
17 {
18 var folder = TestData.Get(@"TestData");
19
20 using (var fs = new DisposableFileSystem())
21 {
22 var baseFolder = fs.GetFolder();
23 var intermediateFolder = Path.Combine(baseFolder, "obj");
24 var binFolder = Path.Combine(baseFolder, "bin");
25 var bundlePath = Path.Combine(binFolder, "test.exe");
26 var baFolderPath = Path.Combine(baseFolder, "ba");
27 var extractFolderPath = Path.Combine(baseFolder, "extract");
28
29 var result = WixRunner.Execute(new[]
30 {
31 "build",
32 Path.Combine(folder, "UsingProvides", "Package.wxs"),
33 Path.Combine(folder, "UsingProvides", "PackageComponents.wxs"),
34 "-loc", Path.Combine(folder, "UsingProvides", "Package.en-us.wxl"),
35 "-bindpath", Path.Combine(folder, "UsingProvides"),
36 "-intermediateFolder", intermediateFolder,
37 "-o", Path.Combine(binFolder, "UsingProvides.msi"),
38 });
39
40 result.AssertSuccess();
41
42 result = WixRunner.Execute(new[]
43 {
44 "build",
45 Path.Combine(folder, "Dependency", "UsingProvidesBundle.wxs"),
46 Path.Combine(folder, "BundleWithPackageGroupRef", "Bundle.wxs"),
47 "-bindpath", Path.Combine(folder, "SimpleBundle", "data"),
48 "-bindpath", binFolder,
49 "-intermediateFolder", intermediateFolder,
50 "-o", bundlePath,
51 });
52
53 result.AssertSuccess();
54
55 Assert.True(File.Exists(bundlePath));
56
57 var extractResult = BundleExtractor.ExtractBAContainer(null, bundlePath, baFolderPath, extractFolderPath);
58 extractResult.AssertSuccess();
59
60 var provides = extractResult.SelectManifestNodes("/burn:BurnManifest/burn:Chain/burn:MsiPackage/burn:Provides");
61 WixAssert.CompareLineByLine(new string[]
62 {
63 "<Provides Key='UsingProvides' Imported='yes' />",
64 "<Provides Key='{A81D50F9-B696-4F3D-ABE0-E64D61590E5F}' Version='1.0.0.0' DisplayName='MsiPackage' />",
65 }, provides.Cast<XmlElement>().Select(e => e.GetTestXml()).ToArray());
66 }
67 }
68
69 [Fact]
70 public void CanBuildPackageUsingProvides()
13 { 71 {
14 var folder = TestData.Get(@"TestData\UsingProvides"); 72 var folder = TestData.Get(@"TestData\UsingProvides");
15 var build = new Builder(folder, null, new[] { folder }); 73 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 @@
1<?xml version="1.0" encoding="utf-8"?>
2<Wix xmlns="http://wixtoolset.org/schemas/v4/wxs">
3 <Fragment>
4 <PackageGroup Id="BundlePackages">
5 <MsiPackage SourceFile="UsingProvides.msi" />
6 </PackageGroup>
7 </Fragment>
8</Wix>
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 @@
1<Wix xmlns="http://wixtoolset.org/schemas/v4/wxs"> 1<Wix xmlns="http://wixtoolset.org/schemas/v4/wxs">
2 <Package Name="MsiPackage" Language="1033" Version="1.0.0.0" Manufacturer="Example Corporation" UpgradeCode="047730a5-30fe-4a62-a520-da9381b8226a"> 2 <Package ProductCode="{A81D50F9-B696-4F3D-ABE0-E64D61590E5F}" Name="MsiPackage" Language="1033" Version="1.0.0.0" Manufacturer="Example Corporation" UpgradeCode="047730a5-30fe-4a62-a520-da9381b8226a">
3 3
4 <MajorUpgrade DowngradeErrorMessage="!(loc.DowngradeError)" /> 4 <MajorUpgrade DowngradeErrorMessage="!(loc.DowngradeError)" />
5 5