diff options
Diffstat (limited to 'src/wixext')
| -rw-r--r-- | src/wixext/Symbols/WixRemoveFolderExSymbol.cs | 21 | ||||
| -rw-r--r-- | src/wixext/UtilCompiler.cs | 28 | ||||
| -rw-r--r-- | src/wixext/UtilTableDefinitions.cs | 1 |
3 files changed, 31 insertions, 19 deletions
diff --git a/src/wixext/Symbols/WixRemoveFolderExSymbol.cs b/src/wixext/Symbols/WixRemoveFolderExSymbol.cs index 0c50ab8e..86352b6c 100644 --- a/src/wixext/Symbols/WixRemoveFolderExSymbol.cs +++ b/src/wixext/Symbols/WixRemoveFolderExSymbol.cs | |||
| @@ -14,6 +14,7 @@ namespace WixToolset.Util | |||
| 14 | new IntermediateFieldDefinition(nameof(WixRemoveFolderExSymbolFields.ComponentRef), IntermediateFieldType.String), | 14 | new IntermediateFieldDefinition(nameof(WixRemoveFolderExSymbolFields.ComponentRef), IntermediateFieldType.String), |
| 15 | new IntermediateFieldDefinition(nameof(WixRemoveFolderExSymbolFields.Property), IntermediateFieldType.String), | 15 | new IntermediateFieldDefinition(nameof(WixRemoveFolderExSymbolFields.Property), IntermediateFieldType.String), |
| 16 | new IntermediateFieldDefinition(nameof(WixRemoveFolderExSymbolFields.InstallMode), IntermediateFieldType.Number), | 16 | new IntermediateFieldDefinition(nameof(WixRemoveFolderExSymbolFields.InstallMode), IntermediateFieldType.Number), |
| 17 | new IntermediateFieldDefinition(nameof(WixRemoveFolderExSymbolFields.Condition), IntermediateFieldType.String), | ||
| 17 | }, | 18 | }, |
| 18 | typeof(WixRemoveFolderExSymbol)); | 19 | typeof(WixRemoveFolderExSymbol)); |
| 19 | } | 20 | } |
| @@ -28,6 +29,14 @@ namespace WixToolset.Util.Symbols | |||
| 28 | ComponentRef, | 29 | ComponentRef, |
| 29 | Property, | 30 | Property, |
| 30 | InstallMode, | 31 | InstallMode, |
| 32 | Condition, | ||
| 33 | } | ||
| 34 | |||
| 35 | public enum WixRemoveFolderExInstallMode | ||
| 36 | { | ||
| 37 | Install = 1, | ||
| 38 | Uninstall = 2, | ||
| 39 | Both = 3, | ||
| 31 | } | 40 | } |
| 32 | 41 | ||
| 33 | public class WixRemoveFolderExSymbol : IntermediateSymbol | 42 | public class WixRemoveFolderExSymbol : IntermediateSymbol |
| @@ -54,10 +63,16 @@ namespace WixToolset.Util.Symbols | |||
| 54 | set => this.Set((int)WixRemoveFolderExSymbolFields.Property, value); | 63 | set => this.Set((int)WixRemoveFolderExSymbolFields.Property, value); |
| 55 | } | 64 | } |
| 56 | 65 | ||
| 57 | public int InstallMode | 66 | public WixRemoveFolderExInstallMode InstallMode |
| 67 | { | ||
| 68 | get => (WixRemoveFolderExInstallMode)this.Fields[(int)WixRemoveFolderExSymbolFields.InstallMode].AsNumber(); | ||
| 69 | set => this.Set((int)WixRemoveFolderExSymbolFields.InstallMode, (int)value); | ||
| 70 | } | ||
| 71 | |||
| 72 | public string Condition | ||
| 58 | { | 73 | { |
| 59 | get => this.Fields[(int)WixRemoveFolderExSymbolFields.InstallMode].AsNumber(); | 74 | get => this.Fields[(int)WixRemoveFolderExSymbolFields.Condition].AsString(); |
| 60 | set => this.Set((int)WixRemoveFolderExSymbolFields.InstallMode, value); | 75 | set => this.Set((int)WixRemoveFolderExSymbolFields.Condition, value); |
| 61 | } | 76 | } |
| 62 | } | 77 | } |
| 63 | } \ No newline at end of file | 78 | } \ No newline at end of file |
diff --git a/src/wixext/UtilCompiler.cs b/src/wixext/UtilCompiler.cs index 12213e63..63f2b469 100644 --- a/src/wixext/UtilCompiler.cs +++ b/src/wixext/UtilCompiler.cs | |||
| @@ -41,13 +41,6 @@ namespace WixToolset.Util | |||
| 41 | Compatible, | 41 | Compatible, |
| 42 | } | 42 | } |
| 43 | 43 | ||
| 44 | internal enum WixRemoveFolderExOn | ||
| 45 | { | ||
| 46 | Install = 1, | ||
| 47 | Uninstall = 2, | ||
| 48 | Both = 3, | ||
| 49 | } | ||
| 50 | |||
| 51 | private static readonly Regex FindPropertyBrackets = new Regex(@"\[(?!\\|\])|(?<!\[\\\]|\[\\|\\\[)\]", RegexOptions.ExplicitCapture | RegexOptions.Compiled); | 44 | private static readonly Regex FindPropertyBrackets = new Regex(@"\[(?!\\|\])|(?<!\[\\\]|\[\\|\\\[)\]", RegexOptions.ExplicitCapture | RegexOptions.Compiled); |
| 52 | 45 | ||
| 53 | public override XNamespace Namespace => "http://wixtoolset.org/schemas/v4/wxs/util"; | 46 | public override XNamespace Namespace => "http://wixtoolset.org/schemas/v4/wxs/util"; |
| @@ -2812,8 +2805,9 @@ namespace WixToolset.Util | |||
| 2812 | { | 2805 | { |
| 2813 | var sourceLineNumbers = this.ParseHelper.GetSourceLineNumbers(element); | 2806 | var sourceLineNumbers = this.ParseHelper.GetSourceLineNumbers(element); |
| 2814 | Identifier id = null; | 2807 | Identifier id = null; |
| 2815 | var on = (int)WixRemoveFolderExOn.Uninstall; | 2808 | var mode = WixRemoveFolderExInstallMode.Uninstall; |
| 2816 | string property = null; | 2809 | string property = null; |
| 2810 | string condition = null; | ||
| 2817 | 2811 | ||
| 2818 | foreach (var attrib in element.Attributes()) | 2812 | foreach (var attrib in element.Attributes()) |
| 2819 | { | 2813 | { |
| @@ -2821,6 +2815,9 @@ namespace WixToolset.Util | |||
| 2821 | { | 2815 | { |
| 2822 | switch (attrib.Name.LocalName) | 2816 | switch (attrib.Name.LocalName) |
| 2823 | { | 2817 | { |
| 2818 | case "Condition": | ||
| 2819 | condition = this.ParseHelper.GetAttributeValue(sourceLineNumbers, attrib); | ||
| 2820 | break; | ||
| 2824 | case "Id": | 2821 | case "Id": |
| 2825 | id = this.ParseHelper.GetAttributeIdentifier(sourceLineNumbers, attrib); | 2822 | id = this.ParseHelper.GetAttributeIdentifier(sourceLineNumbers, attrib); |
| 2826 | break; | 2823 | break; |
| @@ -2828,24 +2825,22 @@ namespace WixToolset.Util | |||
| 2828 | var onValue = this.ParseHelper.GetAttributeValue(sourceLineNumbers, attrib); | 2825 | var onValue = this.ParseHelper.GetAttributeValue(sourceLineNumbers, attrib); |
| 2829 | if (onValue.Length == 0) | 2826 | if (onValue.Length == 0) |
| 2830 | { | 2827 | { |
| 2831 | on = CompilerConstants.IllegalInteger; | ||
| 2832 | } | 2828 | } |
| 2833 | else | 2829 | else |
| 2834 | { | 2830 | { |
| 2835 | switch (onValue) | 2831 | switch (onValue) |
| 2836 | { | 2832 | { |
| 2837 | case "install": | 2833 | case "install": |
| 2838 | on = (int)WixRemoveFolderExOn.Install; | 2834 | mode = WixRemoveFolderExInstallMode.Install; |
| 2839 | break; | 2835 | break; |
| 2840 | case "uninstall": | 2836 | case "uninstall": |
| 2841 | on = (int)WixRemoveFolderExOn.Uninstall; | 2837 | mode = WixRemoveFolderExInstallMode.Uninstall; |
| 2842 | break; | 2838 | break; |
| 2843 | case "both": | 2839 | case "both": |
| 2844 | on = (int)WixRemoveFolderExOn.Both; | 2840 | mode = WixRemoveFolderExInstallMode.Both; |
| 2845 | break; | 2841 | break; |
| 2846 | default: | 2842 | default: |
| 2847 | this.Messaging.Write(ErrorMessages.IllegalAttributeValue(sourceLineNumbers, element.Name.LocalName, "On", onValue, "install", "uninstall", "both")); | 2843 | this.Messaging.Write(ErrorMessages.IllegalAttributeValue(sourceLineNumbers, element.Name.LocalName, "On", onValue, "install", "uninstall", "both")); |
| 2848 | on = CompilerConstants.IllegalInteger; | ||
| 2849 | break; | 2844 | break; |
| 2850 | } | 2845 | } |
| 2851 | } | 2846 | } |
| @@ -2869,9 +2864,9 @@ namespace WixToolset.Util | |||
| 2869 | this.Messaging.Write(ErrorMessages.ExpectedAttribute(sourceLineNumbers, element.Name.LocalName, "Property")); | 2864 | this.Messaging.Write(ErrorMessages.ExpectedAttribute(sourceLineNumbers, element.Name.LocalName, "Property")); |
| 2870 | } | 2865 | } |
| 2871 | 2866 | ||
| 2872 | if (null == id) | 2867 | if (id == null) |
| 2873 | { | 2868 | { |
| 2874 | id = this.ParseHelper.CreateIdentifier("wrf", componentId, property, on.ToString(CultureInfo.InvariantCulture.NumberFormat)); | 2869 | id = this.ParseHelper.CreateIdentifier("wrf", componentId, property, mode.ToString()); |
| 2875 | } | 2870 | } |
| 2876 | 2871 | ||
| 2877 | this.ParseHelper.ParseForExtensionElements(this.Context.Extensions, intermediate, section, element); | 2872 | this.ParseHelper.ParseForExtensionElements(this.Context.Extensions, intermediate, section, element); |
| @@ -2884,7 +2879,8 @@ namespace WixToolset.Util | |||
| 2884 | { | 2879 | { |
| 2885 | ComponentRef = componentId, | 2880 | ComponentRef = componentId, |
| 2886 | Property = property, | 2881 | Property = property, |
| 2887 | InstallMode = on, | 2882 | InstallMode = mode, |
| 2883 | Condition = condition | ||
| 2888 | }); | 2884 | }); |
| 2889 | 2885 | ||
| 2890 | this.ParseHelper.EnsureTable(section, sourceLineNumbers, "RemoveFile"); | 2886 | this.ParseHelper.EnsureTable(section, sourceLineNumbers, "RemoveFile"); |
diff --git a/src/wixext/UtilTableDefinitions.cs b/src/wixext/UtilTableDefinitions.cs index eff5aaf6..fd09367a 100644 --- a/src/wixext/UtilTableDefinitions.cs +++ b/src/wixext/UtilTableDefinitions.cs | |||
| @@ -33,6 +33,7 @@ namespace WixToolset.Util | |||
| 33 | new ColumnDefinition("Component_", ColumnType.String, 72, primaryKey: false, nullable: false, ColumnCategory.Identifier, keyTable: "Component", keyColumn: 1, description: "Foreign key into the Component table used to determine install state", modularizeType: ColumnModularizeType.Column), | 33 | new ColumnDefinition("Component_", ColumnType.String, 72, primaryKey: false, nullable: false, ColumnCategory.Identifier, keyTable: "Component", keyColumn: 1, description: "Foreign key into the Component table used to determine install state", modularizeType: ColumnModularizeType.Column), |
| 34 | new ColumnDefinition("Property", ColumnType.String, 72, primaryKey: false, nullable: false, ColumnCategory.Identifier, description: "Name of Property that contains the root of the directory tree to remove.", modularizeType: ColumnModularizeType.Column), | 34 | new ColumnDefinition("Property", ColumnType.String, 72, primaryKey: false, nullable: false, ColumnCategory.Identifier, description: "Name of Property that contains the root of the directory tree to remove.", modularizeType: ColumnModularizeType.Column), |
| 35 | new ColumnDefinition("InstallMode", ColumnType.Number, 2, primaryKey: false, nullable: false, ColumnCategory.Unknown, minValue: 1, maxValue: 3, description: "1 == Remove only when the associated component is being installed (msiInstallStateLocal or msiInstallStateSource), 2 == Remove only when the associated component is being removed (msiInstallStateAbsent), 3 = Remove in either of the above cases."), | 35 | new ColumnDefinition("InstallMode", ColumnType.Number, 2, primaryKey: false, nullable: false, ColumnCategory.Unknown, minValue: 1, maxValue: 3, description: "1 == Remove only when the associated component is being installed (msiInstallStateLocal or msiInstallStateSource), 2 == Remove only when the associated component is being removed (msiInstallStateAbsent), 3 = Remove in either of the above cases."), |
| 36 | new ColumnDefinition("Condition", ColumnType.String, 0, primaryKey: false, nullable: true, ColumnCategory.Condition, description: "Optional expression which skips the removing of folders.", modularizeType: ColumnModularizeType.Condition, forceLocalizable: true), | ||
| 36 | }, | 37 | }, |
| 37 | symbolIdIsPrimaryKey: true | 38 | symbolIdIsPrimaryKey: true |
| 38 | ); | 39 | ); |
