@joebigelow / wix-1 / commits / 2b6fa3ab

Allow default major upgrade to be rescheduled.

Fixes https://github.com/wixtoolset/issues/issues/8046.

Bob Arnson committed Mar 26, 2024 at 22:49 UTC 2b6fa3ab686188cfe983abbc3d51d1542069b2c8
3 files changed +26 -1
src/wix/WixToolset.Core/Link/AddDefaultSymbolsCommand.cs
+5 -1
@@ -99,6 +99,7 @@ namespace WixToolset.Core.Link
99 SequenceTable = SequenceTable.InstallExecuteSequence,
100 Action = "RemoveExistingProducts",
101 After = "InstallValidate",
102 + Overridable = true,
103 },
104 new WixSimpleReferenceSymbol(packageSymbol.SourceLineNumbers)
105 {
@@ -126,7 +127,10 @@ namespace WixToolset.Core.Link
127 {
128 var symbolWithSection = new SymbolWithSection(section, symbol);
129 var fullName = symbolWithSection.GetFullName();
129 - this.Find.SymbolsByName.Add(fullName, symbolWithSection);
130 + if (!this.Find.SymbolsByName.ContainsKey(fullName))
131 + {
132 + this.Find.SymbolsByName.Add(fullName, symbolWithSection);
133 + }
134 }
135 }
136 }
src/wix/test/WixToolsetTest.CoreIntegration/TestData/DefaultMajorUpgradeReschedule/DefaultMajorUpgradeReschedule.wxs new
+7
@@ -0,0 +1,7 @@
1 +<Wix xmlns="http://wixtoolset.org/schemas/v4/wxs">
2 + <Package Name="DefaultMajorUpgradeReschedule" Language="1033" Version="2.0.0" Manufacturer="Example Corporation" UpgradeCode="{3F2494B1-AF5E-48ED-9C9E-843F1DB2BC97}">
3 + <InstallExecuteSequence>
4 + <RemoveExistingProducts After="InstallFinalize" />
5 + </InstallExecuteSequence>
6 + </Package>
7 +</Wix>
src/wix/test/WixToolsetTest.CoreIntegration/UpgradeFixture.cs
+14
@@ -73,6 +73,20 @@ namespace WixToolsetTest.CoreIntegration
73 }, results);
74 }
75
76 + [Fact]
77 + public void CanRescheduleRemoveExistingProductsWithDefaultMajorUpgrade()
78 + {
79 + var folder = TestData.Get("TestData", "DefaultMajorUpgradeReschedule");
80 + var build = new Builder(folder, new Type[] { }, new[] { folder });
81 +
82 + var results = build.BuildAndQuery(Build, "InstallExecuteSequence").Where(r => r.StartsWith("InstallExecuteSequence:RemoveExistingProducts") || r.StartsWith("InstallExecuteSequence:InstallFinalize")).ToArray();
83 + WixAssert.CompareLineByLine(new[]
84 + {
85 + "InstallExecuteSequence:InstallFinalize\t\t6600",
86 + "InstallExecuteSequence:RemoveExistingProducts\t\t6601",
87 + }, results);
88 + }
89 +
90 [Fact]
91 public void CanOverrideDefaultMajorUpgradeLaunchConditionMessage()
92 {