diff options
author | Sean Hall <r.sean.hall@gmail.com> | 2021-03-05 17:38:14 -0600 |
---|---|---|
committer | Sean Hall <r.sean.hall@gmail.com> | 2021-03-08 15:51:55 -0600 |
commit | 1f4652516a385aeeeea1558738efa0863f63c9fc (patch) | |
tree | 5a0491726c6898ad3b6a99b6caf66ba639a691ae /src | |
parent | 24082aafc87c9cc3ed22749e6b21d80e0d3e6ced (diff) | |
download | wix-1f4652516a385aeeeea1558738efa0863f63c9fc.tar.gz wix-1f4652516a385aeeeea1558738efa0863f63c9fc.tar.bz2 wix-1f4652516a385aeeeea1558738efa0863f63c9fc.zip |
Fix harvesting providers from MSI packages.
Diffstat (limited to 'src')
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 | ||
3 | namespace WixToolsetTest.CoreIntegration | 3 | namespace 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 | ||