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
{