diff options
Diffstat (limited to 'src/ext/Util/wixext/UtilDecompiler.cs')
-rw-r--r-- | src/ext/Util/wixext/UtilDecompiler.cs | 58 |
1 files changed, 50 insertions, 8 deletions
diff --git a/src/ext/Util/wixext/UtilDecompiler.cs b/src/ext/Util/wixext/UtilDecompiler.cs index 1201fdd5..0a78201e 100644 --- a/src/ext/Util/wixext/UtilDecompiler.cs +++ b/src/ext/Util/wixext/UtilDecompiler.cs | |||
@@ -3,16 +3,15 @@ | |||
3 | namespace WixToolset.Util | 3 | namespace WixToolset.Util |
4 | { | 4 | { |
5 | using System; | 5 | using System; |
6 | using System.Collections; | ||
7 | using System.Collections.Generic; | ||
6 | using System.IO; | 8 | using System.IO; |
9 | using System.Linq; | ||
7 | using System.Text; | 10 | using System.Text; |
8 | using System.Collections; | 11 | using System.Xml.Linq; |
9 | using System.Diagnostics; | ||
10 | |||
11 | using WixToolset.Data; | 12 | using WixToolset.Data; |
12 | using WixToolset.Extensibility; | ||
13 | using WixToolset.Data.WindowsInstaller; | 13 | using WixToolset.Data.WindowsInstaller; |
14 | using System.Collections.Generic; | 14 | using WixToolset.Extensibility; |
15 | using System.Xml.Linq; | ||
16 | using WixToolset.Util.Symbols; | 15 | using WixToolset.Util.Symbols; |
17 | 16 | ||
18 | /// <summary> | 17 | /// <summary> |
@@ -22,16 +21,47 @@ namespace WixToolset.Util | |||
22 | { | 21 | { |
23 | public override IReadOnlyCollection<TableDefinition> TableDefinitions => UtilTableDefinitions.All; | 22 | public override IReadOnlyCollection<TableDefinition> TableDefinitions => UtilTableDefinitions.All; |
24 | 23 | ||
24 | private static readonly Dictionary<string, XName> CustomActionMapping = new Dictionary<string, XName>() | ||
25 | { | ||
26 | { "Wix4BroadcastEnvironmentChange_X86", UtilConstants.BroadcastEnvironmentChange }, | ||
27 | { "Wix4BroadcastEnvironmentChange_X64", UtilConstants.BroadcastEnvironmentChange }, | ||
28 | { "Wix4BroadcastEnvironmentChange_ARM64", UtilConstants.BroadcastEnvironmentChange }, | ||
29 | { "Wix4BroadcastSettingChange_X86", UtilConstants.BroadcastSettingChange }, | ||
30 | { "Wix4BroadcastSettingChange_X64", UtilConstants.BroadcastSettingChange }, | ||
31 | { "Wix4BroadcastSettingChange_ARM64", UtilConstants.BroadcastSettingChange }, | ||
32 | { "Wix4CheckRebootRequired_X86", UtilConstants.CheckRebootRequired }, | ||
33 | { "Wix4CheckRebootRequired_X64", UtilConstants.CheckRebootRequired }, | ||
34 | { "Wix4CheckRebootRequired_ARM64", UtilConstants.CheckRebootRequired }, | ||
35 | { "Wix4QueryNativeMachine_X86", UtilConstants.QueryNativeMachine }, | ||
36 | { "Wix4QueryNativeMachine_X64", UtilConstants.QueryNativeMachine }, | ||
37 | { "Wix4QueryNativeMachine_ARM64", UtilConstants.QueryNativeMachine }, | ||
38 | { "Wix4QueryOsDriverInfo_X86", UtilConstants.QueryWindowsDriverInfo }, | ||
39 | { "Wix4QueryOsDriverInfo_X64", UtilConstants.QueryWindowsDriverInfo }, | ||
40 | { "Wix4QueryOsDriverInfo_ARM64", UtilConstants.QueryWindowsDriverInfo }, | ||
41 | { "Wix4QueryOsInfo_X86", UtilConstants.QueryWindowsSuiteInfo }, | ||
42 | { "Wix4QueryOsInfo_X64", UtilConstants.QueryWindowsSuiteInfo }, | ||
43 | { "Wix4QueryOsInfo_ARM64", UtilConstants.QueryWindowsSuiteInfo }, | ||
44 | }; | ||
45 | |||
46 | private IReadOnlyCollection<string> customActionNames; | ||
47 | |||
25 | /// <summary> | 48 | /// <summary> |
26 | /// Called at the beginning of the decompilation of a database. | 49 | /// Called at the beginning of the decompilation of a database. |
27 | /// </summary> | 50 | /// </summary> |
28 | /// <param name="tables">The collection of all tables.</param> | 51 | /// <param name="tables">The collection of all tables.</param> |
29 | public override void PreDecompileTables(TableIndexedCollection tables) | 52 | public override void PreDecompileTables(TableIndexedCollection tables) |
30 | { | 53 | { |
54 | this.RememberCustomActionNames(tables); | ||
31 | this.CleanupSecureCustomProperties(tables); | 55 | this.CleanupSecureCustomProperties(tables); |
32 | this.CleanupInternetShortcutRemoveFileTables(tables); | 56 | this.CleanupInternetShortcutRemoveFileTables(tables); |
33 | } | 57 | } |
34 | 58 | ||
59 | private void RememberCustomActionNames(TableIndexedCollection tables) | ||
60 | { | ||
61 | var customActionTable = tables["CustomAction"]; | ||
62 | this.customActionNames = customActionTable?.Rows.Select(r => r.GetPrimaryKey()).Distinct().ToList() ?? (IReadOnlyCollection<string>)Array.Empty<string>(); | ||
63 | } | ||
64 | |||
35 | /// <summary> | 65 | /// <summary> |
36 | /// Decompile the SecureCustomProperties field to PropertyRefs for known extension properties. | 66 | /// Decompile the SecureCustomProperties field to PropertyRefs for known extension properties. |
37 | /// </summary> | 67 | /// </summary> |
@@ -195,6 +225,7 @@ namespace WixToolset.Util | |||
195 | /// <param name="tables">The collection of all tables.</param> | 225 | /// <param name="tables">The collection of all tables.</param> |
196 | public override void PostDecompileTables(TableIndexedCollection tables) | 226 | public override void PostDecompileTables(TableIndexedCollection tables) |
197 | { | 227 | { |
228 | this.FinalizeCustomActions(); | ||
198 | this.FinalizePerfmonTable(tables); | 229 | this.FinalizePerfmonTable(tables); |
199 | this.FinalizePerfmonManifestTable(tables); | 230 | this.FinalizePerfmonManifestTable(tables); |
200 | this.FinalizeSecureObjectsTable(tables); | 231 | this.FinalizeSecureObjectsTable(tables); |
@@ -223,7 +254,7 @@ namespace WixToolset.Util | |||
223 | AttributeIfNotNull("RebootPrompt", 0x2 == (attribute & 0x2)), | 254 | AttributeIfNotNull("RebootPrompt", 0x2 == (attribute & 0x2)), |
224 | AttributeIfNotNull("ElevatedCloseMessage", 0x4 == (attribute & 0x4)), | 255 | AttributeIfNotNull("ElevatedCloseMessage", 0x4 == (attribute & 0x4)), |
225 | NumericAttributeIfNotNull("Sequence", row, 5), | 256 | NumericAttributeIfNotNull("Sequence", row, 5), |
226 | NumericAttributeIfNotNull("Property", row, 6) | 257 | AttributeIfNotNull("Property", row, 6) |
227 | ); | 258 | ); |
228 | } | 259 | } |
229 | } | 260 | } |
@@ -379,7 +410,7 @@ namespace WixToolset.Util | |||
379 | if (this.DecompilerHelper.TryGetIndexedElement("Wix4FileShare", row.FieldAsString(0), out var fileShare) || | 410 | if (this.DecompilerHelper.TryGetIndexedElement("Wix4FileShare", row.FieldAsString(0), out var fileShare) || |
380 | this.DecompilerHelper.TryGetIndexedElement("FileShare", row.FieldAsString(0), out fileShare)) | 411 | this.DecompilerHelper.TryGetIndexedElement("FileShare", row.FieldAsString(0), out fileShare)) |
381 | { | 412 | { |
382 | fileShare.Add(fileSharePermission); | 413 | fileShare.Add(fileSharePermission); |
383 | } | 414 | } |
384 | else | 415 | else |
385 | { | 416 | { |
@@ -695,6 +726,17 @@ namespace WixToolset.Util | |||
695 | } | 726 | } |
696 | } | 727 | } |
697 | 728 | ||
729 | private void FinalizeCustomActions() | ||
730 | { | ||
731 | foreach (var customActionName in this.customActionNames) | ||
732 | { | ||
733 | if (CustomActionMapping.TryGetValue(customActionName, out var elementName)) | ||
734 | { | ||
735 | this.DecompilerHelper.AddElementToRoot(elementName); | ||
736 | } | ||
737 | } | ||
738 | } | ||
739 | |||
698 | /// <summary> | 740 | /// <summary> |
699 | /// Finalize the Perfmon table. | 741 | /// Finalize the Perfmon table. |
700 | /// </summary> | 742 | /// </summary> |