aboutsummaryrefslogtreecommitdiff
path: root/src/WixToolset.Core.WindowsInstaller/Bind/SequenceActionsCommand.cs
diff options
context:
space:
mode:
authorRob Mensching <rob@firegiant.com>2019-05-22 00:58:13 -0700
committerRob Mensching <rob@firegiant.com>2019-05-23 16:02:37 -0700
commitd0462be8000f18aa7dc0791d02142f000bb19fbf (patch)
tree072aabc2bd9b8f171e17654473f85c44a8a42a66 /src/WixToolset.Core.WindowsInstaller/Bind/SequenceActionsCommand.cs
parent1ed894bc0f39397ec7f7f6344370fc2123420c43 (diff)
downloadwix-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.cs60
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");