aboutsummaryrefslogtreecommitdiff
path: root/src/ext/Bal/wixext
diff options
context:
space:
mode:
authorCharles Baker <charles@juicelabs.co>2024-10-24 13:13:26 +1300
committerRob Mensching <rob@firegiant.com>2026-01-03 06:00:27 -0800
commit8ebde131206f1502cbff2055941ffe52e2802439 (patch)
treec2d9ab840f59d8036c6f19f714b921b27b60f0f7 /src/ext/Bal/wixext
parent2a58247b62bdea7c829ca643812faa7665f39a73 (diff)
downloadwix-8ebde131206f1502cbff2055941ffe52e2802439.tar.gz
wix-8ebde131206f1502cbff2055941ffe52e2802439.tar.bz2
wix-8ebde131206f1502cbff2055941ffe52e2802439.zip
Add bal:DisplayFilesInUseDialogCondition to disable Files In Use dialog
Disabling display skips showing the "Files In Use" dialog and returning a result as if the user had chosen to ignore the dialog and reboot in the case of files that were unable to be replaced.
Diffstat (limited to 'src/ext/Bal/wixext')
-rw-r--r--src/ext/Bal/wixext/BalBurnBackendExtension.cs22
-rw-r--r--src/ext/Bal/wixext/BalCompiler.cs14
-rw-r--r--src/ext/Bal/wixext/BalWarnings.cs6
-rw-r--r--src/ext/Bal/wixext/Symbols/WixBalPackageInfoSymbol.cs8
4 files changed, 50 insertions, 0 deletions
diff --git a/src/ext/Bal/wixext/BalBurnBackendExtension.cs b/src/ext/Bal/wixext/BalBurnBackendExtension.cs
index 82195549..5831bb8a 100644
--- a/src/ext/Bal/wixext/BalBurnBackendExtension.cs
+++ b/src/ext/Bal/wixext/BalBurnBackendExtension.cs
@@ -51,6 +51,11 @@ namespace WixToolset.BootstrapperApplications
51 writer.WriteAttributeString("DisplayInternalUICondition", balPackageInfoSymbol.DisplayInternalUICondition); 51 writer.WriteAttributeString("DisplayInternalUICondition", balPackageInfoSymbol.DisplayInternalUICondition);
52 } 52 }
53 53
54 if (balPackageInfoSymbol.DisplayFilesInUseDialogCondition != null)
55 {
56 writer.WriteAttributeString("DisplayFilesInUseDialogCondition", balPackageInfoSymbol.DisplayFilesInUseDialogCondition);
57 }
58
54 if (balPackageInfoSymbol.PrimaryPackageType != BalPrimaryPackageType.None) 59 if (balPackageInfoSymbol.PrimaryPackageType != BalPrimaryPackageType.None)
55 { 60 {
56 writer.WriteAttributeString("PrimaryPackageType", balPackageInfoSymbol.PrimaryPackageType.ToString().ToLower()); 61 writer.WriteAttributeString("PrimaryPackageType", balPackageInfoSymbol.PrimaryPackageType.ToString().ToLower());
@@ -104,6 +109,7 @@ namespace WixToolset.BootstrapperApplications
104 109
105 this.VerifyBalConditions(section); 110 this.VerifyBalConditions(section);
106 this.VerifyDisplayInternalUICondition(section); 111 this.VerifyDisplayInternalUICondition(section);
112 this.VerifyDisplayFilesInUseDialogCondition(section);
107 this.VerifyOverridableVariables(section); 113 this.VerifyOverridableVariables(section);
108 114
109 var balBaSymbol = section.Symbols.OfType<WixBalBootstrapperApplicationSymbol>().SingleOrDefault(); 115 var balBaSymbol = section.Symbols.OfType<WixBalBootstrapperApplicationSymbol>().SingleOrDefault();
@@ -195,6 +201,17 @@ namespace WixToolset.BootstrapperApplications
195 } 201 }
196 } 202 }
197 203
204 private void VerifyDisplayFilesInUseDialogCondition(IntermediateSection section)
205 {
206 foreach (var balPackageInfoSymbol in section.Symbols.OfType<WixBalPackageInfoSymbol>().ToList())
207 {
208 if (balPackageInfoSymbol.DisplayFilesInUseDialogCondition != null)
209 {
210 this.BackendHelper.ValidateBundleCondition(balPackageInfoSymbol.SourceLineNumbers, "*Package", "bal:DisplayFilesInUseDialogCondition", balPackageInfoSymbol.DisplayFilesInUseDialogCondition, BundleConditionPhase.Plan);
211 }
212 }
213 }
214
198 private void VerifyPrimaryPackages(IntermediateSection section, SourceLineNumber baSourceLineNumbers) 215 private void VerifyPrimaryPackages(IntermediateSection section, SourceLineNumber baSourceLineNumbers)
199 { 216 {
200 WixBalPackageInfoSymbol defaultPrimaryPackage = null; 217 WixBalPackageInfoSymbol defaultPrimaryPackage = null;
@@ -420,6 +437,11 @@ namespace WixToolset.BootstrapperApplications
420 { 437 {
421 this.Messaging.Write(BalWarnings.IuibaPrimaryPackageDisplayInternalUICondition(packageSymbol.SourceLineNumbers)); 438 this.Messaging.Write(BalWarnings.IuibaPrimaryPackageDisplayInternalUICondition(packageSymbol.SourceLineNumbers));
422 } 439 }
440
441 if (balPackageInfoSymbol.DisplayFilesInUseDialogCondition != null)
442 {
443 this.Messaging.Write(BalWarnings.IuibaPrimaryPackageDisplayFilesInUseDialogCondition(packageSymbol.SourceLineNumbers));
444 }
423 } 445 }
424 446
425 private void VerifyOverridableVariables(IntermediateSection section) 447 private void VerifyOverridableVariables(IntermediateSection section)
diff --git a/src/ext/Bal/wixext/BalCompiler.cs b/src/ext/Bal/wixext/BalCompiler.cs
index 35c86233..b7d5f679 100644
--- a/src/ext/Bal/wixext/BalCompiler.cs
+++ b/src/ext/Bal/wixext/BalCompiler.cs
@@ -200,6 +200,20 @@ namespace WixToolset.BootstrapperApplications
200 break; 200 break;
201 } 201 }
202 break; 202 break;
203 case "DisplayFilesInUseDialogCondition":
204 switch (parentElement.Name.LocalName)
205 {
206 case "MsiPackage":
207 case "MspPackage":
208 var displayFilesInUseDialogCondition = this.ParseHelper.GetAttributeValue(sourceLineNumbers, attribute);
209 var packageInfo = this.GetBalPackageInfoSymbol(section, sourceLineNumbers, packageId);
210 packageInfo.DisplayFilesInUseDialogCondition = displayFilesInUseDialogCondition;
211 break;
212 default:
213 this.ParseHelper.UnexpectedAttribute(parentElement, attribute);
214 break;
215 }
216 break;
203 case "PrimaryPackageType": 217 case "PrimaryPackageType":
204 { 218 {
205 var primaryPackageType = BalPrimaryPackageType.None; 219 var primaryPackageType = BalPrimaryPackageType.None;
diff --git a/src/ext/Bal/wixext/BalWarnings.cs b/src/ext/Bal/wixext/BalWarnings.cs
index 8c5d892f..f86837f9 100644
--- a/src/ext/Bal/wixext/BalWarnings.cs
+++ b/src/ext/Bal/wixext/BalWarnings.cs
@@ -23,6 +23,11 @@ namespace WixToolset.BootstrapperApplications
23 return Message(sourceLineNumbers, Ids.IuibaPrimaryPackageDisplayInternalUICondition, "WixInternalUIBootstrapperApplication ignores DisplayInternalUICondition for the primary package so that the MSI UI is always shown."); 23 return Message(sourceLineNumbers, Ids.IuibaPrimaryPackageDisplayInternalUICondition, "WixInternalUIBootstrapperApplication ignores DisplayInternalUICondition for the primary package so that the MSI UI is always shown.");
24 } 24 }
25 25
26 public static Message IuibaPrimaryPackageDisplayFilesInUseDialogCondition(SourceLineNumber sourceLineNumbers)
27 {
28 return Message(sourceLineNumbers, Ids.IuibaPrimaryPackageDisplayFilesInUseDialogCondition, "WixInternalUIBootstrapperApplication ignores DisplayFilesInUseDialogCondition for the primary package so that the MSI UI is always shown.");
29 }
30
26 public static Message IuibaPrimaryPackageInstallCondition(SourceLineNumber sourceLineNumbers) 31 public static Message IuibaPrimaryPackageInstallCondition(SourceLineNumber sourceLineNumbers)
27 { 32 {
28 return Message(sourceLineNumbers, Ids.IuibaPrimaryPackageInstallCondition, "WixInternalUIBootstrapperApplication ignores InstallCondition for the primary package so that the MSI UI is always shown."); 33 return Message(sourceLineNumbers, Ids.IuibaPrimaryPackageInstallCondition, "WixInternalUIBootstrapperApplication ignores InstallCondition for the primary package so that the MSI UI is always shown.");
@@ -56,6 +61,7 @@ namespace WixToolset.BootstrapperApplications
56 IuibaPrimaryPackageDisplayInternalUICondition = 6504, 61 IuibaPrimaryPackageDisplayInternalUICondition = 6504,
57 IuibaPrereqPackageAfterPrimaryPackage = 6505, 62 IuibaPrereqPackageAfterPrimaryPackage = 6505,
58 DeprecatedBAFactoryAssemblyAttribute = 6506, 63 DeprecatedBAFactoryAssemblyAttribute = 6506,
64 IuibaPrimaryPackageDisplayFilesInUseDialogCondition = 6507,
59 } 65 }
60 } 66 }
61} 67}
diff --git a/src/ext/Bal/wixext/Symbols/WixBalPackageInfoSymbol.cs b/src/ext/Bal/wixext/Symbols/WixBalPackageInfoSymbol.cs
index e2636d33..6e90c2b9 100644
--- a/src/ext/Bal/wixext/Symbols/WixBalPackageInfoSymbol.cs
+++ b/src/ext/Bal/wixext/Symbols/WixBalPackageInfoSymbol.cs
@@ -14,6 +14,7 @@ namespace WixToolset.BootstrapperApplications
14 new IntermediateFieldDefinition(nameof(WixBalPackageInfoSymbolFields.PackageId), IntermediateFieldType.String), 14 new IntermediateFieldDefinition(nameof(WixBalPackageInfoSymbolFields.PackageId), IntermediateFieldType.String),
15 new IntermediateFieldDefinition(nameof(WixBalPackageInfoSymbolFields.DisplayInternalUICondition), IntermediateFieldType.String), 15 new IntermediateFieldDefinition(nameof(WixBalPackageInfoSymbolFields.DisplayInternalUICondition), IntermediateFieldType.String),
16 new IntermediateFieldDefinition(nameof(WixBalPackageInfoSymbolFields.PrimaryPackageType), IntermediateFieldType.Number), 16 new IntermediateFieldDefinition(nameof(WixBalPackageInfoSymbolFields.PrimaryPackageType), IntermediateFieldType.Number),
17 new IntermediateFieldDefinition(nameof(WixBalPackageInfoSymbolFields.DisplayFilesInUseDialogCondition), IntermediateFieldType.String),
17 }, 18 },
18 typeof(WixBalPackageInfoSymbol)); 19 typeof(WixBalPackageInfoSymbol));
19 } 20 }
@@ -28,6 +29,7 @@ namespace WixToolset.BootstrapperApplications.Symbols
28 PackageId, 29 PackageId,
29 DisplayInternalUICondition, 30 DisplayInternalUICondition,
30 PrimaryPackageType, 31 PrimaryPackageType,
32 DisplayFilesInUseDialogCondition,
31 } 33 }
32 34
33 public enum BalPrimaryPackageType 35 public enum BalPrimaryPackageType
@@ -68,5 +70,11 @@ namespace WixToolset.BootstrapperApplications.Symbols
68 get => (BalPrimaryPackageType)this.Fields[(int)WixBalPackageInfoSymbolFields.PrimaryPackageType].AsNumber(); 70 get => (BalPrimaryPackageType)this.Fields[(int)WixBalPackageInfoSymbolFields.PrimaryPackageType].AsNumber();
69 set => this.Set((int)WixBalPackageInfoSymbolFields.PrimaryPackageType, (int)value); 71 set => this.Set((int)WixBalPackageInfoSymbolFields.PrimaryPackageType, (int)value);
70 } 72 }
73
74 public string DisplayFilesInUseDialogCondition
75 {
76 get => this.Fields[(int)WixBalPackageInfoSymbolFields.DisplayFilesInUseDialogCondition].AsString();
77 set => this.Set((int)WixBalPackageInfoSymbolFields.DisplayFilesInUseDialogCondition, value);
78 }
71 } 79 }
72} 80}