diff options
| author | Rob Mensching <rob@firegiant.com> | 2019-05-22 00:58:13 -0700 |
|---|---|---|
| committer | Rob Mensching <rob@firegiant.com> | 2019-05-23 16:02:37 -0700 |
| commit | d0462be8000f18aa7dc0791d02142f000bb19fbf (patch) | |
| tree | 072aabc2bd9b8f171e17654473f85c44a8a42a66 /src/WixToolset.Core.WindowsInstaller/Bind/SequenceActionsCommand.cs | |
| parent | 1ed894bc0f39397ec7f7f6344370fc2123420c43 (diff) | |
| download | wix-d0462be8000f18aa7dc0791d02142f000bb19fbf.tar.gz wix-d0462be8000f18aa7dc0791d02142f000bb19fbf.tar.bz2 wix-d0462be8000f18aa7dc0791d02142f000bb19fbf.zip | |
Integrate latest changes to tuple definitions
Diffstat (limited to 'src/WixToolset.Core.WindowsInstaller/Bind/SequenceActionsCommand.cs')
| -rw-r--r-- | src/WixToolset.Core.WindowsInstaller/Bind/SequenceActionsCommand.cs | 60 |
1 files changed, 32 insertions, 28 deletions
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 | |||
| 6 | using System.Collections.Generic; | 6 | using System.Collections.Generic; |
| 7 | using System.Globalization; | 7 | using System.Globalization; |
| 8 | using System.Linq; | 8 | using System.Linq; |
| 9 | using WixToolset.Core.Native; | ||
| 10 | using WixToolset.Data; | 9 | using WixToolset.Data; |
| 11 | using WixToolset.Data.Tuples; | 10 | using WixToolset.Data.Tuples; |
| 12 | using WixToolset.Data.WindowsInstaller; | 11 | using WixToolset.Data.WindowsInstaller; |
| @@ -31,20 +30,10 @@ namespace WixToolset.Core.WindowsInstaller.Bind | |||
| 31 | 30 | ||
| 32 | public IMessaging Messaging { private get; set; } | 31 | public IMessaging Messaging { private get; set; } |
| 33 | 32 | ||
| 34 | public void Execute() | ||
| 35 | { | ||
| 36 | var actions = this.Section.Tuples.OfType<WixActionTuple>().ToList(); | ||
| 37 | var suppressActions = this.Section.Tuples.OfType<WixSuppressActionTuple>().ToList(); | ||
| 38 | |||
| 39 | this.SequenceActions(actions, suppressActions); | ||
| 40 | } | ||
| 41 | |||
| 42 | /// <summary> | 33 | /// <summary> |
| 43 | /// Set sequence numbers for all the actions and create rows in the output object. | 34 | /// Set sequence numbers for all the actions and create rows in the output object. |
| 44 | /// </summary> | 35 | /// </summary> |
| 45 | /// <param name="actionRows">Collection of actions to schedule.</param> | 36 | public void Execute() |
| 46 | /// <param name="suppressActionRows">Collection of actions to suppress.</param> | ||
| 47 | private void SequenceActions(List<WixActionTuple> actionRows, List<WixSuppressActionTuple> suppressActionRows) | ||
| 48 | { | 37 | { |
| 49 | var overridableActionRows = new Dictionary<string, WixActionTuple>(); | 38 | var overridableActionRows = new Dictionary<string, WixActionTuple>(); |
| 50 | var requiredActionRows = new Dictionary<string, WixActionTuple>(); | 39 | var requiredActionRows = new Dictionary<string, WixActionTuple>(); |
| @@ -118,7 +107,7 @@ namespace WixToolset.Core.WindowsInstaller.Bind | |||
| 118 | } | 107 | } |
| 119 | 108 | ||
| 120 | // Suppress the required actions that are overridable. | 109 | // Suppress the required actions that are overridable. |
| 121 | foreach (var suppressActionRow in suppressActionRows) | 110 | foreach (var suppressActionRow in this.Section.Tuples.OfType<WixSuppressActionTuple>()) |
| 122 | { | 111 | { |
| 123 | var key = suppressActionRow.Id.Id; | 112 | var key = suppressActionRow.Id.Id; |
| 124 | 113 | ||
| @@ -233,7 +222,7 @@ namespace WixToolset.Core.WindowsInstaller.Bind | |||
| 233 | { | 222 | { |
| 234 | if (sequenceScheduledActionRow.Sequence == actionRow.Sequence) | 223 | if (sequenceScheduledActionRow.Sequence == actionRow.Sequence) |
| 235 | { | 224 | { |
| 236 | this.Messaging.Write(WarningMessages.ActionSequenceCollision(actionRow.SourceLineNumbers, actionRow.SequenceTable.ToString(), actionRow.Action, sequenceScheduledActionRow.Action, actionRow.Sequence)); | 225 | this.Messaging.Write(WarningMessages.ActionSequenceCollision(actionRow.SourceLineNumbers, actionRow.SequenceTable.ToString(), actionRow.Action, sequenceScheduledActionRow.Action, actionRow.Sequence ?? 0)); |
| 237 | if (null != sequenceScheduledActionRow.SourceLineNumbers) | 226 | if (null != sequenceScheduledActionRow.SourceLineNumbers) |
| 238 | { | 227 | { |
| 239 | this.Messaging.Write(WarningMessages.ActionSequenceCollision2(sequenceScheduledActionRow.SourceLineNumbers)); | 228 | this.Messaging.Write(WarningMessages.ActionSequenceCollision2(sequenceScheduledActionRow.SourceLineNumbers)); |
| @@ -245,7 +234,7 @@ namespace WixToolset.Core.WindowsInstaller.Bind | |||
| 245 | } | 234 | } |
| 246 | } | 235 | } |
| 247 | 236 | ||
| 248 | absoluteActionRows.Sort((x, y) => x.Sequence.CompareTo(y.Sequence)); | 237 | absoluteActionRows.Sort((x, y) => (x.Sequence ?? 0).CompareTo(y.Sequence ?? 0)); |
| 249 | 238 | ||
| 250 | // Schedule the relatively scheduled actions (by resolving the dependency trees). | 239 | // Schedule the relatively scheduled actions (by resolving the dependency trees). |
| 251 | var previousUsedSequence = 0; | 240 | var previousUsedSequence = 0; |
| @@ -310,7 +299,7 @@ namespace WixToolset.Core.WindowsInstaller.Bind | |||
| 310 | var nextUsedSequence = Int16.MaxValue + 1; | 299 | var nextUsedSequence = Int16.MaxValue + 1; |
| 311 | if (absoluteActionRows.Count > j + 1) | 300 | if (absoluteActionRows.Count > j + 1) |
| 312 | { | 301 | { |
| 313 | nextUsedSequence = absoluteActionRows[j + 1].Sequence; | 302 | nextUsedSequence = absoluteActionRows[j + 1].Sequence ?? 0; |
| 314 | } | 303 | } |
| 315 | 304 | ||
| 316 | // Schedule the action rows after this one. | 305 | // Schedule the action rows after this one. |
| @@ -337,7 +326,7 @@ namespace WixToolset.Core.WindowsInstaller.Bind | |||
| 337 | } | 326 | } |
| 338 | 327 | ||
| 339 | // keep track of this sequence number as the previous used sequence number for the next iteration | 328 | // keep track of this sequence number as the previous used sequence number for the next iteration |
| 340 | previousUsedSequence = absoluteActionRow.Sequence; | 329 | previousUsedSequence = absoluteActionRow.Sequence ?? 0; |
| 341 | } | 330 | } |
| 342 | 331 | ||
| 343 | // add the absolutely and relatively scheduled actions to the list of scheduled actions | 332 | // add the absolutely and relatively scheduled actions to the list of scheduled actions |
| @@ -412,9 +401,6 @@ namespace WixToolset.Core.WindowsInstaller.Bind | |||
| 412 | set.Add("InstallExecuteSequence/AppSearch"); | 401 | set.Add("InstallExecuteSequence/AppSearch"); |
| 413 | set.Add("InstallUISequence/AppSearch"); | 402 | set.Add("InstallUISequence/AppSearch"); |
| 414 | break; | 403 | break; |
| 415 | case TupleDefinitionType.BindImage: | ||
| 416 | set.Add("InstallExecuteSequence/BindImage"); | ||
| 417 | break; | ||
| 418 | case TupleDefinitionType.CCPSearch: | 404 | case TupleDefinitionType.CCPSearch: |
| 419 | set.Add("InstallExecuteSequence/AppSearch"); | 405 | set.Add("InstallExecuteSequence/AppSearch"); |
| 420 | set.Add("InstallExecuteSequence/CCPSearch"); | 406 | set.Add("InstallExecuteSequence/CCPSearch"); |
| @@ -452,10 +438,32 @@ namespace WixToolset.Core.WindowsInstaller.Bind | |||
| 452 | case TupleDefinitionType.File: | 438 | case TupleDefinitionType.File: |
| 453 | set.Add("InstallExecuteSequence/InstallFiles"); | 439 | set.Add("InstallExecuteSequence/InstallFiles"); |
| 454 | set.Add("InstallExecuteSequence/RemoveFiles"); | 440 | set.Add("InstallExecuteSequence/RemoveFiles"); |
| 455 | break; | 441 | |
| 456 | case TupleDefinitionType.Font: | 442 | var foundFont = false; |
| 457 | set.Add("InstallExecuteSequence/RegisterFonts"); | 443 | var foundSelfReg = false; |
| 458 | set.Add("InstallExecuteSequence/UnregisterFonts"); | 444 | var foundBindPath = false; |
| 445 | foreach (var file in this.Section.Tuples.OfType<FileTuple>()) | ||
| 446 | { | ||
| 447 | if (!foundFont && !String.IsNullOrEmpty(file.FontTitle)) | ||
| 448 | { | ||
| 449 | set.Add("InstallExecuteSequence/RegisterFonts"); | ||
| 450 | set.Add("InstallExecuteSequence/UnregisterFonts"); | ||
| 451 | foundFont = true; | ||
| 452 | } | ||
| 453 | |||
| 454 | if (!foundSelfReg && file.SelfRegCost.HasValue) | ||
| 455 | { | ||
| 456 | set.Add("InstallExecuteSequence/SelfRegModules"); | ||
| 457 | set.Add("InstallExecuteSequence/SelfUnregModules"); | ||
| 458 | foundSelfReg = true; | ||
| 459 | } | ||
| 460 | |||
| 461 | if (!foundBindPath && !String.IsNullOrEmpty(file.BindPath)) | ||
| 462 | { | ||
| 463 | set.Add("InstallExecuteSequence/BindImage"); | ||
| 464 | foundBindPath = true; | ||
| 465 | } | ||
| 466 | } | ||
| 459 | break; | 467 | break; |
| 460 | case TupleDefinitionType.IniFile: | 468 | case TupleDefinitionType.IniFile: |
| 461 | case TupleDefinitionType.RemoveIniFile: | 469 | case TupleDefinitionType.RemoveIniFile: |
| @@ -511,10 +519,6 @@ namespace WixToolset.Core.WindowsInstaller.Bind | |||
| 511 | case TupleDefinitionType.RemoveFile: | 519 | case TupleDefinitionType.RemoveFile: |
| 512 | set.Add("InstallExecuteSequence/RemoveFiles"); | 520 | set.Add("InstallExecuteSequence/RemoveFiles"); |
| 513 | break; | 521 | break; |
| 514 | case TupleDefinitionType.SelfReg: | ||
| 515 | set.Add("InstallExecuteSequence/SelfRegModules"); | ||
| 516 | set.Add("InstallExecuteSequence/SelfUnregModules"); | ||
| 517 | break; | ||
| 518 | case TupleDefinitionType.ServiceControl: | 522 | case TupleDefinitionType.ServiceControl: |
| 519 | set.Add("InstallExecuteSequence/StartServices"); | 523 | set.Add("InstallExecuteSequence/StartServices"); |
| 520 | set.Add("InstallExecuteSequence/StopServices"); | 524 | set.Add("InstallExecuteSequence/StopServices"); |
