From 86e59fdbc94ae661ca682f04cddb60d7830ae8a8 Mon Sep 17 00:00:00 2001 From: Rob Mensching Date: Tue, 6 Apr 2021 09:34:57 -0700 Subject: Introduce StandardDirectory for referencing standard directories Completes wixtoolset/issues#6416 --- .../Decompile/Decompiler.cs | 70 ++++++++++++---------- .../Decompile/Names.cs | 1 + 2 files changed, 41 insertions(+), 30 deletions(-) (limited to 'src/WixToolset.Core.WindowsInstaller') diff --git a/src/WixToolset.Core.WindowsInstaller/Decompile/Decompiler.cs b/src/WixToolset.Core.WindowsInstaller/Decompile/Decompiler.cs index 8e477dd1..eb23f497 100644 --- a/src/WixToolset.Core.WindowsInstaller/Decompile/Decompiler.cs +++ b/src/WixToolset.Core.WindowsInstaller/Decompile/Decompiler.cs @@ -4289,53 +4289,57 @@ namespace WixToolset.Core.WindowsInstaller.Decompile foreach (var row in table.Rows) { var id = row.FieldAsString(0); - var xDirectory = new XElement(Names.DirectoryElement, + var elementName = WindowsInstallerStandard.IsStandardDirectory(id) ? Names.StandardDirectoryElement : Names.DirectoryElement; + var xDirectory = new XElement(elementName, new XAttribute("Id", id)); - var names = this.BackendHelper.SplitMsiFileName(row.FieldAsString(2)); - - if (String.Equals(id, "TARGETDIR", StringComparison.Ordinal) && !String.Equals(names[0], "SourceDir", StringComparison.Ordinal)) - { - this.Messaging.Write(WarningMessages.TargetDirCorrectedDefaultDir()); - xDirectory.SetAttributeValue("Name", "SourceDir"); - } - else + if (!WindowsInstallerStandard.IsStandardDirectory(id)) { - if (null != names[0] && "." != names[0]) + var names = this.BackendHelper.SplitMsiFileName(row.FieldAsString(2)); + + if (id == "TARGETDIR" && names[0] != "SourceDir") { - if (null != names[1]) + this.Messaging.Write(WarningMessages.TargetDirCorrectedDefaultDir()); + xDirectory.SetAttributeValue("Name", "SourceDir"); + } + else + { + if (null != names[0] && "." != names[0]) { - xDirectory.SetAttributeValue("ShortName", names[0]); + if (null != names[1]) + { + xDirectory.SetAttributeValue("ShortName", names[0]); + } + else + { + xDirectory.SetAttributeValue("Name", names[0]); + } } - else + + if (null != names[1]) { - xDirectory.SetAttributeValue("Name", names[0]); + xDirectory.SetAttributeValue("Name", names[1]); } } - if (null != names[1]) + if (null != names[2]) { - xDirectory.SetAttributeValue("Name", names[1]); + if (null != names[3]) + { + xDirectory.SetAttributeValue("ShortSourceName", names[2]); + } + else + { + xDirectory.SetAttributeValue("SourceName", names[2]); + } } - } - if (null != names[2]) - { if (null != names[3]) { - xDirectory.SetAttributeValue("ShortSourceName", names[2]); - } - else - { - xDirectory.SetAttributeValue("SourceName", names[2]); + xDirectory.SetAttributeValue("SourceName", names[3]); } } - if (null != names[3]) - { - xDirectory.SetAttributeValue("SourceName", names[3]); - } - this.IndexElement(row, xDirectory); } @@ -4344,7 +4348,13 @@ namespace WixToolset.Core.WindowsInstaller.Decompile { var xDirectory = this.GetIndexedElement(row); - if (row.IsColumnNull(1)) + var id = row.FieldAsString(0); + + if (id == "TARGETDIR") + { + // Skip TARGETDIR. + } + else if (row.IsColumnNull(1) || WindowsInstallerStandard.IsStandardDirectory(id)) { this.RootElement.Add(xDirectory); } diff --git a/src/WixToolset.Core.WindowsInstaller/Decompile/Names.cs b/src/WixToolset.Core.WindowsInstaller/Decompile/Names.cs index 82258c57..db65bbf7 100644 --- a/src/WixToolset.Core.WindowsInstaller/Decompile/Names.cs +++ b/src/WixToolset.Core.WindowsInstaller/Decompile/Names.cs @@ -69,6 +69,7 @@ namespace WixToolset.Core.WindowsInstaller.Decompile public static readonly XName LevelElement = WxsNamespace + "Level"; public static readonly XName DialogElement = WxsNamespace + "Dialog"; + public static readonly XName StandardDirectoryElement = WxsNamespace + "StandardDirectory"; public static readonly XName DirectoryElement = WxsNamespace + "Directory"; public static readonly XName DirectorySearchElement = WxsNamespace + "DirectorySearch"; public static readonly XName CopyFileElement = WxsNamespace + "CopyFile"; -- cgit v1.2.3-55-g6feb