diff options
| author | Rob Mensching <rob@firegiant.com> | 2020-06-12 12:55:28 -0700 |
|---|---|---|
| committer | Rob Mensching <rob@firegiant.com> | 2020-06-13 09:22:27 -0700 |
| commit | c0f1332a0e18e9d506fe80c328548b001dcf93df (patch) | |
| tree | 4980dddd35350e79b00a61574feafa859e857e3f /src/WixToolset.Core.WindowsInstaller/Decompile | |
| parent | 167d26d002b1412e72d96ed2bbc0761fc0f1344b (diff) | |
| download | wix-c0f1332a0e18e9d506fe80c328548b001dcf93df.tar.gz wix-c0f1332a0e18e9d506fe80c328548b001dcf93df.tar.bz2 wix-c0f1332a0e18e9d506fe80c328548b001dcf93df.zip | |
Remove use of remaining WixXxxRows
Diffstat (limited to 'src/WixToolset.Core.WindowsInstaller/Decompile')
| -rw-r--r-- | src/WixToolset.Core.WindowsInstaller/Decompile/Decompiler.cs | 237 |
1 files changed, 113 insertions, 124 deletions
diff --git a/src/WixToolset.Core.WindowsInstaller/Decompile/Decompiler.cs b/src/WixToolset.Core.WindowsInstaller/Decompile/Decompiler.cs index 54a92f3c..34f57284 100644 --- a/src/WixToolset.Core.WindowsInstaller/Decompile/Decompiler.cs +++ b/src/WixToolset.Core.WindowsInstaller/Decompile/Decompiler.cs | |||
| @@ -262,23 +262,23 @@ namespace WixToolset.Core.WindowsInstaller | |||
| 262 | /// <summary> | 262 | /// <summary> |
| 263 | /// Creates an action element. | 263 | /// Creates an action element. |
| 264 | /// </summary> | 264 | /// </summary> |
| 265 | /// <param name="actionRow">The action row from which the element should be created.</param> | 265 | /// <param name="actionTuple">The action from which the element should be created.</param> |
| 266 | private void CreateActionElement(WixActionRow actionRow) | 266 | private void CreateActionElement(WixActionTuple actionTuple) |
| 267 | { | 267 | { |
| 268 | Wix.ISchemaElement actionElement = null; | 268 | Wix.ISchemaElement actionElement = null; |
| 269 | 269 | ||
| 270 | if (null != this.core.GetIndexedElement("CustomAction", actionRow.Action)) // custom action | 270 | if (null != this.core.GetIndexedElement("CustomAction", actionTuple.Action)) // custom action |
| 271 | { | 271 | { |
| 272 | var custom = new Wix.Custom(); | 272 | var custom = new Wix.Custom(); |
| 273 | 273 | ||
| 274 | custom.Action = actionRow.Action; | 274 | custom.Action = actionTuple.Action; |
| 275 | 275 | ||
| 276 | if (null != actionRow.Condition) | 276 | if (null != actionTuple.Condition) |
| 277 | { | 277 | { |
| 278 | custom.Content = actionRow.Condition; | 278 | custom.Content = actionTuple.Condition; |
| 279 | } | 279 | } |
| 280 | 280 | ||
| 281 | switch (actionRow.Sequence) | 281 | switch (actionTuple.Sequence) |
| 282 | { | 282 | { |
| 283 | case (-4): | 283 | case (-4): |
| 284 | custom.OnExit = Wix.ExitType.suspend; | 284 | custom.OnExit = Wix.ExitType.suspend; |
| @@ -293,35 +293,35 @@ namespace WixToolset.Core.WindowsInstaller | |||
| 293 | custom.OnExit = Wix.ExitType.success; | 293 | custom.OnExit = Wix.ExitType.success; |
| 294 | break; | 294 | break; |
| 295 | default: | 295 | default: |
| 296 | if (null != actionRow.Before) | 296 | if (null != actionTuple.Before) |
| 297 | { | 297 | { |
| 298 | custom.Before = actionRow.Before; | 298 | custom.Before = actionTuple.Before; |
| 299 | } | 299 | } |
| 300 | else if (null != actionRow.After) | 300 | else if (null != actionTuple.After) |
| 301 | { | 301 | { |
| 302 | custom.After = actionRow.After; | 302 | custom.After = actionTuple.After; |
| 303 | } | 303 | } |
| 304 | else if (0 < actionRow.Sequence) | 304 | else if (actionTuple.Sequence.HasValue) |
| 305 | { | 305 | { |
| 306 | custom.Sequence = actionRow.Sequence; | 306 | custom.Sequence = actionTuple.Sequence.Value; |
| 307 | } | 307 | } |
| 308 | break; | 308 | break; |
| 309 | } | 309 | } |
| 310 | 310 | ||
| 311 | actionElement = custom; | 311 | actionElement = custom; |
| 312 | } | 312 | } |
| 313 | else if (null != this.core.GetIndexedElement("Dialog", actionRow.Action)) // dialog | 313 | else if (null != this.core.GetIndexedElement("Dialog", actionTuple.Action)) // dialog |
| 314 | { | 314 | { |
| 315 | var show = new Wix.Show(); | 315 | var show = new Wix.Show(); |
| 316 | 316 | ||
| 317 | show.Dialog = actionRow.Action; | 317 | show.Dialog = actionTuple.Action; |
| 318 | 318 | ||
| 319 | if (null != actionRow.Condition) | 319 | if (null != actionTuple.Condition) |
| 320 | { | 320 | { |
| 321 | show.Content = actionRow.Condition; | 321 | show.Content = actionTuple.Condition; |
| 322 | } | 322 | } |
| 323 | 323 | ||
| 324 | switch (actionRow.Sequence) | 324 | switch (actionTuple.Sequence) |
| 325 | { | 325 | { |
| 326 | case (-4): | 326 | case (-4): |
| 327 | show.OnExit = Wix.ExitType.suspend; | 327 | show.OnExit = Wix.ExitType.suspend; |
| @@ -336,17 +336,17 @@ namespace WixToolset.Core.WindowsInstaller | |||
| 336 | show.OnExit = Wix.ExitType.success; | 336 | show.OnExit = Wix.ExitType.success; |
| 337 | break; | 337 | break; |
| 338 | default: | 338 | default: |
| 339 | if (null != actionRow.Before) | 339 | if (null != actionTuple.Before) |
| 340 | { | 340 | { |
| 341 | show.Before = actionRow.Before; | 341 | show.Before = actionTuple.Before; |
| 342 | } | 342 | } |
| 343 | else if (null != actionRow.After) | 343 | else if (null != actionTuple.After) |
| 344 | { | 344 | { |
| 345 | show.After = actionRow.After; | 345 | show.After = actionTuple.After; |
| 346 | } | 346 | } |
| 347 | else if (0 < actionRow.Sequence) | 347 | else if (actionTuple.Sequence.HasValue) |
| 348 | { | 348 | { |
| 349 | show.Sequence = actionRow.Sequence; | 349 | show.Sequence = actionTuple.Sequence.Value; |
| 350 | } | 350 | } |
| 351 | break; | 351 | break; |
| 352 | } | 352 | } |
| @@ -355,18 +355,18 @@ namespace WixToolset.Core.WindowsInstaller | |||
| 355 | } | 355 | } |
| 356 | else // possibly a standard action without suggested sequence information | 356 | else // possibly a standard action without suggested sequence information |
| 357 | { | 357 | { |
| 358 | actionElement = this.CreateStandardActionElement(actionRow); | 358 | actionElement = this.CreateStandardActionElement(actionTuple); |
| 359 | } | 359 | } |
| 360 | 360 | ||
| 361 | // add the action element to the appropriate sequence element | 361 | // add the action element to the appropriate sequence element |
| 362 | if (null != actionElement) | 362 | if (null != actionElement) |
| 363 | { | 363 | { |
| 364 | var sequenceTable = actionRow.SequenceTable.ToString(); | 364 | var sequenceTable = actionTuple.SequenceTable.ToString(); |
| 365 | var sequenceElement = (Wix.IParentElement)this.sequenceElements[sequenceTable]; | 365 | var sequenceElement = (Wix.IParentElement)this.sequenceElements[sequenceTable]; |
| 366 | 366 | ||
| 367 | if (null == sequenceElement) | 367 | if (null == sequenceElement) |
| 368 | { | 368 | { |
| 369 | switch (actionRow.SequenceTable) | 369 | switch (actionTuple.SequenceTable) |
| 370 | { | 370 | { |
| 371 | case SequenceTable.AdminExecuteSequence: | 371 | case SequenceTable.AdminExecuteSequence: |
| 372 | sequenceElement = new Wix.AdminExecuteSequence(); | 372 | sequenceElement = new Wix.AdminExecuteSequence(); |
| @@ -397,7 +397,7 @@ namespace WixToolset.Core.WindowsInstaller | |||
| 397 | } | 397 | } |
| 398 | catch (System.ArgumentException) // action/dialog is not valid for this sequence | 398 | catch (System.ArgumentException) // action/dialog is not valid for this sequence |
| 399 | { | 399 | { |
| 400 | this.Messaging.Write(WarningMessages.IllegalActionInSequence(actionRow.SourceLineNumbers, actionRow.SequenceTable.ToString(), actionRow.Action)); | 400 | this.Messaging.Write(WarningMessages.IllegalActionInSequence(actionTuple.SourceLineNumbers, actionTuple.SequenceTable.ToString(), actionTuple.Action)); |
| 401 | } | 401 | } |
| 402 | } | 402 | } |
| 403 | } | 403 | } |
| @@ -405,40 +405,40 @@ namespace WixToolset.Core.WindowsInstaller | |||
| 405 | /// <summary> | 405 | /// <summary> |
| 406 | /// Creates a standard action element. | 406 | /// Creates a standard action element. |
| 407 | /// </summary> | 407 | /// </summary> |
| 408 | /// <param name="actionRow">The action row from which the element should be created.</param> | 408 | /// <param name="actionTuple">The action row from which the element should be created.</param> |
| 409 | /// <returns>The created element.</returns> | 409 | /// <returns>The created element.</returns> |
| 410 | private Wix.ISchemaElement CreateStandardActionElement(WixActionRow actionRow) | 410 | private Wix.ISchemaElement CreateStandardActionElement(WixActionTuple actionTuple) |
| 411 | { | 411 | { |
| 412 | Wix.ActionSequenceType actionElement = null; | 412 | Wix.ActionSequenceType actionElement = null; |
| 413 | 413 | ||
| 414 | switch (actionRow.Action) | 414 | switch (actionTuple.Action) |
| 415 | { | 415 | { |
| 416 | case "AllocateRegistrySpace": | 416 | case "AllocateRegistrySpace": |
| 417 | actionElement = new Wix.AllocateRegistrySpace(); | 417 | actionElement = new Wix.AllocateRegistrySpace(); |
| 418 | break; | 418 | break; |
| 419 | case "AppSearch": | 419 | case "AppSearch": |
| 420 | this.StandardActions.TryGetValue(actionRow.GetPrimaryKey(), out var appSearchActionRow); | 420 | this.StandardActions.TryGetValue(actionTuple.Id.Id, out var appSearchActionRow); |
| 421 | 421 | ||
| 422 | if (null != actionRow.Before || null != actionRow.After || (null != appSearchActionRow && actionRow.Sequence != appSearchActionRow.Sequence)) | 422 | if (null != actionTuple.Before || null != actionTuple.After || (null != appSearchActionRow && actionTuple.Sequence != appSearchActionRow.Sequence)) |
| 423 | { | 423 | { |
| 424 | var appSearch = new Wix.AppSearch(); | 424 | var appSearch = new Wix.AppSearch(); |
| 425 | 425 | ||
| 426 | if (null != actionRow.Condition) | 426 | if (null != actionTuple.Condition) |
| 427 | { | 427 | { |
| 428 | appSearch.Content = actionRow.Condition; | 428 | appSearch.Content = actionTuple.Condition; |
| 429 | } | 429 | } |
| 430 | 430 | ||
| 431 | if (null != actionRow.Before) | 431 | if (null != actionTuple.Before) |
| 432 | { | 432 | { |
| 433 | appSearch.Before = actionRow.Before; | 433 | appSearch.Before = actionTuple.Before; |
| 434 | } | 434 | } |
| 435 | else if (null != actionRow.After) | 435 | else if (null != actionTuple.After) |
| 436 | { | 436 | { |
| 437 | appSearch.After = actionRow.After; | 437 | appSearch.After = actionTuple.After; |
| 438 | } | 438 | } |
| 439 | else if (0 < actionRow.Sequence) | 439 | else if (actionTuple.Sequence.HasValue) |
| 440 | { | 440 | { |
| 441 | appSearch.Sequence = actionRow.Sequence; | 441 | appSearch.Sequence = actionTuple.Sequence.Value; |
| 442 | } | 442 | } |
| 443 | 443 | ||
| 444 | return appSearch; | 444 | return appSearch; |
| @@ -449,7 +449,7 @@ namespace WixToolset.Core.WindowsInstaller | |||
| 449 | break; | 449 | break; |
| 450 | case "CCPSearch": | 450 | case "CCPSearch": |
| 451 | var ccpSearch = new Wix.CCPSearch(); | 451 | var ccpSearch = new Wix.CCPSearch(); |
| 452 | Decompiler.SequenceRelativeAction(actionRow, ccpSearch); | 452 | Decompiler.SequenceRelativeAction(actionTuple, ccpSearch); |
| 453 | return ccpSearch; | 453 | return ccpSearch; |
| 454 | case "CostFinalize": | 454 | case "CostFinalize": |
| 455 | actionElement = new Wix.CostFinalize(); | 455 | actionElement = new Wix.CostFinalize(); |
| @@ -468,7 +468,7 @@ namespace WixToolset.Core.WindowsInstaller | |||
| 468 | break; | 468 | break; |
| 469 | case "DisableRollback": | 469 | case "DisableRollback": |
| 470 | var disableRollback = new Wix.DisableRollback(); | 470 | var disableRollback = new Wix.DisableRollback(); |
| 471 | Decompiler.SequenceRelativeAction(actionRow, disableRollback); | 471 | Decompiler.SequenceRelativeAction(actionTuple, disableRollback); |
| 472 | return disableRollback; | 472 | return disableRollback; |
| 473 | case "DuplicateFiles": | 473 | case "DuplicateFiles": |
| 474 | actionElement = new Wix.DuplicateFiles(); | 474 | actionElement = new Wix.DuplicateFiles(); |
| @@ -481,22 +481,22 @@ namespace WixToolset.Core.WindowsInstaller | |||
| 481 | break; | 481 | break; |
| 482 | case "FindRelatedProducts": | 482 | case "FindRelatedProducts": |
| 483 | var findRelatedProducts = new Wix.FindRelatedProducts(); | 483 | var findRelatedProducts = new Wix.FindRelatedProducts(); |
| 484 | Decompiler.SequenceRelativeAction(actionRow, findRelatedProducts); | 484 | Decompiler.SequenceRelativeAction(actionTuple, findRelatedProducts); |
| 485 | return findRelatedProducts; | 485 | return findRelatedProducts; |
| 486 | case "ForceReboot": | 486 | case "ForceReboot": |
| 487 | var forceReboot = new Wix.ForceReboot(); | 487 | var forceReboot = new Wix.ForceReboot(); |
| 488 | Decompiler.SequenceRelativeAction(actionRow, forceReboot); | 488 | Decompiler.SequenceRelativeAction(actionTuple, forceReboot); |
| 489 | return forceReboot; | 489 | return forceReboot; |
| 490 | case "InstallAdminPackage": | 490 | case "InstallAdminPackage": |
| 491 | actionElement = new Wix.InstallAdminPackage(); | 491 | actionElement = new Wix.InstallAdminPackage(); |
| 492 | break; | 492 | break; |
| 493 | case "InstallExecute": | 493 | case "InstallExecute": |
| 494 | var installExecute = new Wix.InstallExecute(); | 494 | var installExecute = new Wix.InstallExecute(); |
| 495 | Decompiler.SequenceRelativeAction(actionRow, installExecute); | 495 | Decompiler.SequenceRelativeAction(actionTuple, installExecute); |
| 496 | return installExecute; | 496 | return installExecute; |
| 497 | case "InstallExecuteAgain": | 497 | case "InstallExecuteAgain": |
| 498 | var installExecuteAgain = new Wix.InstallExecuteAgain(); | 498 | var installExecuteAgain = new Wix.InstallExecuteAgain(); |
| 499 | Decompiler.SequenceRelativeAction(actionRow, installExecuteAgain); | 499 | Decompiler.SequenceRelativeAction(actionTuple, installExecuteAgain); |
| 500 | return installExecuteAgain; | 500 | return installExecuteAgain; |
| 501 | case "InstallFiles": | 501 | case "InstallFiles": |
| 502 | actionElement = new Wix.InstallFiles(); | 502 | actionElement = new Wix.InstallFiles(); |
| @@ -521,7 +521,7 @@ namespace WixToolset.Core.WindowsInstaller | |||
| 521 | break; | 521 | break; |
| 522 | case "LaunchConditions": | 522 | case "LaunchConditions": |
| 523 | var launchConditions = new Wix.LaunchConditions(); | 523 | var launchConditions = new Wix.LaunchConditions(); |
| 524 | Decompiler.SequenceRelativeAction(actionRow, launchConditions); | 524 | Decompiler.SequenceRelativeAction(actionTuple, launchConditions); |
| 525 | return launchConditions; | 525 | return launchConditions; |
| 526 | case "MigrateFeatureStates": | 526 | case "MigrateFeatureStates": |
| 527 | actionElement = new Wix.MigrateFeatureStates(); | 527 | actionElement = new Wix.MigrateFeatureStates(); |
| @@ -585,7 +585,7 @@ namespace WixToolset.Core.WindowsInstaller | |||
| 585 | break; | 585 | break; |
| 586 | case "RemoveExistingProducts": | 586 | case "RemoveExistingProducts": |
| 587 | var removeExistingProducts = new Wix.RemoveExistingProducts(); | 587 | var removeExistingProducts = new Wix.RemoveExistingProducts(); |
| 588 | Decompiler.SequenceRelativeAction(actionRow, removeExistingProducts); | 588 | Decompiler.SequenceRelativeAction(actionTuple, removeExistingProducts); |
| 589 | return removeExistingProducts; | 589 | return removeExistingProducts; |
| 590 | case "RemoveFiles": | 590 | case "RemoveFiles": |
| 591 | actionElement = new Wix.RemoveFiles(); | 591 | actionElement = new Wix.RemoveFiles(); |
| @@ -607,15 +607,15 @@ namespace WixToolset.Core.WindowsInstaller | |||
| 607 | break; | 607 | break; |
| 608 | case "ResolveSource": | 608 | case "ResolveSource": |
| 609 | var resolveSource = new Wix.ResolveSource(); | 609 | var resolveSource = new Wix.ResolveSource(); |
| 610 | Decompiler.SequenceRelativeAction(actionRow, resolveSource); | 610 | Decompiler.SequenceRelativeAction(actionTuple, resolveSource); |
| 611 | return resolveSource; | 611 | return resolveSource; |
| 612 | case "RMCCPSearch": | 612 | case "RMCCPSearch": |
| 613 | var rmccpSearch = new Wix.RMCCPSearch(); | 613 | var rmccpSearch = new Wix.RMCCPSearch(); |
| 614 | Decompiler.SequenceRelativeAction(actionRow, rmccpSearch); | 614 | Decompiler.SequenceRelativeAction(actionTuple, rmccpSearch); |
| 615 | return rmccpSearch; | 615 | return rmccpSearch; |
| 616 | case "ScheduleReboot": | 616 | case "ScheduleReboot": |
| 617 | var scheduleReboot = new Wix.ScheduleReboot(); | 617 | var scheduleReboot = new Wix.ScheduleReboot(); |
| 618 | Decompiler.SequenceRelativeAction(actionRow, scheduleReboot); | 618 | Decompiler.SequenceRelativeAction(actionTuple, scheduleReboot); |
| 619 | return scheduleReboot; | 619 | return scheduleReboot; |
| 620 | case "SelfRegModules": | 620 | case "SelfRegModules": |
| 621 | actionElement = new Wix.SelfRegModules(); | 621 | actionElement = new Wix.SelfRegModules(); |
| @@ -672,13 +672,13 @@ namespace WixToolset.Core.WindowsInstaller | |||
| 672 | actionElement = new Wix.WriteRegistryValues(); | 672 | actionElement = new Wix.WriteRegistryValues(); |
| 673 | break; | 673 | break; |
| 674 | default: | 674 | default: |
| 675 | this.Messaging.Write(WarningMessages.UnknownAction(actionRow.SourceLineNumbers, actionRow.SequenceTable.ToString(), actionRow.Action)); | 675 | this.Messaging.Write(WarningMessages.UnknownAction(actionTuple.SourceLineNumbers, actionTuple.SequenceTable.ToString(), actionTuple.Action)); |
| 676 | return null; | 676 | return null; |
| 677 | } | 677 | } |
| 678 | 678 | ||
| 679 | if (actionElement != null) | 679 | if (actionElement != null) |
| 680 | { | 680 | { |
| 681 | this.SequenceStandardAction(actionRow, actionElement); | 681 | this.SequenceStandardAction(actionTuple, actionElement); |
| 682 | } | 682 | } |
| 683 | 683 | ||
| 684 | return actionElement; | 684 | return actionElement; |
| @@ -687,48 +687,48 @@ namespace WixToolset.Core.WindowsInstaller | |||
| 687 | /// <summary> | 687 | /// <summary> |
| 688 | /// Applies the condition and sequence to a standard action element based on the action row data. | 688 | /// Applies the condition and sequence to a standard action element based on the action row data. |
| 689 | /// </summary> | 689 | /// </summary> |
| 690 | /// <param name="actionRow">Action row data from the database.</param> | 690 | /// <param name="actionTuple">Action data from the database.</param> |
| 691 | /// <param name="actionElement">Element to be sequenced.</param> | 691 | /// <param name="actionElement">Element to be sequenced.</param> |
| 692 | private void SequenceStandardAction(WixActionRow actionRow, Wix.ActionSequenceType actionElement) | 692 | private void SequenceStandardAction(WixActionTuple actionTuple, Wix.ActionSequenceType actionElement) |
| 693 | { | 693 | { |
| 694 | if (null != actionRow.Condition) | 694 | if (null != actionTuple.Condition) |
| 695 | { | 695 | { |
| 696 | actionElement.Content = actionRow.Condition; | 696 | actionElement.Content = actionTuple.Condition; |
| 697 | } | 697 | } |
| 698 | 698 | ||
| 699 | if ((null != actionRow.Before || null != actionRow.After) && 0 == actionRow.Sequence) | 699 | if ((null != actionTuple.Before || null != actionTuple.After) && 0 == actionTuple.Sequence) |
| 700 | { | 700 | { |
| 701 | this.Messaging.Write(WarningMessages.DecompiledStandardActionRelativelyScheduledInModule(actionRow.SourceLineNumbers, actionRow.SequenceTable.ToString(), actionRow.Action)); | 701 | this.Messaging.Write(WarningMessages.DecompiledStandardActionRelativelyScheduledInModule(actionTuple.SourceLineNumbers, actionTuple.SequenceTable.ToString(), actionTuple.Action)); |
| 702 | } | 702 | } |
| 703 | else if (0 < actionRow.Sequence) | 703 | else if (actionTuple.Sequence.HasValue) |
| 704 | { | 704 | { |
| 705 | actionElement.Sequence = actionRow.Sequence; | 705 | actionElement.Sequence = actionTuple.Sequence.Value; |
| 706 | } | 706 | } |
| 707 | } | 707 | } |
| 708 | 708 | ||
| 709 | /// <summary> | 709 | /// <summary> |
| 710 | /// Applies the condition and relative sequence to an action element based on the action row data. | 710 | /// Applies the condition and relative sequence to an action element based on the action row data. |
| 711 | /// </summary> | 711 | /// </summary> |
| 712 | /// <param name="actionRow">Action row data from the database.</param> | 712 | /// <param name="actionTuple">Action data from the database.</param> |
| 713 | /// <param name="actionElement">Element to be sequenced.</param> | 713 | /// <param name="actionElement">Element to be sequenced.</param> |
| 714 | private static void SequenceRelativeAction(WixActionRow actionRow, Wix.ActionModuleSequenceType actionElement) | 714 | private static void SequenceRelativeAction(WixActionTuple actionTuple, Wix.ActionModuleSequenceType actionElement) |
| 715 | { | 715 | { |
| 716 | if (null != actionRow.Condition) | 716 | if (null != actionTuple.Condition) |
| 717 | { | 717 | { |
| 718 | actionElement.Content = actionRow.Condition; | 718 | actionElement.Content = actionTuple.Condition; |
| 719 | } | 719 | } |
| 720 | 720 | ||
| 721 | if (null != actionRow.Before) | 721 | if (null != actionTuple.Before) |
| 722 | { | 722 | { |
| 723 | actionElement.Before = actionRow.Before; | 723 | actionElement.Before = actionTuple.Before; |
| 724 | } | 724 | } |
| 725 | else if (null != actionRow.After) | 725 | else if (null != actionTuple.After) |
| 726 | { | 726 | { |
| 727 | actionElement.After = actionRow.After; | 727 | actionElement.After = actionTuple.After; |
| 728 | } | 728 | } |
| 729 | else if (0 < actionRow.Sequence) | 729 | else if (actionTuple.Sequence.HasValue) |
| 730 | { | 730 | { |
| 731 | actionElement.Sequence = actionRow.Sequence; | 731 | actionElement.Sequence = actionTuple.Sequence.Value; |
| 732 | } | 732 | } |
| 733 | } | 733 | } |
| 734 | 734 | ||
| @@ -2495,7 +2495,7 @@ namespace WixToolset.Core.WindowsInstaller | |||
| 2495 | { | 2495 | { |
| 2496 | foreach (SequenceTable sequenceTable in Enum.GetValues(typeof(SequenceTable))) | 2496 | foreach (SequenceTable sequenceTable in Enum.GetValues(typeof(SequenceTable))) |
| 2497 | { | 2497 | { |
| 2498 | var sequenceTableName = GetSequenceTableName(sequenceTable); | 2498 | var sequenceTableName = sequenceTable.WindowsInstallerTableName(); |
| 2499 | 2499 | ||
| 2500 | // if suppressing UI elements, skip UI-related sequence tables | 2500 | // if suppressing UI elements, skip UI-related sequence tables |
| 2501 | if (this.SuppressUI && ("AdminUISequence" == sequenceTableName || "InstallUISequence" == sequenceTableName)) | 2501 | if (this.SuppressUI && ("AdminUISequence" == sequenceTableName || "InstallUISequence" == sequenceTableName)) |
| @@ -2503,57 +2503,57 @@ namespace WixToolset.Core.WindowsInstaller | |||
| 2503 | continue; | 2503 | continue; |
| 2504 | } | 2504 | } |
| 2505 | 2505 | ||
| 2506 | var actionsTable = new Table(this.tableDefinitions["WixAction"]); | ||
| 2507 | var table = tables[sequenceTableName]; | 2506 | var table = tables[sequenceTableName]; |
| 2508 | 2507 | ||
| 2509 | if (null != table) | 2508 | if (null != table) |
| 2510 | { | 2509 | { |
| 2511 | var actionRows = new List<WixActionRow>(); | 2510 | var actionTuples = new List<WixActionTuple>(); |
| 2512 | var needAbsoluteScheduling = this.SuppressRelativeActionSequencing; | 2511 | var needAbsoluteScheduling = this.SuppressRelativeActionSequencing; |
| 2513 | var nonSequencedActionRows = new Dictionary<string, WixActionRow>(); | 2512 | var nonSequencedActionRows = new Dictionary<string, WixActionTuple>(); |
| 2514 | var suppressedRelativeActionRows = new Dictionary<string, WixActionRow>(); | 2513 | var suppressedRelativeActionRows = new Dictionary<string, WixActionTuple>(); |
| 2515 | 2514 | ||
| 2516 | // create a sorted array of actions in this table | 2515 | // create a sorted array of actions in this table |
| 2517 | foreach (var row in table.Rows) | 2516 | foreach (var row in table.Rows) |
| 2518 | { | 2517 | { |
| 2519 | var actionRow = (WixActionRow)actionsTable.CreateRow(null); | 2518 | var action = row.FieldAsString(0); |
| 2519 | var actionTuple = new WixActionTuple(null, new Identifier(AccessModifier.Public, sequenceTable, action)); | ||
| 2520 | 2520 | ||
| 2521 | actionRow.Action = Convert.ToString(row[0]); | 2521 | actionTuple.Action = action; |
| 2522 | 2522 | ||
| 2523 | if (null != row[1]) | 2523 | if (null != row[1]) |
| 2524 | { | 2524 | { |
| 2525 | actionRow.Condition = Convert.ToString(row[1]); | 2525 | actionTuple.Condition = Convert.ToString(row[1]); |
| 2526 | } | 2526 | } |
| 2527 | 2527 | ||
| 2528 | actionRow.Sequence = Convert.ToInt32(row[2]); | 2528 | actionTuple.Sequence = Convert.ToInt32(row[2]); |
| 2529 | 2529 | ||
| 2530 | actionRow.SequenceTable = sequenceTable; | 2530 | actionTuple.SequenceTable = sequenceTable; |
| 2531 | 2531 | ||
| 2532 | actionRows.Add(actionRow); | 2532 | actionTuples.Add(actionTuple); |
| 2533 | } | 2533 | } |
| 2534 | actionRows.Sort(); | 2534 | actionTuples = actionTuples.OrderBy(t => t.Sequence).ToList(); |
| 2535 | 2535 | ||
| 2536 | for (var i = 0; i < actionRows.Count && !needAbsoluteScheduling; i++) | 2536 | for (var i = 0; i < actionTuples.Count && !needAbsoluteScheduling; i++) |
| 2537 | { | 2537 | { |
| 2538 | var actionRow = actionRows[i]; | 2538 | var actionTuple = actionTuples[i]; |
| 2539 | this.StandardActions.TryGetValue(actionRow.GetPrimaryKey(), out var standardActionRow); | 2539 | this.StandardActions.TryGetValue(actionTuple.Id.Id, out var standardActionRow); |
| 2540 | 2540 | ||
| 2541 | // create actions for custom actions, dialogs, AppSearch when its moved, and standard actions with non-standard conditions | 2541 | // create actions for custom actions, dialogs, AppSearch when its moved, and standard actions with non-standard conditions |
| 2542 | if ("AppSearch" == actionRow.Action || null == standardActionRow || actionRow.Condition != standardActionRow.Condition) | 2542 | if ("AppSearch" == actionTuple.Action || null == standardActionRow || actionTuple.Condition != standardActionRow.Condition) |
| 2543 | { | 2543 | { |
| 2544 | WixActionRow previousActionRow = null; | 2544 | WixActionTuple previousActionTuple = null; |
| 2545 | WixActionRow nextActionRow = null; | 2545 | WixActionTuple nextActionTuple = null; |
| 2546 | 2546 | ||
| 2547 | // find the previous action row if there is one | 2547 | // find the previous action row if there is one |
| 2548 | if (0 <= i - 1) | 2548 | if (0 <= i - 1) |
| 2549 | { | 2549 | { |
| 2550 | previousActionRow = actionRows[i - 1]; | 2550 | previousActionTuple = actionTuples[i - 1]; |
| 2551 | } | 2551 | } |
| 2552 | 2552 | ||
| 2553 | // find the next action row if there is one | 2553 | // find the next action row if there is one |
| 2554 | if (actionRows.Count > i + 1) | 2554 | if (actionTuples.Count > i + 1) |
| 2555 | { | 2555 | { |
| 2556 | nextActionRow = actionRows[i + 1]; | 2556 | nextActionTuple = actionTuples[i + 1]; |
| 2557 | } | 2557 | } |
| 2558 | 2558 | ||
| 2559 | // the logic for setting the before or after attribute for an action: | 2559 | // the logic for setting the before or after attribute for an action: |
| @@ -2565,49 +2565,49 @@ namespace WixToolset.Core.WindowsInstaller | |||
| 2565 | // 6. If this action is AppSearch and has all standard information, ignore it. | 2565 | // 6. If this action is AppSearch and has all standard information, ignore it. |
| 2566 | // 7. If this action is standard and has a non-standard condition, create the action without any scheduling information. | 2566 | // 7. If this action is standard and has a non-standard condition, create the action without any scheduling information. |
| 2567 | // 8. Everything must be absolutely sequenced. | 2567 | // 8. Everything must be absolutely sequenced. |
| 2568 | if ((null != previousActionRow && actionRow.Sequence == previousActionRow.Sequence) || (null != nextActionRow && actionRow.Sequence == nextActionRow.Sequence)) | 2568 | if ((null != previousActionTuple && actionTuple.Sequence == previousActionTuple.Sequence) || (null != nextActionTuple && actionTuple.Sequence == nextActionTuple.Sequence)) |
| 2569 | { | 2569 | { |
| 2570 | needAbsoluteScheduling = true; | 2570 | needAbsoluteScheduling = true; |
| 2571 | } | 2571 | } |
| 2572 | else if (null != nextActionRow && this.StandardActions.ContainsKey(nextActionRow.GetPrimaryKey()) && actionRow.Sequence + 1 == nextActionRow.Sequence) | 2572 | else if (null != nextActionTuple && this.StandardActions.ContainsKey(nextActionTuple.Id.Id) && actionTuple.Sequence + 1 == nextActionTuple.Sequence) |
| 2573 | { | 2573 | { |
| 2574 | actionRow.Before = nextActionRow.Action; | 2574 | actionTuple.Before = nextActionTuple.Action; |
| 2575 | } | 2575 | } |
| 2576 | else if (null != previousActionRow && this.StandardActions.ContainsKey(previousActionRow.GetPrimaryKey()) && actionRow.Sequence - 1 == previousActionRow.Sequence) | 2576 | else if (null != previousActionTuple && this.StandardActions.ContainsKey(previousActionTuple.Id.Id) && actionTuple.Sequence - 1 == previousActionTuple.Sequence) |
| 2577 | { | 2577 | { |
| 2578 | actionRow.After = previousActionRow.Action; | 2578 | actionTuple.After = previousActionTuple.Action; |
| 2579 | } | 2579 | } |
| 2580 | else if (null == standardActionRow && null != previousActionRow && actionRow.Sequence - 1 == previousActionRow.Sequence && previousActionRow.Before != actionRow.Action) | 2580 | else if (null == standardActionRow && null != previousActionTuple && actionTuple.Sequence - 1 == previousActionTuple.Sequence && previousActionTuple.Before != actionTuple.Action) |
| 2581 | { | 2581 | { |
| 2582 | actionRow.After = previousActionRow.Action; | 2582 | actionTuple.After = previousActionTuple.Action; |
| 2583 | } | 2583 | } |
| 2584 | else if (null == standardActionRow && null != previousActionRow && actionRow.Sequence != previousActionRow.Sequence && null != nextActionRow && actionRow.Sequence + 1 == nextActionRow.Sequence) | 2584 | else if (null == standardActionRow && null != previousActionTuple && actionTuple.Sequence != previousActionTuple.Sequence && null != nextActionTuple && actionTuple.Sequence + 1 == nextActionTuple.Sequence) |
| 2585 | { | 2585 | { |
| 2586 | actionRow.Before = nextActionRow.Action; | 2586 | actionTuple.Before = nextActionTuple.Action; |
| 2587 | } | 2587 | } |
| 2588 | else if ("AppSearch" == actionRow.Action && null != standardActionRow && actionRow.Sequence == standardActionRow.Sequence && actionRow.Condition == standardActionRow.Condition) | 2588 | else if ("AppSearch" == actionTuple.Action && null != standardActionRow && actionTuple.Sequence == standardActionRow.Sequence && actionTuple.Condition == standardActionRow.Condition) |
| 2589 | { | 2589 | { |
| 2590 | // ignore an AppSearch row which has the WiX standard sequence and a standard condition | 2590 | // ignore an AppSearch row which has the WiX standard sequence and a standard condition |
| 2591 | } | 2591 | } |
| 2592 | else if (null != standardActionRow && actionRow.Condition != standardActionRow.Condition) // standard actions get their standard sequence numbers | 2592 | else if (null != standardActionRow && actionTuple.Condition != standardActionRow.Condition) // standard actions get their standard sequence numbers |
| 2593 | { | 2593 | { |
| 2594 | nonSequencedActionRows.Add(actionRow.GetPrimaryKey(), actionRow); | 2594 | nonSequencedActionRows.Add(actionTuple.Id.Id, actionTuple); |
| 2595 | } | 2595 | } |
| 2596 | else if (0 < actionRow.Sequence) | 2596 | else if (0 < actionTuple.Sequence) |
| 2597 | { | 2597 | { |
| 2598 | needAbsoluteScheduling = true; | 2598 | needAbsoluteScheduling = true; |
| 2599 | } | 2599 | } |
| 2600 | } | 2600 | } |
| 2601 | else | 2601 | else |
| 2602 | { | 2602 | { |
| 2603 | suppressedRelativeActionRows.Add(actionRow.GetPrimaryKey(), actionRow); | 2603 | suppressedRelativeActionRows.Add(actionTuple.Id.Id, actionTuple); |
| 2604 | } | 2604 | } |
| 2605 | } | 2605 | } |
| 2606 | 2606 | ||
| 2607 | // create the actions now that we know if they must be absolutely or relatively scheduled | 2607 | // create the actions now that we know if they must be absolutely or relatively scheduled |
| 2608 | foreach (var actionRow in actionRows) | 2608 | foreach (var actionRow in actionTuples) |
| 2609 | { | 2609 | { |
| 2610 | var key = actionRow.GetPrimaryKey(); | 2610 | var key = actionRow.Id.Id; |
| 2611 | 2611 | ||
| 2612 | if (needAbsoluteScheduling) | 2612 | if (needAbsoluteScheduling) |
| 2613 | { | 2613 | { |
| @@ -2636,7 +2636,7 @@ namespace WixToolset.Core.WindowsInstaller | |||
| 2636 | { | 2636 | { |
| 2637 | foreach (SequenceTable sequenceTable in Enum.GetValues(typeof(SequenceTable))) | 2637 | foreach (SequenceTable sequenceTable in Enum.GetValues(typeof(SequenceTable))) |
| 2638 | { | 2638 | { |
| 2639 | var sequenceTableName = GetSequenceTableName(sequenceTable); | 2639 | var sequenceTableName = sequenceTable.WindowsInstallerTableName(); |
| 2640 | 2640 | ||
| 2641 | // if suppressing UI elements, skip UI-related sequence tables | 2641 | // if suppressing UI elements, skip UI-related sequence tables |
| 2642 | if (this.SuppressUI && ("AdminUISequence" == sequenceTableName || "InstallUISequence" == sequenceTableName)) | 2642 | if (this.SuppressUI && ("AdminUISequence" == sequenceTableName || "InstallUISequence" == sequenceTableName)) |
| @@ -2651,9 +2651,9 @@ namespace WixToolset.Core.WindowsInstaller | |||
| 2651 | { | 2651 | { |
| 2652 | foreach (var row in table.Rows) | 2652 | foreach (var row in table.Rows) |
| 2653 | { | 2653 | { |
| 2654 | var actionRow = (WixActionRow)actionsTable.CreateRow(null); | 2654 | var actionRow = new WixActionTuple(null, new Identifier(AccessModifier.Public, sequenceTable, row.FieldAsString(0))); |
| 2655 | 2655 | ||
| 2656 | actionRow.Action = Convert.ToString(row[0]); | 2656 | actionRow.Action = row.FieldAsString(0); |
| 2657 | 2657 | ||
| 2658 | if (null != row[1]) | 2658 | if (null != row[1]) |
| 2659 | { | 2659 | { |
| @@ -2684,7 +2684,7 @@ namespace WixToolset.Core.WindowsInstaller | |||
| 2684 | actionRow.SequenceTable = sequenceTable; | 2684 | actionRow.SequenceTable = sequenceTable; |
| 2685 | 2685 | ||
| 2686 | // create action elements for non-standard actions | 2686 | // create action elements for non-standard actions |
| 2687 | if (!this.StandardActions.ContainsKey(actionRow.GetPrimaryKey()) || null != actionRow.After || null != actionRow.Before) | 2687 | if (!this.StandardActions.ContainsKey(actionRow.Id.Id) || null != actionRow.After || null != actionRow.Before) |
| 2688 | { | 2688 | { |
| 2689 | this.CreateActionElement(actionRow); | 2689 | this.CreateActionElement(actionRow); |
| 2690 | } | 2690 | } |
| @@ -2844,17 +2844,6 @@ namespace WixToolset.Core.WindowsInstaller | |||
| 2844 | } | 2844 | } |
| 2845 | } | 2845 | } |
| 2846 | 2846 | ||
| 2847 | private static string GetSequenceTableName(SequenceTable sequenceTable) | ||
| 2848 | { | ||
| 2849 | switch (sequenceTable) | ||
| 2850 | { | ||
| 2851 | case SequenceTable.AdvertiseExecuteSequence: | ||
| 2852 | return "AdvtExecuteSequence"; | ||
| 2853 | default: | ||
| 2854 | return sequenceTable.ToString(); | ||
| 2855 | } | ||
| 2856 | } | ||
| 2857 | |||
| 2858 | /// <summary> | 2847 | /// <summary> |
| 2859 | /// Get the path to a file in the source image. | 2848 | /// Get the path to a file in the source image. |
| 2860 | /// </summary> | 2849 | /// </summary> |
