From d77302d94b356a1db2b2b834e45c8962381eae6b Mon Sep 17 00:00:00 2001 From: Rob Mensching Date: Sat, 10 Apr 2021 15:24:33 -0700 Subject: Add support for RepairCondition on Exe, Msi and Msp packages --- .../Bundles/CreateBurnManifestCommand.cs | 13 +++++++++++++ src/WixToolset.Core/Compiler_Bundle.cs | 8 ++++++++ 2 files changed, 21 insertions(+) (limited to 'src') diff --git a/src/WixToolset.Core.Burn/Bundles/CreateBurnManifestCommand.cs b/src/WixToolset.Core.Burn/Bundles/CreateBurnManifestCommand.cs index fa44a8e3..128c7a5f 100644 --- a/src/WixToolset.Core.Burn/Bundles/CreateBurnManifestCommand.cs +++ b/src/WixToolset.Core.Burn/Bundles/CreateBurnManifestCommand.cs @@ -399,6 +399,10 @@ namespace WixToolset.Core.Burn.Bundles writer.WriteAttributeString("InstallArguments", exePackage.InstallCommand); writer.WriteAttributeString("UninstallArguments", exePackage.UninstallCommand); writer.WriteAttributeString("RepairArguments", exePackage.RepairCommand); + if (!String.IsNullOrEmpty(exePackage.RepairCondition)) + { + writer.WriteAttributeString("RepairCondition", exePackage.RepairCondition); + } writer.WriteAttributeString("Repairable", exePackage.Repairable ? "yes" : "no"); if (!String.IsNullOrEmpty(exePackage.ExeProtocol)) { @@ -410,6 +414,10 @@ namespace WixToolset.Core.Burn.Bundles writer.WriteAttributeString("ProductCode", msiPackage.ProductCode); writer.WriteAttributeString("Language", msiPackage.ProductLanguage.ToString(CultureInfo.InvariantCulture)); writer.WriteAttributeString("Version", msiPackage.ProductVersion); + if (!String.IsNullOrEmpty(msiPackage.RepairCondition)) + { + writer.WriteAttributeString("RepairCondition", msiPackage.RepairCondition); + } if (!String.IsNullOrEmpty(msiPackage.UpgradeCode)) { writer.WriteAttributeString("UpgradeCode", msiPackage.UpgradeCode); @@ -420,6 +428,11 @@ namespace WixToolset.Core.Burn.Bundles writer.WriteAttributeString("PatchCode", mspPackage.PatchCode); writer.WriteAttributeString("PatchXml", mspPackage.PatchXml); + if (!String.IsNullOrEmpty(mspPackage.RepairCondition)) + { + writer.WriteAttributeString("RepairCondition", mspPackage.RepairCondition); + } + // If there is still a chance that all of our patches will target a narrow set of // product codes, add the patch list to the overall list. if (null != targetCodes) diff --git a/src/WixToolset.Core/Compiler_Bundle.cs b/src/WixToolset.Core/Compiler_Bundle.cs index 779ad376..d6e9e7af 100644 --- a/src/WixToolset.Core/Compiler_Bundle.cs +++ b/src/WixToolset.Core/Compiler_Bundle.cs @@ -1974,6 +1974,7 @@ namespace WixToolset.Core var perMachine = YesNoDefaultType.NotSet; string detectCondition = null; string protocol = null; + string repairCondition = null; var installSize = CompilerConstants.IntegerNotSet; string msuKB = null; var enableFeatureSelection = YesNoType.NotSet; @@ -2093,6 +2094,10 @@ namespace WixToolset.Core protocol = this.Core.GetAttributeValue(sourceLineNumbers, attrib); allowed = (packageType == WixBundlePackageType.Exe); break; + case "RepairCondition": + repairCondition = this.Core.GetAttributeValue(sourceLineNumbers, attrib, EmptyRule.CanBeEmpty); + allowed = (packageType == WixBundlePackageType.Exe || packageType == WixBundlePackageType.Msi || packageType == WixBundlePackageType.Msp); + break; case "InstallSize": installSize = this.Core.GetAttributeIntegerValue(sourceLineNumbers, attrib, 0, Int32.MaxValue); break; @@ -2340,6 +2345,7 @@ namespace WixToolset.Core InstallCommand = installArguments, RepairCommand = repairArguments, UninstallCommand = uninstallArguments, + RepairCondition = repairCondition, ExeProtocol = protocol }); break; @@ -2351,6 +2357,7 @@ namespace WixToolset.Core this.Core.AddSymbol(new WixBundleMsiPackageSymbol(sourceLineNumbers, id) { + RepairCondition = repairCondition, Attributes = msiAttributes }); break; @@ -2361,6 +2368,7 @@ namespace WixToolset.Core this.Core.AddSymbol(new WixBundleMspPackageSymbol(sourceLineNumbers, id) { + RepairCondition = repairCondition, Attributes = mspAttributes }); break; -- cgit v1.2.3-55-g6feb