From d0462be8000f18aa7dc0791d02142f000bb19fbf Mon Sep 17 00:00:00 2001 From: Rob Mensching Date: Wed, 22 May 2019 00:58:13 -0700 Subject: Integrate latest changes to tuple definitions --- .../Bind/SequenceActionsCommand.cs | 60 ++++++++++++---------- 1 file changed, 32 insertions(+), 28 deletions(-) (limited to 'src/WixToolset.Core.WindowsInstaller/Bind/SequenceActionsCommand.cs') diff --git a/src/WixToolset.Core.WindowsInstaller/Bind/SequenceActionsCommand.cs b/src/WixToolset.Core.WindowsInstaller/Bind/SequenceActionsCommand.cs index f1a47f70..3cba0f51 100644 --- a/src/WixToolset.Core.WindowsInstaller/Bind/SequenceActionsCommand.cs +++ b/src/WixToolset.Core.WindowsInstaller/Bind/SequenceActionsCommand.cs @@ -6,7 +6,6 @@ namespace WixToolset.Core.WindowsInstaller.Bind using System.Collections.Generic; using System.Globalization; using System.Linq; - using WixToolset.Core.Native; using WixToolset.Data; using WixToolset.Data.Tuples; using WixToolset.Data.WindowsInstaller; @@ -31,20 +30,10 @@ namespace WixToolset.Core.WindowsInstaller.Bind public IMessaging Messaging { private get; set; } - public void Execute() - { - var actions = this.Section.Tuples.OfType().ToList(); - var suppressActions = this.Section.Tuples.OfType().ToList(); - - this.SequenceActions(actions, suppressActions); - } - /// /// Set sequence numbers for all the actions and create rows in the output object. /// - /// Collection of actions to schedule. - /// Collection of actions to suppress. - private void SequenceActions(List actionRows, List suppressActionRows) + public void Execute() { var overridableActionRows = new Dictionary(); var requiredActionRows = new Dictionary(); @@ -118,7 +107,7 @@ namespace WixToolset.Core.WindowsInstaller.Bind } // Suppress the required actions that are overridable. - foreach (var suppressActionRow in suppressActionRows) + foreach (var suppressActionRow in this.Section.Tuples.OfType()) { var key = suppressActionRow.Id.Id; @@ -233,7 +222,7 @@ namespace WixToolset.Core.WindowsInstaller.Bind { if (sequenceScheduledActionRow.Sequence == actionRow.Sequence) { - this.Messaging.Write(WarningMessages.ActionSequenceCollision(actionRow.SourceLineNumbers, actionRow.SequenceTable.ToString(), actionRow.Action, sequenceScheduledActionRow.Action, actionRow.Sequence)); + this.Messaging.Write(WarningMessages.ActionSequenceCollision(actionRow.SourceLineNumbers, actionRow.SequenceTable.ToString(), actionRow.Action, sequenceScheduledActionRow.Action, actionRow.Sequence ?? 0)); if (null != sequenceScheduledActionRow.SourceLineNumbers) { this.Messaging.Write(WarningMessages.ActionSequenceCollision2(sequenceScheduledActionRow.SourceLineNumbers)); @@ -245,7 +234,7 @@ namespace WixToolset.Core.WindowsInstaller.Bind } } - absoluteActionRows.Sort((x, y) => x.Sequence.CompareTo(y.Sequence)); + absoluteActionRows.Sort((x, y) => (x.Sequence ?? 0).CompareTo(y.Sequence ?? 0)); // Schedule the relatively scheduled actions (by resolving the dependency trees). var previousUsedSequence = 0; @@ -310,7 +299,7 @@ namespace WixToolset.Core.WindowsInstaller.Bind var nextUsedSequence = Int16.MaxValue + 1; if (absoluteActionRows.Count > j + 1) { - nextUsedSequence = absoluteActionRows[j + 1].Sequence; + nextUsedSequence = absoluteActionRows[j + 1].Sequence ?? 0; } // Schedule the action rows after this one. @@ -337,7 +326,7 @@ namespace WixToolset.Core.WindowsInstaller.Bind } // keep track of this sequence number as the previous used sequence number for the next iteration - previousUsedSequence = absoluteActionRow.Sequence; + previousUsedSequence = absoluteActionRow.Sequence ?? 0; } // add the absolutely and relatively scheduled actions to the list of scheduled actions @@ -412,9 +401,6 @@ namespace WixToolset.Core.WindowsInstaller.Bind set.Add("InstallExecuteSequence/AppSearch"); set.Add("InstallUISequence/AppSearch"); break; - case TupleDefinitionType.BindImage: - set.Add("InstallExecuteSequence/BindImage"); - break; case TupleDefinitionType.CCPSearch: set.Add("InstallExecuteSequence/AppSearch"); set.Add("InstallExecuteSequence/CCPSearch"); @@ -452,10 +438,32 @@ namespace WixToolset.Core.WindowsInstaller.Bind case TupleDefinitionType.File: set.Add("InstallExecuteSequence/InstallFiles"); set.Add("InstallExecuteSequence/RemoveFiles"); - break; - case TupleDefinitionType.Font: - set.Add("InstallExecuteSequence/RegisterFonts"); - set.Add("InstallExecuteSequence/UnregisterFonts"); + + var foundFont = false; + var foundSelfReg = false; + var foundBindPath = false; + foreach (var file in this.Section.Tuples.OfType()) + { + if (!foundFont && !String.IsNullOrEmpty(file.FontTitle)) + { + set.Add("InstallExecuteSequence/RegisterFonts"); + set.Add("InstallExecuteSequence/UnregisterFonts"); + foundFont = true; + } + + if (!foundSelfReg && file.SelfRegCost.HasValue) + { + set.Add("InstallExecuteSequence/SelfRegModules"); + set.Add("InstallExecuteSequence/SelfUnregModules"); + foundSelfReg = true; + } + + if (!foundBindPath && !String.IsNullOrEmpty(file.BindPath)) + { + set.Add("InstallExecuteSequence/BindImage"); + foundBindPath = true; + } + } break; case TupleDefinitionType.IniFile: case TupleDefinitionType.RemoveIniFile: @@ -511,10 +519,6 @@ namespace WixToolset.Core.WindowsInstaller.Bind case TupleDefinitionType.RemoveFile: set.Add("InstallExecuteSequence/RemoveFiles"); break; - case TupleDefinitionType.SelfReg: - set.Add("InstallExecuteSequence/SelfRegModules"); - set.Add("InstallExecuteSequence/SelfUnregModules"); - break; case TupleDefinitionType.ServiceControl: set.Add("InstallExecuteSequence/StartServices"); set.Add("InstallExecuteSequence/StopServices"); -- cgit v1.2.3-55-g6feb