diff options
author | Sean Hall <r.sean.hall@gmail.com> | 2021-04-24 16:29:26 -0500 |
---|---|---|
committer | Sean Hall <r.sean.hall@gmail.com> | 2021-04-25 23:06:35 -0500 |
commit | 07bee0d033f1b4acb63e3da17764a3855503bce2 (patch) | |
tree | e16896f1e61f071b8c2637e0e3bb8c8976f8a2f4 | |
parent | f4709371fa21ca1d0c06e04d1b53c0b10bfafeed (diff) | |
download | wix-07bee0d033f1b4acb63e3da17764a3855503bce2.tar.gz wix-07bee0d033f1b4acb63e3da17764a3855503bce2.tar.bz2 wix-07bee0d033f1b4acb63e3da17764a3855503bce2.zip |
Block well known bundle ids in the compiler.
3 files changed, 38 insertions, 15 deletions
diff --git a/src/WixToolset.Core.Burn/Bundles/OrderPackagesAndRollbackBoundariesCommand.cs b/src/WixToolset.Core.Burn/Bundles/OrderPackagesAndRollbackBoundariesCommand.cs index 19fd7619..ccf6b1c2 100644 --- a/src/WixToolset.Core.Burn/Bundles/OrderPackagesAndRollbackBoundariesCommand.cs +++ b/src/WixToolset.Core.Burn/Bundles/OrderPackagesAndRollbackBoundariesCommand.cs | |||
@@ -6,13 +6,12 @@ namespace WixToolset.Core.Burn.Bundles | |||
6 | using System.Collections.Generic; | 6 | using System.Collections.Generic; |
7 | using System.Linq; | 7 | using System.Linq; |
8 | using WixToolset.Data; | 8 | using WixToolset.Data; |
9 | using WixToolset.Data.Burn; | ||
9 | using WixToolset.Data.Symbols; | 10 | using WixToolset.Data.Symbols; |
10 | using WixToolset.Extensibility.Services; | 11 | using WixToolset.Extensibility.Services; |
11 | 12 | ||
12 | internal class OrderPackagesAndRollbackBoundariesCommand | 13 | internal class OrderPackagesAndRollbackBoundariesCommand |
13 | { | 14 | { |
14 | private const string DefaultBoundaryId = "WixDefaultBoundary"; | ||
15 | |||
16 | public OrderPackagesAndRollbackBoundariesCommand(IMessaging messaging, IntermediateSection section, IDictionary<string, PackageFacade> packageFacades) | 15 | public OrderPackagesAndRollbackBoundariesCommand(IMessaging messaging, IntermediateSection section, IDictionary<string, PackageFacade> packageFacades) |
17 | { | 16 | { |
18 | this.Messaging = messaging; | 17 | this.Messaging = messaging; |
@@ -47,14 +46,14 @@ namespace WixToolset.Core.Burn.Bundles | |||
47 | // We handle uninstall (aka: backwards) rollback boundaries after | 46 | // We handle uninstall (aka: backwards) rollback boundaries after |
48 | // we get these install/repair (aka: forward) rollback boundaries | 47 | // we get these install/repair (aka: forward) rollback boundaries |
49 | // defined. | 48 | // defined. |
50 | var pendingRollbackBoundary = new WixBundleRollbackBoundarySymbol(null, new Identifier(AccessModifier.Section, DefaultBoundaryId)) { Vital = true }; | 49 | var pendingRollbackBoundary = new WixBundleRollbackBoundarySymbol(null, new Identifier(AccessModifier.Section, BurnConstants.BundleDefaultBoundaryId)) { Vital = true }; |
51 | var lastRollbackBoundary = pendingRollbackBoundary; | 50 | var lastRollbackBoundary = pendingRollbackBoundary; |
52 | var boundaryHadX86Package = false; | 51 | var boundaryHadX86Package = false; |
53 | var warnedMsiTransaction = false; | 52 | var warnedMsiTransaction = false; |
54 | 53 | ||
55 | foreach (var groupSymbol in groupSymbols) | 54 | foreach (var groupSymbol in groupSymbols) |
56 | { | 55 | { |
57 | if (ComplexReferenceChildType.Package == groupSymbol.ChildType && ComplexReferenceParentType.PackageGroup == groupSymbol.ParentType && "WixChain" == groupSymbol.ParentId) | 56 | if (ComplexReferenceChildType.Package == groupSymbol.ChildType && ComplexReferenceParentType.PackageGroup == groupSymbol.ParentType && BurnConstants.BundleChainPackageGroupId == groupSymbol.ParentId) |
58 | { | 57 | { |
59 | if (this.PackageFacades.TryGetValue(groupSymbol.ChildId, out var facade)) | 58 | if (this.PackageFacades.TryGetValue(groupSymbol.ChildId, out var facade)) |
60 | { | 59 | { |
@@ -63,7 +62,7 @@ namespace WixToolset.Core.Burn.Bundles | |||
63 | if (null != pendingRollbackBoundary) | 62 | if (null != pendingRollbackBoundary) |
64 | { | 63 | { |
65 | // If we used the default boundary, ensure the symbol is added to the section. | 64 | // If we used the default boundary, ensure the symbol is added to the section. |
66 | if (pendingRollbackBoundary.Id.Id == DefaultBoundaryId) | 65 | if (pendingRollbackBoundary.Id.Id == BurnConstants.BundleDefaultBoundaryId) |
67 | { | 66 | { |
68 | this.Section.AddSymbol(pendingRollbackBoundary); | 67 | this.Section.AddSymbol(pendingRollbackBoundary); |
69 | } | 68 | } |
@@ -97,7 +96,7 @@ namespace WixToolset.Core.Burn.Bundles | |||
97 | var nextRollbackBoundary = boundariesById[groupSymbol.ChildId]; | 96 | var nextRollbackBoundary = boundariesById[groupSymbol.ChildId]; |
98 | if (null != pendingRollbackBoundary) | 97 | if (null != pendingRollbackBoundary) |
99 | { | 98 | { |
100 | if (pendingRollbackBoundary.Id.Id != DefaultBoundaryId) | 99 | if (pendingRollbackBoundary.Id.Id != BurnConstants.BundleDefaultBoundaryId) |
101 | { | 100 | { |
102 | this.Messaging.Write(WarningMessages.DiscardedRollbackBoundary(nextRollbackBoundary.SourceLineNumbers, nextRollbackBoundary.Id.Id)); | 101 | this.Messaging.Write(WarningMessages.DiscardedRollbackBoundary(nextRollbackBoundary.SourceLineNumbers, nextRollbackBoundary.Id.Id)); |
103 | } | 102 | } |
diff --git a/src/WixToolset.Core/Compiler_Bundle.cs b/src/WixToolset.Core/Compiler_Bundle.cs index e09246df..6d2e75f7 100644 --- a/src/WixToolset.Core/Compiler_Bundle.cs +++ b/src/WixToolset.Core/Compiler_Bundle.cs | |||
@@ -535,6 +535,10 @@ namespace WixToolset.Core | |||
535 | { | 535 | { |
536 | case "Id": | 536 | case "Id": |
537 | id = this.Core.GetAttributeIdentifier(sourceLineNumbers, attrib); | 537 | id = this.Core.GetAttributeIdentifier(sourceLineNumbers, attrib); |
538 | if (id?.Id == BurnConstants.BurnUXContainerName || id?.Id == BurnConstants.BurnDefaultAttachedContainerName) | ||
539 | { | ||
540 | this.Messaging.Write(CompilerErrors.ReservedValue(sourceLineNumbers, node.Name.LocalName, "Id", id.Id)); | ||
541 | } | ||
538 | break; | 542 | break; |
539 | case "DownloadUrl": | 543 | case "DownloadUrl": |
540 | downloadUrl = this.Core.GetAttributeValue(sourceLineNumbers, attrib); | 544 | downloadUrl = this.Core.GetAttributeValue(sourceLineNumbers, attrib); |
@@ -1736,27 +1740,27 @@ namespace WixToolset.Core | |||
1736 | switch (child.Name.LocalName) | 1740 | switch (child.Name.LocalName) |
1737 | { | 1741 | { |
1738 | case "MsiPackage": | 1742 | case "MsiPackage": |
1739 | previousId = this.ParseMsiPackageElement(child, ComplexReferenceParentType.PackageGroup, "WixChain", previousType, previousId); | 1743 | previousId = this.ParseMsiPackageElement(child, ComplexReferenceParentType.PackageGroup, BurnConstants.BundleChainPackageGroupId, previousType, previousId); |
1740 | previousType = ComplexReferenceChildType.Package; | 1744 | previousType = ComplexReferenceChildType.Package; |
1741 | break; | 1745 | break; |
1742 | case "MspPackage": | 1746 | case "MspPackage": |
1743 | previousId = this.ParseMspPackageElement(child, ComplexReferenceParentType.PackageGroup, "WixChain", previousType, previousId); | 1747 | previousId = this.ParseMspPackageElement(child, ComplexReferenceParentType.PackageGroup, BurnConstants.BundleChainPackageGroupId, previousType, previousId); |
1744 | previousType = ComplexReferenceChildType.Package; | 1748 | previousType = ComplexReferenceChildType.Package; |
1745 | break; | 1749 | break; |
1746 | case "MsuPackage": | 1750 | case "MsuPackage": |
1747 | previousId = this.ParseMsuPackageElement(child, ComplexReferenceParentType.PackageGroup, "WixChain", previousType, previousId); | 1751 | previousId = this.ParseMsuPackageElement(child, ComplexReferenceParentType.PackageGroup, BurnConstants.BundleChainPackageGroupId, previousType, previousId); |
1748 | previousType = ComplexReferenceChildType.Package; | 1752 | previousType = ComplexReferenceChildType.Package; |
1749 | break; | 1753 | break; |
1750 | case "ExePackage": | 1754 | case "ExePackage": |
1751 | previousId = this.ParseExePackageElement(child, ComplexReferenceParentType.PackageGroup, "WixChain", previousType, previousId); | 1755 | previousId = this.ParseExePackageElement(child, ComplexReferenceParentType.PackageGroup, BurnConstants.BundleChainPackageGroupId, previousType, previousId); |
1752 | previousType = ComplexReferenceChildType.Package; | 1756 | previousType = ComplexReferenceChildType.Package; |
1753 | break; | 1757 | break; |
1754 | case "RollbackBoundary": | 1758 | case "RollbackBoundary": |
1755 | previousId = this.ParseRollbackBoundaryElement(child, ComplexReferenceParentType.PackageGroup, "WixChain", previousType, previousId); | 1759 | previousId = this.ParseRollbackBoundaryElement(child, ComplexReferenceParentType.PackageGroup, BurnConstants.BundleChainPackageGroupId, previousType, previousId); |
1756 | previousType = ComplexReferenceChildType.Package; | 1760 | previousType = ComplexReferenceChildType.Package; |
1757 | break; | 1761 | break; |
1758 | case "PackageGroupRef": | 1762 | case "PackageGroupRef": |
1759 | previousId = this.ParsePackageGroupRefElement(child, ComplexReferenceParentType.PackageGroup, "WixChain", previousType, previousId); | 1763 | previousId = this.ParsePackageGroupRefElement(child, ComplexReferenceParentType.PackageGroup, BurnConstants.BundleChainPackageGroupId, previousType, previousId); |
1760 | previousType = ComplexReferenceChildType.PackageGroup; | 1764 | previousType = ComplexReferenceChildType.PackageGroup; |
1761 | break; | 1765 | break; |
1762 | default: | 1766 | default: |
@@ -1873,6 +1877,10 @@ namespace WixToolset.Core | |||
1873 | { | 1877 | { |
1874 | case "Id": | 1878 | case "Id": |
1875 | id = this.Core.GetAttributeIdentifier(sourceLineNumbers, attrib); | 1879 | id = this.Core.GetAttributeIdentifier(sourceLineNumbers, attrib); |
1880 | if (id?.Id == BurnConstants.BundleDefaultBoundaryId) | ||
1881 | { | ||
1882 | this.Messaging.Write(CompilerErrors.ReservedValue(sourceLineNumbers, node.Name.LocalName, "Id", id.Id)); | ||
1883 | } | ||
1876 | break; | 1884 | break; |
1877 | case "Vital": | 1885 | case "Vital": |
1878 | vital = this.Core.GetAttributeYesNoValue(sourceLineNumbers, attrib); | 1886 | vital = this.Core.GetAttributeYesNoValue(sourceLineNumbers, attrib); |
@@ -2151,6 +2159,11 @@ namespace WixToolset.Core | |||
2151 | compilerPayload.FinishCompilingPackage(); | 2159 | compilerPayload.FinishCompilingPackage(); |
2152 | var id = compilerPayload.Id; | 2160 | var id = compilerPayload.Id; |
2153 | 2161 | ||
2162 | if (id.Id == BurnConstants.BundleDefaultBoundaryId) | ||
2163 | { | ||
2164 | this.Messaging.Write(CompilerErrors.ReservedValue(sourceLineNumbers, node.Name.LocalName, "Id", id.Id)); | ||
2165 | } | ||
2166 | |||
2154 | if (null == logPathVariable) | 2167 | if (null == logPathVariable) |
2155 | { | 2168 | { |
2156 | logPathVariable = String.Concat("WixBundleLog_", id.Id); | 2169 | logPathVariable = String.Concat("WixBundleLog_", id.Id); |
@@ -2588,6 +2601,10 @@ namespace WixToolset.Core | |||
2588 | { | 2601 | { |
2589 | case "Id": | 2602 | case "Id": |
2590 | id = this.Core.GetAttributeIdentifier(sourceLineNumbers, attrib); | 2603 | id = this.Core.GetAttributeIdentifier(sourceLineNumbers, attrib); |
2604 | if (id?.Id == BurnConstants.BundleChainPackageGroupId) | ||
2605 | { | ||
2606 | this.Messaging.Write(CompilerErrors.ReservedValue(sourceLineNumbers, node.Name.LocalName, "Id", id.Id)); | ||
2607 | } | ||
2591 | break; | 2608 | break; |
2592 | default: | 2609 | default: |
2593 | this.Core.UnexpectedAttribute(node, attrib); | 2610 | this.Core.UnexpectedAttribute(node, attrib); |
@@ -2694,7 +2711,14 @@ namespace WixToolset.Core | |||
2694 | { | 2711 | { |
2695 | case "Id": | 2712 | case "Id": |
2696 | id = this.Core.GetAttributeIdentifierValue(sourceLineNumbers, attrib); | 2713 | id = this.Core.GetAttributeIdentifierValue(sourceLineNumbers, attrib); |
2697 | this.Core.CreateSimpleReference(sourceLineNumbers, SymbolDefinitions.WixBundlePackageGroup, id); | 2714 | if (id == BurnConstants.BundleChainPackageGroupId) |
2715 | { | ||
2716 | this.Messaging.Write(CompilerErrors.ReservedValue(sourceLineNumbers, node.Name.LocalName, "Id", id)); | ||
2717 | } | ||
2718 | else | ||
2719 | { | ||
2720 | this.Core.CreateSimpleReference(sourceLineNumbers, SymbolDefinitions.WixBundlePackageGroup, id); | ||
2721 | } | ||
2698 | break; | 2722 | break; |
2699 | case "After": | 2723 | case "After": |
2700 | after = this.Core.GetAttributeIdentifierValue(sourceLineNumbers, attrib); | 2724 | after = this.Core.GetAttributeIdentifierValue(sourceLineNumbers, attrib); |
diff --git a/src/WixToolset.Core/Link/FlattenAndProcessBundleTablesCommand.cs b/src/WixToolset.Core/Link/FlattenAndProcessBundleTablesCommand.cs index e8df25ed..52734141 100644 --- a/src/WixToolset.Core/Link/FlattenAndProcessBundleTablesCommand.cs +++ b/src/WixToolset.Core/Link/FlattenAndProcessBundleTablesCommand.cs | |||
@@ -54,7 +54,7 @@ namespace WixToolset.Core.Link | |||
54 | 54 | ||
55 | // Create Chain packages... | 55 | // Create Chain packages... |
56 | groups.UseTypes(new[] { ComplexReferenceParentType.PackageGroup }, new[] { ComplexReferenceChildType.Package, ComplexReferenceChildType.PackageGroup }); | 56 | groups.UseTypes(new[] { ComplexReferenceParentType.PackageGroup }, new[] { ComplexReferenceChildType.Package, ComplexReferenceChildType.PackageGroup }); |
57 | groups.FlattenAndRewriteRows(ComplexReferenceParentType.PackageGroup, "WixChain", false); | 57 | groups.FlattenAndRewriteRows(ComplexReferenceParentType.PackageGroup, BurnConstants.BundleChainPackageGroupId, false); |
58 | 58 | ||
59 | groups.RemoveUsedGroupRows(); | 59 | groups.RemoveUsedGroupRows(); |
60 | } | 60 | } |
@@ -93,7 +93,7 @@ namespace WixToolset.Core.Link | |||
93 | switch (groupSymbol.ParentType) | 93 | switch (groupSymbol.ParentType) |
94 | { | 94 | { |
95 | case ComplexReferenceParentType.PackageGroup: | 95 | case ComplexReferenceParentType.PackageGroup: |
96 | if (groupSymbol.ParentId == "WixChain") | 96 | if (groupSymbol.ParentId == BurnConstants.BundleChainPackageGroupId) |
97 | { | 97 | { |
98 | referencedPackages.Add(groupSymbol.ChildId); | 98 | referencedPackages.Add(groupSymbol.ChildId); |
99 | } | 99 | } |