diff options
author | Sean Hall <r.sean.hall@gmail.com> | 2022-01-21 12:07:53 -0600 |
---|---|---|
committer | Sean Hall <r.sean.hall@gmail.com> | 2022-01-21 17:29:12 -0600 |
commit | 14abd47046fecdfe175b9f7a4c0a55e0bad503bf (patch) | |
tree | ad0f5f3b789b366bc35dbc04444d46c94e32f829 | |
parent | 89439409a0776dce25216fcef360856ba81a86da (diff) | |
download | wix-14abd47046fecdfe175b9f7a4c0a55e0bad503bf.tar.gz wix-14abd47046fecdfe175b9f7a4c0a55e0bad503bf.tar.bz2 wix-14abd47046fecdfe175b9f7a4c0a55e0bad503bf.zip |
Only packages with no dependency providers get a generated one.
3 files changed, 31 insertions, 17 deletions
diff --git a/src/wix/WixToolset.Core.Burn/Bind/ProcessDependencyProvidersCommand.cs b/src/wix/WixToolset.Core.Burn/Bind/ProcessDependencyProvidersCommand.cs index 99effbc7..5df6c887 100644 --- a/src/wix/WixToolset.Core.Burn/Bind/ProcessDependencyProvidersCommand.cs +++ b/src/wix/WixToolset.Core.Burn/Bind/ProcessDependencyProvidersCommand.cs | |||
@@ -22,8 +22,6 @@ namespace WixToolset.Core.Burn.Bind | |||
22 | 22 | ||
23 | public string BundleProviderKey { get; private set; } | 23 | public string BundleProviderKey { get; private set; } |
24 | 24 | ||
25 | public Dictionary<string, WixDependencyProviderSymbol> DependencySymbolsByKey { get; private set; } | ||
26 | |||
27 | private IMessaging Messaging { get; } | 25 | private IMessaging Messaging { get; } |
28 | 26 | ||
29 | private IntermediateSection Section { get; } | 27 | private IntermediateSection Section { get; } |
@@ -88,7 +86,7 @@ namespace WixToolset.Core.Burn.Bind | |||
88 | } | 86 | } |
89 | } | 87 | } |
90 | 88 | ||
91 | this.DependencySymbolsByKey = this.GetDependencySymbolsByKey(dependencySymbols); | 89 | var dependencySymbolsByPackageId = this.GetDependencySymbolsByPackageId(dependencySymbols); |
92 | 90 | ||
93 | // Generate providers for MSI and MSP packages that still do not have providers. | 91 | // Generate providers for MSI and MSP packages that still do not have providers. |
94 | foreach (var facade in this.Facades.Values) | 92 | foreach (var facade in this.Facades.Values) |
@@ -104,24 +102,23 @@ namespace WixToolset.Core.Burn.Bind | |||
104 | key = mspPackage.PatchCode; | 102 | key = mspPackage.PatchCode; |
105 | } | 103 | } |
106 | 104 | ||
107 | if (!String.IsNullOrEmpty(key) && !this.DependencySymbolsByKey.ContainsKey(key)) | 105 | if (!String.IsNullOrEmpty(key) && !dependencySymbolsByPackageId.Contains(facade.PackageId)) |
108 | { | 106 | { |
109 | var dependency = this.Section.AddSymbol(new WixDependencyProviderSymbol(facade.PackageSymbol.SourceLineNumbers, facade.PackageSymbol.Id) | 107 | this.Section.AddSymbol(new WixDependencyProviderSymbol(facade.PackageSymbol.SourceLineNumbers, facade.PackageSymbol.Id) |
110 | { | 108 | { |
111 | ParentRef = facade.PackageId, | 109 | ParentRef = facade.PackageId, |
112 | ProviderKey = key, | 110 | ProviderKey = key, |
113 | Version = facade.PackageSymbol.Version, | 111 | Version = facade.PackageSymbol.Version, |
114 | DisplayName = facade.PackageSymbol.DisplayName | 112 | DisplayName = facade.PackageSymbol.DisplayName |
115 | }); | 113 | }); |
116 | |||
117 | this.DependencySymbolsByKey.Add(dependency.ProviderKey, dependency); | ||
118 | } | 114 | } |
119 | } | 115 | } |
120 | } | 116 | } |
121 | 117 | ||
122 | private Dictionary<string, WixDependencyProviderSymbol> GetDependencySymbolsByKey(IEnumerable<WixDependencyProviderSymbol> dependencySymbols) | 118 | private HashSet<string> GetDependencySymbolsByPackageId(IEnumerable<WixDependencyProviderSymbol> dependencySymbols) |
123 | { | 119 | { |
124 | var dependencySymbolsByKey = new Dictionary<string, WixDependencyProviderSymbol>(); | 120 | var dependencySymbolsByKey = new Dictionary<string, WixDependencyProviderSymbol>(); |
121 | var dependencySymbolsByPackageId = new HashSet<string>(); | ||
125 | 122 | ||
126 | foreach (var dependency in dependencySymbols) | 123 | foreach (var dependency in dependencySymbols) |
127 | { | 124 | { |
@@ -139,9 +136,11 @@ namespace WixToolset.Core.Burn.Bind | |||
139 | { | 136 | { |
140 | dependencySymbolsByKey.Add(dependency.ProviderKey, dependency); | 137 | dependencySymbolsByKey.Add(dependency.ProviderKey, dependency); |
141 | } | 138 | } |
139 | |||
140 | dependencySymbolsByPackageId.Add(dependency.ParentRef); | ||
142 | } | 141 | } |
143 | 142 | ||
144 | return dependencySymbolsByKey; | 143 | return dependencySymbolsByPackageId; |
145 | } | 144 | } |
146 | } | 145 | } |
147 | } | 146 | } |
diff --git a/src/wix/test/WixToolsetTest.CoreIntegration/ContainerFixture.cs b/src/wix/test/WixToolsetTest.CoreIntegration/ContainerFixture.cs index 482a6edd..70aca8c0 100644 --- a/src/wix/test/WixToolsetTest.CoreIntegration/ContainerFixture.cs +++ b/src/wix/test/WixToolsetTest.CoreIntegration/ContainerFixture.cs | |||
@@ -9,6 +9,9 @@ namespace WixToolsetTest.CoreIntegration | |||
9 | using WixBuildTools.TestSupport; | 9 | using WixBuildTools.TestSupport; |
10 | using WixToolset.Core.Burn.Bundles; | 10 | using WixToolset.Core.Burn.Bundles; |
11 | using WixToolset.Core.TestPackage; | 11 | using WixToolset.Core.TestPackage; |
12 | using WixToolset.Data; | ||
13 | using WixToolset.Data.WindowsInstaller; | ||
14 | using WixToolset.Data.WindowsInstaller.Rows; | ||
12 | using Xunit; | 15 | using Xunit; |
13 | 16 | ||
14 | public class ContainerFixture | 17 | public class ContainerFixture |
@@ -115,7 +118,7 @@ namespace WixToolsetTest.CoreIntegration | |||
115 | var baFolderPath = Path.Combine(baseFolder, "ba"); | 118 | var baFolderPath = Path.Combine(baseFolder, "ba"); |
116 | var extractFolderPath = Path.Combine(baseFolder, "extract"); | 119 | var extractFolderPath = Path.Combine(baseFolder, "extract"); |
117 | 120 | ||
118 | this.BuildMsis(folder, intermediateFolder, binFolder); | 121 | var pdbPaths = this.BuildMsis(folder, intermediateFolder, binFolder); |
119 | 122 | ||
120 | var result = WixRunner.Execute(new[] | 123 | var result = WixRunner.Execute(new[] |
121 | { | 124 | { |
@@ -138,7 +141,6 @@ namespace WixToolsetTest.CoreIntegration | |||
138 | var ignoreAttributes = new Dictionary<string, List<string>> | 141 | var ignoreAttributes = new Dictionary<string, List<string>> |
139 | { | 142 | { |
140 | { "MsiPackage", new List<string> { "CacheId", "InstallSize", "Size", "ProductCode" } }, | 143 | { "MsiPackage", new List<string> { "CacheId", "InstallSize", "Size", "ProductCode" } }, |
141 | { "Provides", new List<string> { "Key" } }, | ||
142 | }; | 144 | }; |
143 | var msiPackages = extractResult.SelectManifestNodes("/burn:BurnManifest/burn:Chain/burn:MsiPackage") | 145 | var msiPackages = extractResult.SelectManifestNodes("/burn:BurnManifest/burn:Chain/burn:MsiPackage") |
144 | .Cast<XmlElement>() | 146 | .Cast<XmlElement>() |
@@ -148,7 +150,7 @@ namespace WixToolsetTest.CoreIntegration | |||
148 | { | 150 | { |
149 | "<MsiPackage Id='FirstX86.msi' Cache='keep' CacheId='*' InstallSize='*' Size='*' PerMachine='yes' Permanent='no' Vital='yes' RollbackBoundaryForward='WixDefaultBoundary' LogPathVariable='WixBundleLog_FirstX86.msi' RollbackLogPathVariable='WixBundleRollbackLog_FirstX86.msi' ProductCode='*' Language='1033' Version='1.0.0.0' UpgradeCode='{12E4699F-E774-4D05-8A01-5BDD41BBA127}'>" + | 151 | "<MsiPackage Id='FirstX86.msi' Cache='keep' CacheId='*' InstallSize='*' Size='*' PerMachine='yes' Permanent='no' Vital='yes' RollbackBoundaryForward='WixDefaultBoundary' LogPathVariable='WixBundleLog_FirstX86.msi' RollbackLogPathVariable='WixBundleRollbackLog_FirstX86.msi' ProductCode='*' Language='1033' Version='1.0.0.0' UpgradeCode='{12E4699F-E774-4D05-8A01-5BDD41BBA127}'>" + |
150 | "<MsiProperty Id='ARPSYSTEMCOMPONENT' Value='1' />" + | 152 | "<MsiProperty Id='ARPSYSTEMCOMPONENT' Value='1' />" + |
151 | "<Provides Key='*' Version='1.0.0.0' DisplayName='MsiPackage' />" + | 153 | $"<Provides Key='{GetProductCodeFromMsiPdb(pdbPaths[0])}' Version='1.0.0.0' DisplayName='MsiPackage' />" + |
152 | "<RelatedPackage Id='{12E4699F-E774-4D05-8A01-5BDD41BBA127}' MaxVersion='1.0.0.0' MaxInclusive='no' OnlyDetect='no' LangInclusive='no'><Language Id='1033' /></RelatedPackage>" + | 154 | "<RelatedPackage Id='{12E4699F-E774-4D05-8A01-5BDD41BBA127}' MaxVersion='1.0.0.0' MaxInclusive='no' OnlyDetect='no' LangInclusive='no'><Language Id='1033' /></RelatedPackage>" + |
153 | "<RelatedPackage Id='{12E4699F-E774-4D05-8A01-5BDD41BBA127}' MinVersion='1.0.0.0' MinInclusive='no' OnlyDetect='yes' LangInclusive='no'><Language Id='1033' /></RelatedPackage>" + | 155 | "<RelatedPackage Id='{12E4699F-E774-4D05-8A01-5BDD41BBA127}' MinVersion='1.0.0.0' MinInclusive='no' OnlyDetect='yes' LangInclusive='no'><Language Id='1033' /></RelatedPackage>" + |
154 | "<PayloadRef Id='FirstX86.msi' />" + | 156 | "<PayloadRef Id='FirstX86.msi' />" + |
@@ -156,7 +158,7 @@ namespace WixToolsetTest.CoreIntegration | |||
156 | "</MsiPackage>", | 158 | "</MsiPackage>", |
157 | "<MsiPackage Id='FirstX64.msi' Cache='keep' CacheId='*' InstallSize='*' Size='*' PerMachine='yes' Permanent='no' Vital='yes' RollbackBoundaryBackward='WixDefaultBoundary' LogPathVariable='WixBundleLog_FirstX64.msi' RollbackLogPathVariable='WixBundleRollbackLog_FirstX64.msi' ProductCode='*' Language='1033' Version='1.0.0.0' UpgradeCode='{12E4699F-E774-4D05-8A01-5BDD41BBA127}'>" + | 159 | "<MsiPackage Id='FirstX64.msi' Cache='keep' CacheId='*' InstallSize='*' Size='*' PerMachine='yes' Permanent='no' Vital='yes' RollbackBoundaryBackward='WixDefaultBoundary' LogPathVariable='WixBundleLog_FirstX64.msi' RollbackLogPathVariable='WixBundleRollbackLog_FirstX64.msi' ProductCode='*' Language='1033' Version='1.0.0.0' UpgradeCode='{12E4699F-E774-4D05-8A01-5BDD41BBA127}'>" + |
158 | "<MsiProperty Id='ARPSYSTEMCOMPONENT' Value='1' />" + | 160 | "<MsiProperty Id='ARPSYSTEMCOMPONENT' Value='1' />" + |
159 | "<Provides Key='*' Version='1.0.0.0' DisplayName='MsiPackage' />" + | 161 | $"<Provides Key='{GetProductCodeFromMsiPdb(pdbPaths[1])}' Version='1.0.0.0' DisplayName='MsiPackage' />" + |
160 | "<RelatedPackage Id='{12E4699F-E774-4D05-8A01-5BDD41BBA127}' MaxVersion='1.0.0.0' MaxInclusive='no' OnlyDetect='no' LangInclusive='no'><Language Id='1033' /></RelatedPackage>" + | 162 | "<RelatedPackage Id='{12E4699F-E774-4D05-8A01-5BDD41BBA127}' MaxVersion='1.0.0.0' MaxInclusive='no' OnlyDetect='no' LangInclusive='no'><Language Id='1033' /></RelatedPackage>" + |
161 | "<RelatedPackage Id='{12E4699F-E774-4D05-8A01-5BDD41BBA127}' MinVersion='1.0.0.0' MinInclusive='no' OnlyDetect='yes' LangInclusive='no'><Language Id='1033' /></RelatedPackage>" + | 163 | "<RelatedPackage Id='{12E4699F-E774-4D05-8A01-5BDD41BBA127}' MinVersion='1.0.0.0' MinInclusive='no' OnlyDetect='yes' LangInclusive='no'><Language Id='1033' /></RelatedPackage>" + |
162 | "<PayloadRef Id='FirstX64.msi' />" + | 164 | "<PayloadRef Id='FirstX64.msi' />" + |
@@ -372,8 +374,9 @@ namespace WixToolsetTest.CoreIntegration | |||
372 | } | 374 | } |
373 | } | 375 | } |
374 | 376 | ||
375 | private void BuildMsis(string folder, string intermediateFolder, string binFolder, bool buildToSubfolder = false) | 377 | private string[] BuildMsis(string folder, string intermediateFolder, string binFolder, bool buildToSubfolder = false) |
376 | { | 378 | { |
379 | var x86OutputPath = Path.Combine(binFolder, buildToSubfolder ? "FirstX86" : ".", "FirstX86.msi"); | ||
377 | var result = WixRunner.Execute(new[] | 380 | var result = WixRunner.Execute(new[] |
378 | { | 381 | { |
379 | "build", | 382 | "build", |
@@ -382,11 +385,12 @@ namespace WixToolsetTest.CoreIntegration | |||
382 | Path.Combine(folder, "ProductWithComponentGroupRef", "Product.wxs"), | 385 | Path.Combine(folder, "ProductWithComponentGroupRef", "Product.wxs"), |
383 | "-bindpath", Path.Combine(folder, "SingleFile", "data"), | 386 | "-bindpath", Path.Combine(folder, "SingleFile", "data"), |
384 | "-intermediateFolder", intermediateFolder, | 387 | "-intermediateFolder", intermediateFolder, |
385 | "-o", Path.Combine(binFolder, buildToSubfolder ? "FirstX86" : ".", "FirstX86.msi"), | 388 | "-o", x86OutputPath, |
386 | }); | 389 | }); |
387 | 390 | ||
388 | result.AssertSuccess(); | 391 | result.AssertSuccess(); |
389 | 392 | ||
393 | var x64OutputPath = Path.Combine(binFolder, buildToSubfolder ? "FirstX64" : ".", "FirstX64.msi"); | ||
390 | result = WixRunner.Execute(new[] | 394 | result = WixRunner.Execute(new[] |
391 | { | 395 | { |
392 | "build", | 396 | "build", |
@@ -395,10 +399,22 @@ namespace WixToolsetTest.CoreIntegration | |||
395 | Path.Combine(folder, "ProductWithComponentGroupRef", "Product.wxs"), | 399 | Path.Combine(folder, "ProductWithComponentGroupRef", "Product.wxs"), |
396 | "-bindpath", Path.Combine(folder, "SingleFile", "data"), | 400 | "-bindpath", Path.Combine(folder, "SingleFile", "data"), |
397 | "-intermediateFolder", intermediateFolder, | 401 | "-intermediateFolder", intermediateFolder, |
398 | "-o", Path.Combine(binFolder, buildToSubfolder ? "FirstX64" : ".", "FirstX64.msi"), | 402 | "-o", x64OutputPath, |
399 | }); | 403 | }); |
400 | 404 | ||
401 | result.AssertSuccess(); | 405 | result.AssertSuccess(); |
406 | |||
407 | return new[] | ||
408 | { | ||
409 | Path.ChangeExtension(x86OutputPath, ".wixpdb"), | ||
410 | Path.ChangeExtension(x64OutputPath, ".wixpdb"), | ||
411 | }; | ||
412 | } | ||
413 | |||
414 | private static string GetProductCodeFromMsiPdb(string pdbPath) | ||
415 | { | ||
416 | var wiData = WindowsInstallerData.Load(pdbPath, suppressVersionCheck: false); | ||
417 | return wiData.Tables["Property"].Rows.Cast<PropertyRow>().Single(r => r.Property == "ProductCode").Value; | ||
402 | } | 418 | } |
403 | } | 419 | } |
404 | } | 420 | } |
diff --git a/src/wix/test/WixToolsetTest.CoreIntegration/DependencyExtensionFixture.cs b/src/wix/test/WixToolsetTest.CoreIntegration/DependencyExtensionFixture.cs index 1f1a121e..36855c84 100644 --- a/src/wix/test/WixToolsetTest.CoreIntegration/DependencyExtensionFixture.cs +++ b/src/wix/test/WixToolsetTest.CoreIntegration/DependencyExtensionFixture.cs | |||
@@ -107,7 +107,6 @@ namespace WixToolsetTest.CoreIntegration | |||
107 | WixAssert.CompareLineByLine(new string[] | 107 | WixAssert.CompareLineByLine(new string[] |
108 | { | 108 | { |
109 | "<Provides Key='UsingProvides' Version='1.0.0.0' DisplayName='MsiPackage' Imported='yes' />", | 109 | "<Provides Key='UsingProvides' Version='1.0.0.0' DisplayName='MsiPackage' Imported='yes' />", |
110 | "<Provides Key='{A81D50F9-B696-4F3D-ABE0-E64D61590E5F}' Version='1.0.0.0' DisplayName='MsiPackage' />", | ||
111 | }, provides); | 110 | }, provides); |
112 | } | 111 | } |
113 | } | 112 | } |