diff options
author | Rob Mensching <rob@firegiant.com> | 2022-03-30 10:35:02 -0700 |
---|---|---|
committer | Rob Mensching <rob@firegiant.com> | 2022-03-30 14:12:12 -0700 |
commit | 5d08e0a4bbf4e4ba28300b8bace1089b64b198d7 (patch) | |
tree | 1cf7d1f79d45cc3acc32f19cabb1efedd7a4a3dc /src/ext/Util/wixext/UtilCompiler.cs | |
parent | c86a2148f6dd7bfcd6637b6e1c9e7b5a9b53a996 (diff) | |
download | wix-5d08e0a4bbf4e4ba28300b8bace1089b64b198d7.tar.gz wix-5d08e0a4bbf4e4ba28300b8bace1089b64b198d7.tar.bz2 wix-5d08e0a4bbf4e4ba28300b8bace1089b64b198d7.zip |
Implement IWindowsInstallerDecompileExtensions
Update Util extension to validate extension model and fix some small
issues in MSI decompiling.
Fixes 6367
Diffstat (limited to 'src/ext/Util/wixext/UtilCompiler.cs')
-rw-r--r-- | src/ext/Util/wixext/UtilCompiler.cs | 36 |
1 files changed, 11 insertions, 25 deletions
diff --git a/src/ext/Util/wixext/UtilCompiler.cs b/src/ext/Util/wixext/UtilCompiler.cs index 45079150..09a90928 100644 --- a/src/ext/Util/wixext/UtilCompiler.cs +++ b/src/ext/Util/wixext/UtilCompiler.cs | |||
@@ -19,7 +19,7 @@ namespace WixToolset.Util | |||
19 | /// <summary> | 19 | /// <summary> |
20 | /// The compiler for the WiX Toolset Utility Extension. | 20 | /// The compiler for the WiX Toolset Utility Extension. |
21 | /// </summary> | 21 | /// </summary> |
22 | public sealed class UtilCompiler : BaseCompilerExtension | 22 | internal sealed class UtilCompiler : BaseCompilerExtension |
23 | { | 23 | { |
24 | // user creation attributes definitions (from sca.h) | 24 | // user creation attributes definitions (from sca.h) |
25 | internal const int UserDontExpirePasswrd = 0x00000001; | 25 | internal const int UserDontExpirePasswrd = 0x00000001; |
@@ -37,7 +37,7 @@ namespace WixToolset.Util | |||
37 | 37 | ||
38 | private static readonly Regex FindPropertyBrackets = new Regex(@"\[(?!\\|\])|(?<!\[\\\]|\[\\|\\\[)\]", RegexOptions.ExplicitCapture | RegexOptions.Compiled); | 38 | private static readonly Regex FindPropertyBrackets = new Regex(@"\[(?!\\|\])|(?<!\[\\\]|\[\\|\\\[)\]", RegexOptions.ExplicitCapture | RegexOptions.Compiled); |
39 | 39 | ||
40 | public override XNamespace Namespace => "http://wixtoolset.org/schemas/v4/wxs/util"; | 40 | public override XNamespace Namespace => UtilConstants.Namespace; |
41 | 41 | ||
42 | /// <summary> | 42 | /// <summary> |
43 | /// Types of Internet shortcuts. | 43 | /// Types of Internet shortcuts. |
@@ -94,13 +94,10 @@ namespace WixToolset.Util | |||
94 | var createFolderId = context["DirectoryId"]; | 94 | var createFolderId = context["DirectoryId"]; |
95 | var createFolderComponentId = context["ComponentId"]; | 95 | var createFolderComponentId = context["ComponentId"]; |
96 | 96 | ||
97 | // If this doesn't parse successfully, something really odd is going on, so let the exception get thrown | ||
98 | var createFolderWin64 = Boolean.Parse(context["Win64"]); | ||
99 | |||
100 | switch (element.Name.LocalName) | 97 | switch (element.Name.LocalName) |
101 | { | 98 | { |
102 | case "PermissionEx": | 99 | case "PermissionEx": |
103 | this.ParsePermissionExElement(intermediate, section, element, createFolderId, createFolderComponentId, createFolderWin64, "CreateFolder"); | 100 | this.ParsePermissionExElement(intermediate, section, element, createFolderId, createFolderComponentId, "CreateFolder"); |
104 | break; | 101 | break; |
105 | default: | 102 | default: |
106 | this.ParseHelper.UnexpectedElement(parentElement, element); | 103 | this.ParseHelper.UnexpectedElement(parentElement, element); |
@@ -159,16 +156,13 @@ namespace WixToolset.Util | |||
159 | var fileId = context["FileId"]; | 156 | var fileId = context["FileId"]; |
160 | var fileComponentId = context["ComponentId"]; | 157 | var fileComponentId = context["ComponentId"]; |
161 | 158 | ||
162 | // If this doesn't parse successfully, something really odd is going on, so let the exception get thrown | ||
163 | var fileWin64 = Boolean.Parse(context["Win64"]); | ||
164 | |||
165 | switch (element.Name.LocalName) | 159 | switch (element.Name.LocalName) |
166 | { | 160 | { |
167 | case "PerfCounter": | 161 | case "PerfCounter": |
168 | this.ParsePerfCounterElement(intermediate, section, element, fileComponentId, fileId); | 162 | this.ParsePerfCounterElement(intermediate, section, element, fileComponentId, fileId); |
169 | break; | 163 | break; |
170 | case "PermissionEx": | 164 | case "PermissionEx": |
171 | this.ParsePermissionExElement(intermediate, section, element, fileId, fileComponentId, fileWin64, "File"); | 165 | this.ParsePermissionExElement(intermediate, section, element, fileId, fileComponentId, "File"); |
172 | break; | 166 | break; |
173 | case "PerfCounterManifest": | 167 | case "PerfCounterManifest": |
174 | this.ParsePerfCounterManifestElement(intermediate, section, element, fileComponentId, fileId); | 168 | this.ParsePerfCounterManifestElement(intermediate, section, element, fileComponentId, fileId); |
@@ -177,7 +171,7 @@ namespace WixToolset.Util | |||
177 | this.ParseEventManifestElement(intermediate, section, element, fileComponentId, fileId); | 171 | this.ParseEventManifestElement(intermediate, section, element, fileComponentId, fileId); |
178 | break; | 172 | break; |
179 | case "FormatFile": | 173 | case "FormatFile": |
180 | this.ParseFormatFileElement(intermediate, section, element, fileId, fileWin64); | 174 | this.ParseFormatFileElement(intermediate, section, element, fileId); |
181 | break; | 175 | break; |
182 | default: | 176 | default: |
183 | this.ParseHelper.UnexpectedElement(parentElement, element); | 177 | this.ParseHelper.UnexpectedElement(parentElement, element); |
@@ -296,13 +290,10 @@ namespace WixToolset.Util | |||
296 | var registryId = context["RegistryId"]; | 290 | var registryId = context["RegistryId"]; |
297 | var registryComponentId = context["ComponentId"]; | 291 | var registryComponentId = context["ComponentId"]; |
298 | 292 | ||
299 | // If this doesn't parse successfully, something really odd is going on, so let the exception get thrown | ||
300 | var registryWin64 = Boolean.Parse(context["Win64"]); | ||
301 | |||
302 | switch (element.Name.LocalName) | 293 | switch (element.Name.LocalName) |
303 | { | 294 | { |
304 | case "PermissionEx": | 295 | case "PermissionEx": |
305 | this.ParsePermissionExElement(intermediate, section, element, registryId, registryComponentId, registryWin64, "Registry"); | 296 | this.ParsePermissionExElement(intermediate, section, element, registryId, registryComponentId, "Registry"); |
306 | break; | 297 | break; |
307 | default: | 298 | default: |
308 | this.ParseHelper.UnexpectedElement(parentElement, element); | 299 | this.ParseHelper.UnexpectedElement(parentElement, element); |
@@ -314,13 +305,10 @@ namespace WixToolset.Util | |||
314 | var serviceInstallName = context["ServiceInstallName"]; | 305 | var serviceInstallName = context["ServiceInstallName"]; |
315 | var serviceInstallComponentId = context["ServiceInstallComponentId"]; | 306 | var serviceInstallComponentId = context["ServiceInstallComponentId"]; |
316 | 307 | ||
317 | // If this doesn't parse successfully, something really odd is going on, so let the exception get thrown | ||
318 | var serviceInstallWin64 = Boolean.Parse(context["Win64"]); | ||
319 | |||
320 | switch (element.Name.LocalName) | 308 | switch (element.Name.LocalName) |
321 | { | 309 | { |
322 | case "PermissionEx": | 310 | case "PermissionEx": |
323 | this.ParsePermissionExElement(intermediate, section, element, serviceInstallId, serviceInstallComponentId, serviceInstallWin64, "ServiceInstall"); | 311 | this.ParsePermissionExElement(intermediate, section, element, serviceInstallId, serviceInstallComponentId, "ServiceInstall"); |
324 | break; | 312 | break; |
325 | case "ServiceConfig": | 313 | case "ServiceConfig": |
326 | this.ParseServiceConfigElement(intermediate, section, element, serviceInstallComponentId, "ServiceInstall", serviceInstallName); | 314 | this.ParseServiceConfigElement(intermediate, section, element, serviceInstallComponentId, "ServiceInstall", serviceInstallName); |
@@ -536,7 +524,6 @@ namespace WixToolset.Util | |||
536 | private void ParseComponentSearchRefElement(Intermediate intermediate, IntermediateSection section, XElement element) | 524 | private void ParseComponentSearchRefElement(Intermediate intermediate, IntermediateSection section, XElement element) |
537 | { | 525 | { |
538 | var sourceLineNumbers = this.ParseHelper.GetSourceLineNumbers(element); | 526 | var sourceLineNumbers = this.ParseHelper.GetSourceLineNumbers(element); |
539 | string refId = null; | ||
540 | 527 | ||
541 | foreach (var attrib in element.Attributes()) | 528 | foreach (var attrib in element.Attributes()) |
542 | { | 529 | { |
@@ -545,7 +532,7 @@ namespace WixToolset.Util | |||
545 | switch (attrib.Name.LocalName) | 532 | switch (attrib.Name.LocalName) |
546 | { | 533 | { |
547 | case "Id": | 534 | case "Id": |
548 | refId = this.ParseHelper.GetAttributeIdentifierValue(sourceLineNumbers, attrib); | 535 | var refId = this.ParseHelper.GetAttributeIdentifierValue(sourceLineNumbers, attrib); |
549 | this.ParseHelper.CreateSimpleReference(section, sourceLineNumbers, SymbolDefinitions.WixComponentSearch, refId); | 536 | this.ParseHelper.CreateSimpleReference(section, sourceLineNumbers, SymbolDefinitions.WixComponentSearch, refId); |
550 | break; | 537 | break; |
551 | default: | 538 | default: |
@@ -2284,7 +2271,7 @@ namespace WixToolset.Util | |||
2284 | /// <param name="element">Element to parse.</param> | 2271 | /// <param name="element">Element to parse.</param> |
2285 | /// <param name="fileId">Identifier of referenced file.</param> | 2272 | /// <param name="fileId">Identifier of referenced file.</param> |
2286 | /// <param name="win64">Flag to determine whether the component is 64-bit.</param> | 2273 | /// <param name="win64">Flag to determine whether the component is 64-bit.</param> |
2287 | private void ParseFormatFileElement(Intermediate intermediate, IntermediateSection section, XElement element, string fileId, bool win64) | 2274 | private void ParseFormatFileElement(Intermediate intermediate, IntermediateSection section, XElement element, string fileId) |
2288 | { | 2275 | { |
2289 | var sourceLineNumbers = this.ParseHelper.GetSourceLineNumbers(element); | 2276 | var sourceLineNumbers = this.ParseHelper.GetSourceLineNumbers(element); |
2290 | string binaryId = null; | 2277 | string binaryId = null; |
@@ -2415,7 +2402,6 @@ namespace WixToolset.Util | |||
2415 | ComponentRef = componentId, | 2402 | ComponentRef = componentId, |
2416 | }); | 2403 | }); |
2417 | } | 2404 | } |
2418 | |||
2419 | } | 2405 | } |
2420 | 2406 | ||
2421 | this.ParseHelper.CreateCustomActionReference(sourceLineNumbers, section, "Wix4ConfigureEventManifestRegister", this.Context.Platform, CustomActionPlatforms.X86 | CustomActionPlatforms.X64 | CustomActionPlatforms.ARM64); | 2407 | this.ParseHelper.CreateCustomActionReference(sourceLineNumbers, section, "Wix4ConfigureEventManifestRegister", this.Context.Platform, CustomActionPlatforms.X86 | CustomActionPlatforms.X64 | CustomActionPlatforms.ARM64); |
@@ -2435,7 +2421,7 @@ namespace WixToolset.Util | |||
2435 | /// <param name="componentId">Identifier of component, used to determine install state.</param> | 2421 | /// <param name="componentId">Identifier of component, used to determine install state.</param> |
2436 | /// <param name="win64">Flag to determine whether the component is 64-bit.</param> | 2422 | /// <param name="win64">Flag to determine whether the component is 64-bit.</param> |
2437 | /// <param name="tableName">Name of table that contains objectId.</param> | 2423 | /// <param name="tableName">Name of table that contains objectId.</param> |
2438 | private void ParsePermissionExElement(Intermediate intermediate, IntermediateSection section, XElement element, string objectId, string componentId, bool win64, string tableName) | 2424 | private void ParsePermissionExElement(Intermediate intermediate, IntermediateSection section, XElement element, string objectId, string componentId, string tableName) |
2439 | { | 2425 | { |
2440 | var sourceLineNumbers = this.ParseHelper.GetSourceLineNumbers(element); | 2426 | var sourceLineNumbers = this.ParseHelper.GetSourceLineNumbers(element); |
2441 | var bits = new BitArray(32); | 2427 | var bits = new BitArray(32); |
@@ -2623,7 +2609,7 @@ namespace WixToolset.Util | |||
2623 | 2609 | ||
2624 | if (null == id) | 2610 | if (null == id) |
2625 | { | 2611 | { |
2626 | id = this.ParseHelper.CreateIdentifier("wps", variable, condition, after, (productCode == null ? upgradeCode : productCode), attributes.ToString()); | 2612 | id = this.ParseHelper.CreateIdentifier("wps", variable, condition, after, productCode ?? upgradeCode, attributes.ToString()); |
2627 | } | 2613 | } |
2628 | 2614 | ||
2629 | this.ParseHelper.ParseForExtensionElements(this.Context.Extensions, intermediate, section, element); | 2615 | this.ParseHelper.ParseForExtensionElements(this.Context.Extensions, intermediate, section, element); |