diff options
author | Rob Mensching <rob@firegiant.com> | 2023-12-05 16:11:05 -0800 |
---|---|---|
committer | Rob Mensching <rob@firegiant.com> | 2023-12-16 14:32:21 -0800 |
commit | 379926377524951c692e8c342a49fb03da61345f (patch) | |
tree | 2dad2c9b622cd871fd69a2968e11bfbcc5bd751d | |
parent | 7be5d94529c8419b4bd5da4dcd838795622643cb (diff) | |
download | wix-379926377524951c692e8c342a49fb03da61345f.tar.gz wix-379926377524951c692e8c342a49fb03da61345f.tar.bz2 wix-379926377524951c692e8c342a49fb03da61345f.zip |
Initial support for virtual symbols.
Completes 7913
27 files changed, 621 insertions, 200 deletions
diff --git a/src/api/wix/WixToolset.Data/AccessModifier.cs b/src/api/wix/WixToolset.Data/AccessModifier.cs index 191558b5..3a125f14 100644 --- a/src/api/wix/WixToolset.Data/AccessModifier.cs +++ b/src/api/wix/WixToolset.Data/AccessModifier.cs | |||
@@ -28,11 +28,21 @@ namespace WixToolset.Data | |||
28 | Protected = File, | 28 | Protected = File, |
29 | 29 | ||
30 | /// <summary> | 30 | /// <summary> |
31 | /// Indicates the identifiers is visible only to the section where it is defined. | 31 | /// Indicates the identifier is visible only to the section where it is defined. |
32 | /// </summary> | 32 | /// </summary> |
33 | Section, | 33 | Section, |
34 | [Obsolete] | 34 | [Obsolete] |
35 | Private = Section, | 35 | Private = Section, |
36 | |||
37 | /// <summary> | ||
38 | /// Indicates the identifier can be overridden by another symbol. | ||
39 | /// </summary> | ||
40 | Virtual, | ||
41 | |||
42 | /// <summary> | ||
43 | /// Indicates the identifier overrides a virtual symbol. | ||
44 | /// </summary> | ||
45 | Override, | ||
36 | } | 46 | } |
37 | 47 | ||
38 | /// <summary> | 48 | /// <summary> |
@@ -65,6 +75,12 @@ namespace WixToolset.Data | |||
65 | case "private": | 75 | case "private": |
66 | return AccessModifier.Section; | 76 | return AccessModifier.Section; |
67 | 77 | ||
78 | case "virtual": | ||
79 | return AccessModifier.Virtual; | ||
80 | |||
81 | case "override": | ||
82 | return AccessModifier.Override; | ||
83 | |||
68 | default: | 84 | default: |
69 | throw new ArgumentException($"Unknown AccessModifier: {access}", nameof(access)); | 85 | throw new ArgumentException($"Unknown AccessModifier: {access}", nameof(access)); |
70 | } | 86 | } |
@@ -91,6 +107,12 @@ namespace WixToolset.Data | |||
91 | case AccessModifier.Section: | 107 | case AccessModifier.Section: |
92 | return "section"; | 108 | return "section"; |
93 | 109 | ||
110 | case AccessModifier.Virtual: | ||
111 | return "virtual"; | ||
112 | |||
113 | case AccessModifier.Override: | ||
114 | return "override"; | ||
115 | |||
94 | default: | 116 | default: |
95 | throw new ArgumentException($"Unknown AccessModifier: {access}", nameof(access)); | 117 | throw new ArgumentException($"Unknown AccessModifier: {access}", nameof(access)); |
96 | } | 118 | } |
diff --git a/src/api/wix/WixToolset.Data/ErrorMessages.cs b/src/api/wix/WixToolset.Data/ErrorMessages.cs index 7cb0f4f9..889d1762 100644 --- a/src/api/wix/WixToolset.Data/ErrorMessages.cs +++ b/src/api/wix/WixToolset.Data/ErrorMessages.cs | |||
@@ -325,12 +325,12 @@ namespace WixToolset.Data | |||
325 | 325 | ||
326 | public static Message DuplicateSymbol(SourceLineNumber sourceLineNumbers, string symbolName) | 326 | public static Message DuplicateSymbol(SourceLineNumber sourceLineNumbers, string symbolName) |
327 | { | 327 | { |
328 | return Message(sourceLineNumbers, Ids.DuplicateSymbol, "Duplicate symbol '{0}' found. This typically means that an Id is duplicated. Access modifiers (internal, protected, private) cannot prevent these conflicts. Ensure all your identifiers of a given type (File, Component, Feature) are unique.", symbolName); | 328 | return Message(sourceLineNumbers, Ids.DuplicateSymbol, "Duplicate symbol '{0}' found. This typically means that an Id is duplicated. Access modifiers (global, library, file, section) cannot prevent these conflicts. Ensure all your identifiers of a given type (Directory, File, etc.) are unique.", symbolName); |
329 | } | 329 | } |
330 | 330 | ||
331 | public static Message DuplicateSymbol(SourceLineNumber sourceLineNumbers, string symbolName, string referencingSourceLineNumber) | 331 | public static Message DuplicateSymbol(SourceLineNumber sourceLineNumbers, string symbolName, string referencingSourceLineNumber) |
332 | { | 332 | { |
333 | return Message(sourceLineNumbers, Ids.DuplicateSymbol, "Duplicate symbol '{0}' referenced by {1}. This typically means that an Id is duplicated. Ensure all your identifiers of a given type (File, Component, Feature) are unique or use an access modifier to scope the identfier.", symbolName, referencingSourceLineNumber); | 333 | return Message(sourceLineNumbers, Ids.DuplicateSymbol, "Duplicate symbol '{0}' referenced by {1}. This typically means that an Id is duplicated. Ensure all your identifiers of a given type (Directory, File, etc.) are unique or use an access modifier to scope the identfier.", symbolName, referencingSourceLineNumber); |
334 | } | 334 | } |
335 | 335 | ||
336 | public static Message DuplicateSymbol2(SourceLineNumber sourceLineNumbers) | 336 | public static Message DuplicateSymbol2(SourceLineNumber sourceLineNumbers) |
diff --git a/src/api/wix/WixToolset.Data/WindowsInstaller/WindowsInstallerStandard.cs b/src/api/wix/WixToolset.Data/WindowsInstaller/WindowsInstallerStandard.cs index 0fe7601e..17267cf7 100644 --- a/src/api/wix/WixToolset.Data/WindowsInstaller/WindowsInstallerStandard.cs +++ b/src/api/wix/WixToolset.Data/WindowsInstaller/WindowsInstallerStandard.cs | |||
@@ -213,157 +213,157 @@ namespace WixToolset.Data.WindowsInstaller | |||
213 | var standardActions = new[] | 213 | var standardActions = new[] |
214 | { | 214 | { |
215 | // AdminExecuteSequence | 215 | // AdminExecuteSequence |
216 | new WixActionSymbol(null, new Identifier(AccessModifier.Global, "AdminExecuteSequence/LaunchConditions")) { Action="LaunchConditions", Sequence=100, SequenceTable=SequenceTable.AdminExecuteSequence, Overridable = true }, | 216 | new WixActionSymbol(null, new Identifier(AccessModifier.Virtual, "AdminExecuteSequence/LaunchConditions")) { Action="LaunchConditions", Sequence=100, SequenceTable=SequenceTable.AdminExecuteSequence }, |
217 | new WixActionSymbol(null, new Identifier(AccessModifier.Global, "AdminExecuteSequence/CostInitialize")) { Action="CostInitialize", Sequence=800, SequenceTable=SequenceTable.AdminExecuteSequence, Overridable = true }, | 217 | new WixActionSymbol(null, new Identifier(AccessModifier.Virtual, "AdminExecuteSequence/CostInitialize")) { Action="CostInitialize", Sequence=800, SequenceTable=SequenceTable.AdminExecuteSequence }, |
218 | new WixActionSymbol(null, new Identifier(AccessModifier.Global, "AdminExecuteSequence/FileCost")) { Action="FileCost", Sequence=900, SequenceTable=SequenceTable.AdminExecuteSequence, Overridable = true }, | 218 | new WixActionSymbol(null, new Identifier(AccessModifier.Virtual, "AdminExecuteSequence/FileCost")) { Action="FileCost", Sequence=900, SequenceTable=SequenceTable.AdminExecuteSequence }, |
219 | new WixActionSymbol(null, new Identifier(AccessModifier.Global, "AdminExecuteSequence/CostFinalize")) { Action="CostFinalize", Sequence=1000, SequenceTable=SequenceTable.AdminExecuteSequence, Overridable = true }, | 219 | new WixActionSymbol(null, new Identifier(AccessModifier.Virtual, "AdminExecuteSequence/CostFinalize")) { Action="CostFinalize", Sequence=1000, SequenceTable=SequenceTable.AdminExecuteSequence }, |
220 | new WixActionSymbol(null, new Identifier(AccessModifier.Global, "AdminExecuteSequence/InstallValidate")) { Action="InstallValidate", Sequence=1400, SequenceTable=SequenceTable.AdminExecuteSequence, Overridable = true }, | 220 | new WixActionSymbol(null, new Identifier(AccessModifier.Virtual, "AdminExecuteSequence/InstallValidate")) { Action="InstallValidate", Sequence=1400, SequenceTable=SequenceTable.AdminExecuteSequence }, |
221 | new WixActionSymbol(null, new Identifier(AccessModifier.Global, "AdminExecuteSequence/InstallInitialize")) { Action="InstallInitialize", Sequence=1500, SequenceTable=SequenceTable.AdminExecuteSequence, Overridable = true }, | 221 | new WixActionSymbol(null, new Identifier(AccessModifier.Virtual, "AdminExecuteSequence/InstallInitialize")) { Action="InstallInitialize", Sequence=1500, SequenceTable=SequenceTable.AdminExecuteSequence }, |
222 | new WixActionSymbol(null, new Identifier(AccessModifier.Global, "AdminExecuteSequence/InstallAdminPackage")) { Action="InstallAdminPackage",Sequence=3900, SequenceTable=SequenceTable.AdminExecuteSequence, Overridable = true }, | 222 | new WixActionSymbol(null, new Identifier(AccessModifier.Virtual, "AdminExecuteSequence/InstallAdminPackage")) { Action="InstallAdminPackage",Sequence=3900, SequenceTable=SequenceTable.AdminExecuteSequence }, |
223 | new WixActionSymbol(null, new Identifier(AccessModifier.Global, "AdminExecuteSequence/InstallFiles")) { Action="InstallFiles", Sequence=4000, SequenceTable=SequenceTable.AdminExecuteSequence, Overridable = true }, | 223 | new WixActionSymbol(null, new Identifier(AccessModifier.Virtual, "AdminExecuteSequence/InstallFiles")) { Action="InstallFiles", Sequence=4000, SequenceTable=SequenceTable.AdminExecuteSequence }, |
224 | new WixActionSymbol(null, new Identifier(AccessModifier.Global, "AdminExecuteSequence/PatchFiles")) { Action="PatchFiles", Sequence=4090, SequenceTable=SequenceTable.AdminExecuteSequence, Overridable = true }, | 224 | new WixActionSymbol(null, new Identifier(AccessModifier.Virtual, "AdminExecuteSequence/PatchFiles")) { Action="PatchFiles", Sequence=4090, SequenceTable=SequenceTable.AdminExecuteSequence }, |
225 | new WixActionSymbol(null, new Identifier(AccessModifier.Global, "AdminExecuteSequence/InstallFinalize")) { Action="InstallFinalize", Sequence=6600, SequenceTable=SequenceTable.AdminExecuteSequence, Overridable = true }, | 225 | new WixActionSymbol(null, new Identifier(AccessModifier.Virtual, "AdminExecuteSequence/InstallFinalize")) { Action="InstallFinalize", Sequence=6600, SequenceTable=SequenceTable.AdminExecuteSequence }, |
226 | 226 | ||
227 | // AdminUISequence | 227 | // AdminUISequence |
228 | new WixActionSymbol(null, new Identifier(AccessModifier.Global, "AdminUISequence/LaunchConditions")) { Action="LaunchConditions", Sequence=100, SequenceTable=SequenceTable.AdminUISequence, Overridable = true }, | 228 | new WixActionSymbol(null, new Identifier(AccessModifier.Virtual, "AdminUISequence/LaunchConditions")) { Action="LaunchConditions", Sequence=100, SequenceTable=SequenceTable.AdminUISequence }, |
229 | new WixActionSymbol(null, new Identifier(AccessModifier.Global, "AdminUISequence/CostInitialize")) { Action="CostInitialize", Sequence=800, SequenceTable=SequenceTable.AdminUISequence, Overridable = true }, | 229 | new WixActionSymbol(null, new Identifier(AccessModifier.Virtual, "AdminUISequence/CostInitialize")) { Action="CostInitialize", Sequence=800, SequenceTable=SequenceTable.AdminUISequence }, |
230 | new WixActionSymbol(null, new Identifier(AccessModifier.Global, "AdminUISequence/FileCost")) { Action="FileCost", Sequence=900, SequenceTable=SequenceTable.AdminUISequence, Overridable = true }, | 230 | new WixActionSymbol(null, new Identifier(AccessModifier.Virtual, "AdminUISequence/FileCost")) { Action="FileCost", Sequence=900, SequenceTable=SequenceTable.AdminUISequence }, |
231 | new WixActionSymbol(null, new Identifier(AccessModifier.Global, "AdminUISequence/CostFinalize")) { Action="CostFinalize", Sequence=1000, SequenceTable=SequenceTable.AdminUISequence, Overridable = true }, | 231 | new WixActionSymbol(null, new Identifier(AccessModifier.Virtual, "AdminUISequence/CostFinalize")) { Action="CostFinalize", Sequence=1000, SequenceTable=SequenceTable.AdminUISequence }, |
232 | new WixActionSymbol(null, new Identifier(AccessModifier.Global, "AdminUISequence/ExecuteAction")) { Action="ExecuteAction", Sequence=1300, SequenceTable=SequenceTable.AdminUISequence, Overridable = true }, | 232 | new WixActionSymbol(null, new Identifier(AccessModifier.Virtual, "AdminUISequence/ExecuteAction")) { Action="ExecuteAction", Sequence=1300, SequenceTable=SequenceTable.AdminUISequence }, |
233 | 233 | ||
234 | // AdvertiseExecuteSequence | 234 | // AdvertiseExecuteSequence |
235 | new WixActionSymbol(null, new Identifier(AccessModifier.Global, "AdvertiseExecuteSequence/CostInitialize")) { Action="CostInitialize", Sequence=800, SequenceTable=SequenceTable.AdvertiseExecuteSequence, Overridable = true }, | 235 | new WixActionSymbol(null, new Identifier(AccessModifier.Virtual, "AdvertiseExecuteSequence/CostInitialize")) { Action="CostInitialize", Sequence=800, SequenceTable=SequenceTable.AdvertiseExecuteSequence }, |
236 | new WixActionSymbol(null, new Identifier(AccessModifier.Global, "AdvertiseExecuteSequence/CostFinalize")) { Action="CostFinalize", Sequence=1000, SequenceTable=SequenceTable.AdvertiseExecuteSequence, Overridable = true }, | 236 | new WixActionSymbol(null, new Identifier(AccessModifier.Virtual, "AdvertiseExecuteSequence/CostFinalize")) { Action="CostFinalize", Sequence=1000, SequenceTable=SequenceTable.AdvertiseExecuteSequence }, |
237 | new WixActionSymbol(null, new Identifier(AccessModifier.Global, "AdvertiseExecuteSequence/InstallValidate")) { Action="InstallValidate", Sequence=1400, SequenceTable=SequenceTable.AdvertiseExecuteSequence, Overridable = true }, | 237 | new WixActionSymbol(null, new Identifier(AccessModifier.Virtual, "AdvertiseExecuteSequence/InstallValidate")) { Action="InstallValidate", Sequence=1400, SequenceTable=SequenceTable.AdvertiseExecuteSequence }, |
238 | new WixActionSymbol(null, new Identifier(AccessModifier.Global, "AdvertiseExecuteSequence/InstallInitialize")) { Action="InstallInitialize", Sequence=1500, SequenceTable=SequenceTable.AdvertiseExecuteSequence, Overridable = true }, | 238 | new WixActionSymbol(null, new Identifier(AccessModifier.Virtual, "AdvertiseExecuteSequence/InstallInitialize")) { Action="InstallInitialize", Sequence=1500, SequenceTable=SequenceTable.AdvertiseExecuteSequence }, |
239 | new WixActionSymbol(null, new Identifier(AccessModifier.Global, "AdvertiseExecuteSequence/CreateShortcuts")) { Action="CreateShortcuts", Sequence=4500, SequenceTable=SequenceTable.AdvertiseExecuteSequence, Overridable = true }, | 239 | new WixActionSymbol(null, new Identifier(AccessModifier.Virtual, "AdvertiseExecuteSequence/CreateShortcuts")) { Action="CreateShortcuts", Sequence=4500, SequenceTable=SequenceTable.AdvertiseExecuteSequence }, |
240 | new WixActionSymbol(null, new Identifier(AccessModifier.Global, "AdvertiseExecuteSequence/RegisterClassInfo")) { Action="RegisterClassInfo", Sequence=4600, SequenceTable=SequenceTable.AdvertiseExecuteSequence, Overridable = true }, | 240 | new WixActionSymbol(null, new Identifier(AccessModifier.Virtual, "AdvertiseExecuteSequence/RegisterClassInfo")) { Action="RegisterClassInfo", Sequence=4600, SequenceTable=SequenceTable.AdvertiseExecuteSequence }, |
241 | new WixActionSymbol(null, new Identifier(AccessModifier.Global, "AdvertiseExecuteSequence/RegisterExtensionInfo")) { Action="RegisterExtensionInfo", Sequence=4700, SequenceTable=SequenceTable.AdvertiseExecuteSequence, Overridable = true }, | 241 | new WixActionSymbol(null, new Identifier(AccessModifier.Virtual, "AdvertiseExecuteSequence/RegisterExtensionInfo")) { Action="RegisterExtensionInfo", Sequence=4700, SequenceTable=SequenceTable.AdvertiseExecuteSequence }, |
242 | new WixActionSymbol(null, new Identifier(AccessModifier.Global, "AdvertiseExecuteSequence/RegisterProgIdInfo")) { Action="RegisterProgIdInfo", Sequence=4800, SequenceTable=SequenceTable.AdvertiseExecuteSequence, Overridable = true }, | 242 | new WixActionSymbol(null, new Identifier(AccessModifier.Virtual, "AdvertiseExecuteSequence/RegisterProgIdInfo")) { Action="RegisterProgIdInfo", Sequence=4800, SequenceTable=SequenceTable.AdvertiseExecuteSequence }, |
243 | new WixActionSymbol(null, new Identifier(AccessModifier.Global, "AdvertiseExecuteSequence/RegisterMIMEInfo")) { Action="RegisterMIMEInfo", Sequence=4900, SequenceTable=SequenceTable.AdvertiseExecuteSequence, Overridable = true }, | 243 | new WixActionSymbol(null, new Identifier(AccessModifier.Virtual, "AdvertiseExecuteSequence/RegisterMIMEInfo")) { Action="RegisterMIMEInfo", Sequence=4900, SequenceTable=SequenceTable.AdvertiseExecuteSequence }, |
244 | new WixActionSymbol(null, new Identifier(AccessModifier.Global, "AdvertiseExecuteSequence/PublishComponents")) { Action="PublishComponents", Sequence=6200, SequenceTable=SequenceTable.AdvertiseExecuteSequence, Overridable = true }, | 244 | new WixActionSymbol(null, new Identifier(AccessModifier.Virtual, "AdvertiseExecuteSequence/PublishComponents")) { Action="PublishComponents", Sequence=6200, SequenceTable=SequenceTable.AdvertiseExecuteSequence }, |
245 | new WixActionSymbol(null, new Identifier(AccessModifier.Global, "AdvertiseExecuteSequence/MsiPublishAssemblies")) { Action="MsiPublishAssemblies", Sequence=6250, SequenceTable=SequenceTable.AdvertiseExecuteSequence, Overridable = true }, | 245 | new WixActionSymbol(null, new Identifier(AccessModifier.Virtual, "AdvertiseExecuteSequence/MsiPublishAssemblies")) { Action="MsiPublishAssemblies", Sequence=6250, SequenceTable=SequenceTable.AdvertiseExecuteSequence }, |
246 | new WixActionSymbol(null, new Identifier(AccessModifier.Global, "AdvertiseExecuteSequence/PublishFeatures")) { Action="PublishFeatures", Sequence=6300, SequenceTable=SequenceTable.AdvertiseExecuteSequence, Overridable = true }, | 246 | new WixActionSymbol(null, new Identifier(AccessModifier.Virtual, "AdvertiseExecuteSequence/PublishFeatures")) { Action="PublishFeatures", Sequence=6300, SequenceTable=SequenceTable.AdvertiseExecuteSequence }, |
247 | new WixActionSymbol(null, new Identifier(AccessModifier.Global, "AdvertiseExecuteSequence/PublishProduct")) { Action="PublishProduct", Sequence=6400, SequenceTable=SequenceTable.AdvertiseExecuteSequence, Overridable = true }, | 247 | new WixActionSymbol(null, new Identifier(AccessModifier.Virtual, "AdvertiseExecuteSequence/PublishProduct")) { Action="PublishProduct", Sequence=6400, SequenceTable=SequenceTable.AdvertiseExecuteSequence }, |
248 | new WixActionSymbol(null, new Identifier(AccessModifier.Global, "AdvertiseExecuteSequence/InstallFinalize")) { Action="InstallFinalize", Sequence=6600, SequenceTable=SequenceTable.AdvertiseExecuteSequence, Overridable = true }, | 248 | new WixActionSymbol(null, new Identifier(AccessModifier.Virtual, "AdvertiseExecuteSequence/InstallFinalize")) { Action="InstallFinalize", Sequence=6600, SequenceTable=SequenceTable.AdvertiseExecuteSequence }, |
249 | 249 | ||
250 | // InstallUISequence | 250 | // InstallUISequence |
251 | new WixActionSymbol(null, new Identifier(AccessModifier.Global, "InstallUISequence/FindRelatedProducts")) { Action="FindRelatedProducts", Sequence=25, SequenceTable=SequenceTable.InstallUISequence, Overridable = true }, | 251 | new WixActionSymbol(null, new Identifier(AccessModifier.Virtual, "InstallUISequence/FindRelatedProducts")) { Action="FindRelatedProducts", Sequence=25, SequenceTable=SequenceTable.InstallUISequence }, |
252 | new WixActionSymbol(null, new Identifier(AccessModifier.Global, "InstallUISequence/AppSearch")) { Action="AppSearch", Sequence=50, SequenceTable=SequenceTable.InstallUISequence, Overridable = true }, | 252 | new WixActionSymbol(null, new Identifier(AccessModifier.Virtual, "InstallUISequence/AppSearch")) { Action="AppSearch", Sequence=50, SequenceTable=SequenceTable.InstallUISequence }, |
253 | new WixActionSymbol(null, new Identifier(AccessModifier.Global, "InstallUISequence/LaunchConditions")) { Action="LaunchConditions", Sequence=100, SequenceTable=SequenceTable.InstallUISequence, Overridable = true }, | 253 | new WixActionSymbol(null, new Identifier(AccessModifier.Virtual, "InstallUISequence/LaunchConditions")) { Action="LaunchConditions", Sequence=100, SequenceTable=SequenceTable.InstallUISequence }, |
254 | new WixActionSymbol(null, new Identifier(AccessModifier.Global, "InstallUISequence/CCPSearch")) { Action="CCPSearch", Sequence=500, SequenceTable=SequenceTable.InstallUISequence, Overridable = true, Condition="NOT Installed" }, | 254 | new WixActionSymbol(null, new Identifier(AccessModifier.Virtual, "InstallUISequence/CCPSearch")) { Action="CCPSearch", Sequence=500, SequenceTable=SequenceTable.InstallUISequence, Condition="NOT Installed" }, |
255 | new WixActionSymbol(null, new Identifier(AccessModifier.Global, "InstallUISequence/RMCCPSearch")) { Action="RMCCPSearch", Sequence=600, SequenceTable=SequenceTable.InstallUISequence, Overridable = true, Condition="NOT Installed" }, | 255 | new WixActionSymbol(null, new Identifier(AccessModifier.Virtual, "InstallUISequence/RMCCPSearch")) { Action="RMCCPSearch", Sequence=600, SequenceTable=SequenceTable.InstallUISequence, Condition="NOT Installed" }, |
256 | new WixActionSymbol(null, new Identifier(AccessModifier.Global, "InstallUISequence/ValidateProductID")) { Action="ValidateProductID", Sequence=700, SequenceTable=SequenceTable.InstallUISequence, Overridable = true }, | 256 | new WixActionSymbol(null, new Identifier(AccessModifier.Virtual, "InstallUISequence/ValidateProductID")) { Action="ValidateProductID", Sequence=700, SequenceTable=SequenceTable.InstallUISequence }, |
257 | new WixActionSymbol(null, new Identifier(AccessModifier.Global, "InstallUISequence/CostInitialize")) { Action="CostInitialize", Sequence=800, SequenceTable=SequenceTable.InstallUISequence, Overridable = true }, | 257 | new WixActionSymbol(null, new Identifier(AccessModifier.Virtual, "InstallUISequence/CostInitialize")) { Action="CostInitialize", Sequence=800, SequenceTable=SequenceTable.InstallUISequence }, |
258 | new WixActionSymbol(null, new Identifier(AccessModifier.Global, "InstallUISequence/FileCost")) { Action="FileCost", Sequence=900, SequenceTable=SequenceTable.InstallUISequence, Overridable = true }, | 258 | new WixActionSymbol(null, new Identifier(AccessModifier.Virtual, "InstallUISequence/FileCost")) { Action="FileCost", Sequence=900, SequenceTable=SequenceTable.InstallUISequence }, |
259 | new WixActionSymbol(null, new Identifier(AccessModifier.Global, "InstallUISequence/IsolateComponents")) { Action="IsolateComponents", Sequence=950, SequenceTable=SequenceTable.InstallUISequence, Overridable = true }, | 259 | new WixActionSymbol(null, new Identifier(AccessModifier.Virtual, "InstallUISequence/IsolateComponents")) { Action="IsolateComponents", Sequence=950, SequenceTable=SequenceTable.InstallUISequence }, |
260 | new WixActionSymbol(null, new Identifier(AccessModifier.Global, "InstallUISequence/CostFinalize")) { Action="CostFinalize", Sequence=1000, SequenceTable=SequenceTable.InstallUISequence, Overridable = true }, | 260 | new WixActionSymbol(null, new Identifier(AccessModifier.Virtual, "InstallUISequence/CostFinalize")) { Action="CostFinalize", Sequence=1000, SequenceTable=SequenceTable.InstallUISequence }, |
261 | new WixActionSymbol(null, new Identifier(AccessModifier.Global, "InstallUISequence/MigrateFeatureStates")) { Action="MigrateFeatureStates", Sequence=1200, SequenceTable=SequenceTable.InstallUISequence, Overridable = true }, | 261 | new WixActionSymbol(null, new Identifier(AccessModifier.Virtual, "InstallUISequence/MigrateFeatureStates")) { Action="MigrateFeatureStates", Sequence=1200, SequenceTable=SequenceTable.InstallUISequence }, |
262 | new WixActionSymbol(null, new Identifier(AccessModifier.Global, "InstallUISequence/ExecuteAction")) { Action="ExecuteAction", Sequence=1300, SequenceTable=SequenceTable.InstallUISequence, Overridable = true }, | 262 | new WixActionSymbol(null, new Identifier(AccessModifier.Virtual, "InstallUISequence/ExecuteAction")) { Action="ExecuteAction", Sequence=1300, SequenceTable=SequenceTable.InstallUISequence }, |
263 | 263 | ||
264 | // InstallExecuteSequence | 264 | // InstallExecuteSequence |
265 | new WixActionSymbol(null, new Identifier(AccessModifier.Global, "InstallExecuteSequence/FindRelatedProducts")) { Action="FindRelatedProducts", Sequence=25, SequenceTable=SequenceTable.InstallExecuteSequence, Overridable = true }, | 265 | new WixActionSymbol(null, new Identifier(AccessModifier.Virtual, "InstallExecuteSequence/FindRelatedProducts")) { Action="FindRelatedProducts", Sequence=25, SequenceTable=SequenceTable.InstallExecuteSequence }, |
266 | new WixActionSymbol(null, new Identifier(AccessModifier.Global, "InstallExecuteSequence/AppSearch")) { Action="AppSearch", Sequence=50, SequenceTable=SequenceTable.InstallExecuteSequence, Overridable = true }, | 266 | new WixActionSymbol(null, new Identifier(AccessModifier.Virtual, "InstallExecuteSequence/AppSearch")) { Action="AppSearch", Sequence=50, SequenceTable=SequenceTable.InstallExecuteSequence }, |
267 | new WixActionSymbol(null, new Identifier(AccessModifier.Global, "InstallExecuteSequence/LaunchConditions")) { Action="LaunchConditions", Sequence=100, SequenceTable=SequenceTable.InstallExecuteSequence, Overridable = true }, | 267 | new WixActionSymbol(null, new Identifier(AccessModifier.Virtual, "InstallExecuteSequence/LaunchConditions")) { Action="LaunchConditions", Sequence=100, SequenceTable=SequenceTable.InstallExecuteSequence }, |
268 | new WixActionSymbol(null, new Identifier(AccessModifier.Global, "InstallExecuteSequence/CCPSearch")) { Action="CCPSearch", Sequence=500, SequenceTable=SequenceTable.InstallExecuteSequence, Overridable = true, Condition="NOT Installed" }, | 268 | new WixActionSymbol(null, new Identifier(AccessModifier.Virtual, "InstallExecuteSequence/CCPSearch")) { Action="CCPSearch", Sequence=500, SequenceTable=SequenceTable.InstallExecuteSequence, Condition="NOT Installed" }, |
269 | new WixActionSymbol(null, new Identifier(AccessModifier.Global, "InstallExecuteSequence/RMCCPSearch")) { Action="RMCCPSearch", Sequence=600, SequenceTable=SequenceTable.InstallExecuteSequence, Overridable = true, Condition="NOT Installed" }, | 269 | new WixActionSymbol(null, new Identifier(AccessModifier.Virtual, "InstallExecuteSequence/RMCCPSearch")) { Action="RMCCPSearch", Sequence=600, SequenceTable=SequenceTable.InstallExecuteSequence, Condition="NOT Installed" }, |
270 | new WixActionSymbol(null, new Identifier(AccessModifier.Global, "InstallExecuteSequence/ValidateProductID")) { Action="ValidateProductID", Sequence=700, SequenceTable=SequenceTable.InstallExecuteSequence, Overridable = true }, | 270 | new WixActionSymbol(null, new Identifier(AccessModifier.Virtual, "InstallExecuteSequence/ValidateProductID")) { Action="ValidateProductID", Sequence=700, SequenceTable=SequenceTable.InstallExecuteSequence }, |
271 | new WixActionSymbol(null, new Identifier(AccessModifier.Global, "InstallExecuteSequence/CostInitialize")) { Action="CostInitialize", Sequence=800, SequenceTable=SequenceTable.InstallExecuteSequence, Overridable = true }, | 271 | new WixActionSymbol(null, new Identifier(AccessModifier.Virtual, "InstallExecuteSequence/CostInitialize")) { Action="CostInitialize", Sequence=800, SequenceTable=SequenceTable.InstallExecuteSequence }, |
272 | new WixActionSymbol(null, new Identifier(AccessModifier.Global, "InstallExecuteSequence/FileCost")) { Action="FileCost", Sequence=900, SequenceTable=SequenceTable.InstallExecuteSequence, Overridable = true }, | 272 | new WixActionSymbol(null, new Identifier(AccessModifier.Virtual, "InstallExecuteSequence/FileCost")) { Action="FileCost", Sequence=900, SequenceTable=SequenceTable.InstallExecuteSequence }, |
273 | new WixActionSymbol(null, new Identifier(AccessModifier.Global, "InstallExecuteSequence/IsolateComponents")) { Action="IsolateComponents", Sequence=950, SequenceTable=SequenceTable.InstallExecuteSequence, Overridable = true }, | 273 | new WixActionSymbol(null, new Identifier(AccessModifier.Virtual, "InstallExecuteSequence/IsolateComponents")) { Action="IsolateComponents", Sequence=950, SequenceTable=SequenceTable.InstallExecuteSequence }, |
274 | new WixActionSymbol(null, new Identifier(AccessModifier.Global, "InstallExecuteSequence/CostFinalize")) { Action="CostFinalize", Sequence=1000, SequenceTable=SequenceTable.InstallExecuteSequence, Overridable = true }, | 274 | new WixActionSymbol(null, new Identifier(AccessModifier.Virtual, "InstallExecuteSequence/CostFinalize")) { Action="CostFinalize", Sequence=1000, SequenceTable=SequenceTable.InstallExecuteSequence }, |
275 | new WixActionSymbol(null, new Identifier(AccessModifier.Global, "InstallExecuteSequence/SetODBCFolders")) { Action="SetODBCFolders", Sequence=1100, SequenceTable=SequenceTable.InstallExecuteSequence, Overridable = true }, | 275 | new WixActionSymbol(null, new Identifier(AccessModifier.Virtual, "InstallExecuteSequence/SetODBCFolders")) { Action="SetODBCFolders", Sequence=1100, SequenceTable=SequenceTable.InstallExecuteSequence }, |
276 | new WixActionSymbol(null, new Identifier(AccessModifier.Global, "InstallExecuteSequence/MigrateFeatureStates")) { Action="MigrateFeatureStates", Sequence=1200, SequenceTable=SequenceTable.InstallExecuteSequence, Overridable = true }, | 276 | new WixActionSymbol(null, new Identifier(AccessModifier.Virtual, "InstallExecuteSequence/MigrateFeatureStates")) { Action="MigrateFeatureStates", Sequence=1200, SequenceTable=SequenceTable.InstallExecuteSequence }, |
277 | new WixActionSymbol(null, new Identifier(AccessModifier.Global, "InstallExecuteSequence/InstallValidate")) { Action="InstallValidate", Sequence=1400, SequenceTable=SequenceTable.InstallExecuteSequence, Overridable = true }, | 277 | new WixActionSymbol(null, new Identifier(AccessModifier.Virtual, "InstallExecuteSequence/InstallValidate")) { Action="InstallValidate", Sequence=1400, SequenceTable=SequenceTable.InstallExecuteSequence }, |
278 | new WixActionSymbol(null, new Identifier(AccessModifier.Global, "InstallExecuteSequence/InstallInitialize")) { Action="InstallInitialize", Sequence=1500, SequenceTable=SequenceTable.InstallExecuteSequence, Overridable = true }, | 278 | new WixActionSymbol(null, new Identifier(AccessModifier.Virtual, "InstallExecuteSequence/InstallInitialize")) { Action="InstallInitialize", Sequence=1500, SequenceTable=SequenceTable.InstallExecuteSequence }, |
279 | new WixActionSymbol(null, new Identifier(AccessModifier.Global, "InstallExecuteSequence/AllocateRegistrySpace")) { Action="AllocateRegistrySpace", Sequence=1550, SequenceTable=SequenceTable.InstallExecuteSequence, Overridable = true }, | 279 | new WixActionSymbol(null, new Identifier(AccessModifier.Virtual, "InstallExecuteSequence/AllocateRegistrySpace")) { Action="AllocateRegistrySpace", Sequence=1550, SequenceTable=SequenceTable.InstallExecuteSequence }, |
280 | new WixActionSymbol(null, new Identifier(AccessModifier.Global, "InstallExecuteSequence/ProcessComponents")) { Action="ProcessComponents", Sequence=1600, SequenceTable=SequenceTable.InstallExecuteSequence, Overridable = true }, | 280 | new WixActionSymbol(null, new Identifier(AccessModifier.Virtual, "InstallExecuteSequence/ProcessComponents")) { Action="ProcessComponents", Sequence=1600, SequenceTable=SequenceTable.InstallExecuteSequence }, |
281 | new WixActionSymbol(null, new Identifier(AccessModifier.Global, "InstallExecuteSequence/UnpublishComponents")) { Action="UnpublishComponents", Sequence=1700, SequenceTable=SequenceTable.InstallExecuteSequence, Overridable = true }, | 281 | new WixActionSymbol(null, new Identifier(AccessModifier.Virtual, "InstallExecuteSequence/UnpublishComponents")) { Action="UnpublishComponents", Sequence=1700, SequenceTable=SequenceTable.InstallExecuteSequence }, |
282 | new WixActionSymbol(null, new Identifier(AccessModifier.Global, "InstallExecuteSequence/MsiUnpublishAssemblies")) { Action="MsiUnpublishAssemblies", Sequence=1750, SequenceTable=SequenceTable.InstallExecuteSequence, Overridable = true }, | 282 | new WixActionSymbol(null, new Identifier(AccessModifier.Virtual, "InstallExecuteSequence/MsiUnpublishAssemblies")) { Action="MsiUnpublishAssemblies", Sequence=1750, SequenceTable=SequenceTable.InstallExecuteSequence }, |
283 | new WixActionSymbol(null, new Identifier(AccessModifier.Global, "InstallExecuteSequence/UnpublishFeatures")) { Action="UnpublishFeatures", Sequence=1800, SequenceTable=SequenceTable.InstallExecuteSequence, Overridable = true }, | 283 | new WixActionSymbol(null, new Identifier(AccessModifier.Virtual, "InstallExecuteSequence/UnpublishFeatures")) { Action="UnpublishFeatures", Sequence=1800, SequenceTable=SequenceTable.InstallExecuteSequence }, |
284 | new WixActionSymbol(null, new Identifier(AccessModifier.Global, "InstallExecuteSequence/StopServices")) { Action="StopServices", Sequence=1900, SequenceTable=SequenceTable.InstallExecuteSequence, Overridable = true, Condition="VersionNT" }, | 284 | new WixActionSymbol(null, new Identifier(AccessModifier.Virtual, "InstallExecuteSequence/StopServices")) { Action="StopServices", Sequence=1900, SequenceTable=SequenceTable.InstallExecuteSequence, Condition="VersionNT" }, |
285 | new WixActionSymbol(null, new Identifier(AccessModifier.Global, "InstallExecuteSequence/DeleteServices")) { Action="DeleteServices", Sequence=2000, SequenceTable=SequenceTable.InstallExecuteSequence, Overridable = true, Condition="VersionNT" }, | 285 | new WixActionSymbol(null, new Identifier(AccessModifier.Virtual, "InstallExecuteSequence/DeleteServices")) { Action="DeleteServices", Sequence=2000, SequenceTable=SequenceTable.InstallExecuteSequence, Condition="VersionNT" }, |
286 | new WixActionSymbol(null, new Identifier(AccessModifier.Global, "InstallExecuteSequence/UnregisterComPlus")) { Action="UnregisterComPlus", Sequence=2100, SequenceTable=SequenceTable.InstallExecuteSequence, Overridable = true }, | 286 | new WixActionSymbol(null, new Identifier(AccessModifier.Virtual, "InstallExecuteSequence/UnregisterComPlus")) { Action="UnregisterComPlus", Sequence=2100, SequenceTable=SequenceTable.InstallExecuteSequence }, |
287 | new WixActionSymbol(null, new Identifier(AccessModifier.Global, "InstallExecuteSequence/SelfUnregModules")) { Action="SelfUnregModules", Sequence=2200, SequenceTable=SequenceTable.InstallExecuteSequence, Overridable = true }, | 287 | new WixActionSymbol(null, new Identifier(AccessModifier.Virtual, "InstallExecuteSequence/SelfUnregModules")) { Action="SelfUnregModules", Sequence=2200, SequenceTable=SequenceTable.InstallExecuteSequence }, |
288 | new WixActionSymbol(null, new Identifier(AccessModifier.Global, "InstallExecuteSequence/UnregisterTypeLibraries")) { Action="UnregisterTypeLibraries", Sequence=2300, SequenceTable=SequenceTable.InstallExecuteSequence, Overridable = true }, | 288 | new WixActionSymbol(null, new Identifier(AccessModifier.Virtual, "InstallExecuteSequence/UnregisterTypeLibraries")) { Action="UnregisterTypeLibraries", Sequence=2300, SequenceTable=SequenceTable.InstallExecuteSequence }, |
289 | new WixActionSymbol(null, new Identifier(AccessModifier.Global, "InstallExecuteSequence/RemoveODBC")) { Action="RemoveODBC", Sequence=2400, SequenceTable=SequenceTable.InstallExecuteSequence, Overridable = true }, | 289 | new WixActionSymbol(null, new Identifier(AccessModifier.Virtual, "InstallExecuteSequence/RemoveODBC")) { Action="RemoveODBC", Sequence=2400, SequenceTable=SequenceTable.InstallExecuteSequence }, |
290 | new WixActionSymbol(null, new Identifier(AccessModifier.Global, "InstallExecuteSequence/UnregisterFonts")) { Action="UnregisterFonts", Sequence=2500, SequenceTable=SequenceTable.InstallExecuteSequence, Overridable = true }, | 290 | new WixActionSymbol(null, new Identifier(AccessModifier.Virtual, "InstallExecuteSequence/UnregisterFonts")) { Action="UnregisterFonts", Sequence=2500, SequenceTable=SequenceTable.InstallExecuteSequence }, |
291 | new WixActionSymbol(null, new Identifier(AccessModifier.Global, "InstallExecuteSequence/RemoveRegistryValues")) { Action="RemoveRegistryValues", Sequence=2600, SequenceTable=SequenceTable.InstallExecuteSequence, Overridable = true }, | 291 | new WixActionSymbol(null, new Identifier(AccessModifier.Virtual, "InstallExecuteSequence/RemoveRegistryValues")) { Action="RemoveRegistryValues", Sequence=2600, SequenceTable=SequenceTable.InstallExecuteSequence }, |
292 | new WixActionSymbol(null, new Identifier(AccessModifier.Global, "InstallExecuteSequence/UnregisterClassInfo")) { Action="UnregisterClassInfo", Sequence=2700, SequenceTable=SequenceTable.InstallExecuteSequence, Overridable = true }, | 292 | new WixActionSymbol(null, new Identifier(AccessModifier.Virtual, "InstallExecuteSequence/UnregisterClassInfo")) { Action="UnregisterClassInfo", Sequence=2700, SequenceTable=SequenceTable.InstallExecuteSequence }, |
293 | new WixActionSymbol(null, new Identifier(AccessModifier.Global, "InstallExecuteSequence/UnregisterExtensionInfo")) { Action="UnregisterExtensionInfo", Sequence=2800, SequenceTable=SequenceTable.InstallExecuteSequence, Overridable = true }, | 293 | new WixActionSymbol(null, new Identifier(AccessModifier.Virtual, "InstallExecuteSequence/UnregisterExtensionInfo")) { Action="UnregisterExtensionInfo", Sequence=2800, SequenceTable=SequenceTable.InstallExecuteSequence }, |
294 | new WixActionSymbol(null, new Identifier(AccessModifier.Global, "InstallExecuteSequence/UnregisterProgIdInfo")) { Action="UnregisterProgIdInfo", Sequence=2900, SequenceTable=SequenceTable.InstallExecuteSequence, Overridable = true }, | 294 | new WixActionSymbol(null, new Identifier(AccessModifier.Virtual, "InstallExecuteSequence/UnregisterProgIdInfo")) { Action="UnregisterProgIdInfo", Sequence=2900, SequenceTable=SequenceTable.InstallExecuteSequence }, |
295 | new WixActionSymbol(null, new Identifier(AccessModifier.Global, "InstallExecuteSequence/UnregisterMIMEInfo")) { Action="UnregisterMIMEInfo", Sequence=3000, SequenceTable=SequenceTable.InstallExecuteSequence, Overridable = true }, | 295 | new WixActionSymbol(null, new Identifier(AccessModifier.Virtual, "InstallExecuteSequence/UnregisterMIMEInfo")) { Action="UnregisterMIMEInfo", Sequence=3000, SequenceTable=SequenceTable.InstallExecuteSequence }, |
296 | new WixActionSymbol(null, new Identifier(AccessModifier.Global, "InstallExecuteSequence/RemoveIniValues")) { Action="RemoveIniValues", Sequence=3100, SequenceTable=SequenceTable.InstallExecuteSequence, Overridable = true }, | 296 | new WixActionSymbol(null, new Identifier(AccessModifier.Virtual, "InstallExecuteSequence/RemoveIniValues")) { Action="RemoveIniValues", Sequence=3100, SequenceTable=SequenceTable.InstallExecuteSequence }, |
297 | new WixActionSymbol(null, new Identifier(AccessModifier.Global, "InstallExecuteSequence/RemoveShortcuts")) { Action="RemoveShortcuts", Sequence=3200, SequenceTable=SequenceTable.InstallExecuteSequence, Overridable = true }, | 297 | new WixActionSymbol(null, new Identifier(AccessModifier.Virtual, "InstallExecuteSequence/RemoveShortcuts")) { Action="RemoveShortcuts", Sequence=3200, SequenceTable=SequenceTable.InstallExecuteSequence }, |
298 | new WixActionSymbol(null, new Identifier(AccessModifier.Global, "InstallExecuteSequence/RemoveEnvironmentStrings")) { Action="RemoveEnvironmentStrings", Sequence=3300, SequenceTable=SequenceTable.InstallExecuteSequence, Overridable = true }, | 298 | new WixActionSymbol(null, new Identifier(AccessModifier.Virtual, "InstallExecuteSequence/RemoveEnvironmentStrings")) { Action="RemoveEnvironmentStrings", Sequence=3300, SequenceTable=SequenceTable.InstallExecuteSequence }, |
299 | new WixActionSymbol(null, new Identifier(AccessModifier.Global, "InstallExecuteSequence/RemoveDuplicateFiles")) { Action="RemoveDuplicateFiles", Sequence=3400, SequenceTable=SequenceTable.InstallExecuteSequence, Overridable = true }, | 299 | new WixActionSymbol(null, new Identifier(AccessModifier.Virtual, "InstallExecuteSequence/RemoveDuplicateFiles")) { Action="RemoveDuplicateFiles", Sequence=3400, SequenceTable=SequenceTable.InstallExecuteSequence }, |
300 | new WixActionSymbol(null, new Identifier(AccessModifier.Global, "InstallExecuteSequence/RemoveFiles")) { Action="RemoveFiles", Sequence=3500, SequenceTable=SequenceTable.InstallExecuteSequence, Overridable = true }, | 300 | new WixActionSymbol(null, new Identifier(AccessModifier.Virtual, "InstallExecuteSequence/RemoveFiles")) { Action="RemoveFiles", Sequence=3500, SequenceTable=SequenceTable.InstallExecuteSequence }, |
301 | new WixActionSymbol(null, new Identifier(AccessModifier.Global, "InstallExecuteSequence/RemoveFolders")) { Action="RemoveFolders", Sequence=3600, SequenceTable=SequenceTable.InstallExecuteSequence, Overridable = true }, | 301 | new WixActionSymbol(null, new Identifier(AccessModifier.Virtual, "InstallExecuteSequence/RemoveFolders")) { Action="RemoveFolders", Sequence=3600, SequenceTable=SequenceTable.InstallExecuteSequence }, |
302 | new WixActionSymbol(null, new Identifier(AccessModifier.Global, "InstallExecuteSequence/CreateFolders")) { Action="CreateFolders", Sequence=3700, SequenceTable=SequenceTable.InstallExecuteSequence, Overridable = true }, | 302 | new WixActionSymbol(null, new Identifier(AccessModifier.Virtual, "InstallExecuteSequence/CreateFolders")) { Action="CreateFolders", Sequence=3700, SequenceTable=SequenceTable.InstallExecuteSequence }, |
303 | new WixActionSymbol(null, new Identifier(AccessModifier.Global, "InstallExecuteSequence/MoveFiles")) { Action="MoveFiles", Sequence=3800, SequenceTable=SequenceTable.InstallExecuteSequence, Overridable = true }, | 303 | new WixActionSymbol(null, new Identifier(AccessModifier.Virtual, "InstallExecuteSequence/MoveFiles")) { Action="MoveFiles", Sequence=3800, SequenceTable=SequenceTable.InstallExecuteSequence }, |
304 | new WixActionSymbol(null, new Identifier(AccessModifier.Global, "InstallExecuteSequence/InstallFiles")) { Action="InstallFiles", Sequence=4000, SequenceTable=SequenceTable.InstallExecuteSequence, Overridable = true }, | 304 | new WixActionSymbol(null, new Identifier(AccessModifier.Virtual, "InstallExecuteSequence/InstallFiles")) { Action="InstallFiles", Sequence=4000, SequenceTable=SequenceTable.InstallExecuteSequence }, |
305 | new WixActionSymbol(null, new Identifier(AccessModifier.Global, "InstallExecuteSequence/PatchFiles")) { Action="PatchFiles", Sequence=4090, SequenceTable=SequenceTable.InstallExecuteSequence, Overridable = true }, | 305 | new WixActionSymbol(null, new Identifier(AccessModifier.Virtual, "InstallExecuteSequence/PatchFiles")) { Action="PatchFiles", Sequence=4090, SequenceTable=SequenceTable.InstallExecuteSequence }, |
306 | new WixActionSymbol(null, new Identifier(AccessModifier.Global, "InstallExecuteSequence/DuplicateFiles")) { Action="DuplicateFiles", Sequence=4210, SequenceTable=SequenceTable.InstallExecuteSequence, Overridable = true }, | 306 | new WixActionSymbol(null, new Identifier(AccessModifier.Virtual, "InstallExecuteSequence/DuplicateFiles")) { Action="DuplicateFiles", Sequence=4210, SequenceTable=SequenceTable.InstallExecuteSequence }, |
307 | new WixActionSymbol(null, new Identifier(AccessModifier.Global, "InstallExecuteSequence/BindImage")) { Action="BindImage", Sequence=4300, SequenceTable=SequenceTable.InstallExecuteSequence, Overridable = true }, | 307 | new WixActionSymbol(null, new Identifier(AccessModifier.Virtual, "InstallExecuteSequence/BindImage")) { Action="BindImage", Sequence=4300, SequenceTable=SequenceTable.InstallExecuteSequence }, |
308 | new WixActionSymbol(null, new Identifier(AccessModifier.Global, "InstallExecuteSequence/CreateShortcuts")) { Action="CreateShortcuts", Sequence=4500, SequenceTable=SequenceTable.InstallExecuteSequence, Overridable = true }, | 308 | new WixActionSymbol(null, new Identifier(AccessModifier.Virtual, "InstallExecuteSequence/CreateShortcuts")) { Action="CreateShortcuts", Sequence=4500, SequenceTable=SequenceTable.InstallExecuteSequence }, |
309 | new WixActionSymbol(null, new Identifier(AccessModifier.Global, "InstallExecuteSequence/RegisterClassInfo")) { Action="RegisterClassInfo", Sequence=4600, SequenceTable=SequenceTable.InstallExecuteSequence, Overridable = true }, | 309 | new WixActionSymbol(null, new Identifier(AccessModifier.Virtual, "InstallExecuteSequence/RegisterClassInfo")) { Action="RegisterClassInfo", Sequence=4600, SequenceTable=SequenceTable.InstallExecuteSequence }, |
310 | new WixActionSymbol(null, new Identifier(AccessModifier.Global, "InstallExecuteSequence/RegisterExtensionInfo")) { Action="RegisterExtensionInfo", Sequence=4700, SequenceTable=SequenceTable.InstallExecuteSequence, Overridable = true }, | 310 | new WixActionSymbol(null, new Identifier(AccessModifier.Virtual, "InstallExecuteSequence/RegisterExtensionInfo")) { Action="RegisterExtensionInfo", Sequence=4700, SequenceTable=SequenceTable.InstallExecuteSequence }, |
311 | new WixActionSymbol(null, new Identifier(AccessModifier.Global, "InstallExecuteSequence/RegisterProgIdInfo")) { Action="RegisterProgIdInfo", Sequence=4800, SequenceTable=SequenceTable.InstallExecuteSequence, Overridable = true }, | 311 | new WixActionSymbol(null, new Identifier(AccessModifier.Virtual, "InstallExecuteSequence/RegisterProgIdInfo")) { Action="RegisterProgIdInfo", Sequence=4800, SequenceTable=SequenceTable.InstallExecuteSequence }, |
312 | new WixActionSymbol(null, new Identifier(AccessModifier.Global, "InstallExecuteSequence/RegisterMIMEInfo")) { Action="RegisterMIMEInfo", Sequence=4900, SequenceTable=SequenceTable.InstallExecuteSequence, Overridable = true }, | 312 | new WixActionSymbol(null, new Identifier(AccessModifier.Virtual, "InstallExecuteSequence/RegisterMIMEInfo")) { Action="RegisterMIMEInfo", Sequence=4900, SequenceTable=SequenceTable.InstallExecuteSequence }, |
313 | new WixActionSymbol(null, new Identifier(AccessModifier.Global, "InstallExecuteSequence/WriteRegistryValues")) { Action="WriteRegistryValues", Sequence=5000, SequenceTable=SequenceTable.InstallExecuteSequence, Overridable = true }, | 313 | new WixActionSymbol(null, new Identifier(AccessModifier.Virtual, "InstallExecuteSequence/WriteRegistryValues")) { Action="WriteRegistryValues", Sequence=5000, SequenceTable=SequenceTable.InstallExecuteSequence }, |
314 | new WixActionSymbol(null, new Identifier(AccessModifier.Global, "InstallExecuteSequence/WriteIniValues")) { Action="WriteIniValues", Sequence=5100, SequenceTable=SequenceTable.InstallExecuteSequence, Overridable = true }, | 314 | new WixActionSymbol(null, new Identifier(AccessModifier.Virtual, "InstallExecuteSequence/WriteIniValues")) { Action="WriteIniValues", Sequence=5100, SequenceTable=SequenceTable.InstallExecuteSequence }, |
315 | new WixActionSymbol(null, new Identifier(AccessModifier.Global, "InstallExecuteSequence/WriteEnvironmentStrings")) { Action="WriteEnvironmentStrings", Sequence=5200, SequenceTable=SequenceTable.InstallExecuteSequence, Overridable = true }, | 315 | new WixActionSymbol(null, new Identifier(AccessModifier.Virtual, "InstallExecuteSequence/WriteEnvironmentStrings")) { Action="WriteEnvironmentStrings", Sequence=5200, SequenceTable=SequenceTable.InstallExecuteSequence }, |
316 | new WixActionSymbol(null, new Identifier(AccessModifier.Global, "InstallExecuteSequence/RegisterFonts")) { Action="RegisterFonts", Sequence=5300, SequenceTable=SequenceTable.InstallExecuteSequence, Overridable = true }, | 316 | new WixActionSymbol(null, new Identifier(AccessModifier.Virtual, "InstallExecuteSequence/RegisterFonts")) { Action="RegisterFonts", Sequence=5300, SequenceTable=SequenceTable.InstallExecuteSequence }, |
317 | new WixActionSymbol(null, new Identifier(AccessModifier.Global, "InstallExecuteSequence/InstallODBC")) { Action="InstallODBC", Sequence=5400, SequenceTable=SequenceTable.InstallExecuteSequence, Overridable = true }, | 317 | new WixActionSymbol(null, new Identifier(AccessModifier.Virtual, "InstallExecuteSequence/InstallODBC")) { Action="InstallODBC", Sequence=5400, SequenceTable=SequenceTable.InstallExecuteSequence }, |
318 | new WixActionSymbol(null, new Identifier(AccessModifier.Global, "InstallExecuteSequence/RegisterTypeLibraries")) { Action="RegisterTypeLibraries", Sequence=5500, SequenceTable=SequenceTable.InstallExecuteSequence, Overridable = true }, | 318 | new WixActionSymbol(null, new Identifier(AccessModifier.Virtual, "InstallExecuteSequence/RegisterTypeLibraries")) { Action="RegisterTypeLibraries", Sequence=5500, SequenceTable=SequenceTable.InstallExecuteSequence }, |
319 | new WixActionSymbol(null, new Identifier(AccessModifier.Global, "InstallExecuteSequence/SelfRegModules")) { Action="SelfRegModules", Sequence=5600, SequenceTable=SequenceTable.InstallExecuteSequence, Overridable = true }, | 319 | new WixActionSymbol(null, new Identifier(AccessModifier.Virtual, "InstallExecuteSequence/SelfRegModules")) { Action="SelfRegModules", Sequence=5600, SequenceTable=SequenceTable.InstallExecuteSequence }, |
320 | new WixActionSymbol(null, new Identifier(AccessModifier.Global, "InstallExecuteSequence/RegisterComPlus")) { Action="RegisterComPlus", Sequence=5700, SequenceTable=SequenceTable.InstallExecuteSequence, Overridable = true }, | 320 | new WixActionSymbol(null, new Identifier(AccessModifier.Virtual, "InstallExecuteSequence/RegisterComPlus")) { Action="RegisterComPlus", Sequence=5700, SequenceTable=SequenceTable.InstallExecuteSequence }, |
321 | new WixActionSymbol(null, new Identifier(AccessModifier.Global, "InstallExecuteSequence/InstallServices")) { Action="InstallServices", Sequence=5800, SequenceTable=SequenceTable.InstallExecuteSequence, Overridable = true, Condition="VersionNT" }, | 321 | new WixActionSymbol(null, new Identifier(AccessModifier.Virtual, "InstallExecuteSequence/InstallServices")) { Action="InstallServices", Sequence=5800, SequenceTable=SequenceTable.InstallExecuteSequence, Condition="VersionNT" }, |
322 | new WixActionSymbol(null, new Identifier(AccessModifier.Global, "InstallExecuteSequence/MsiConfigureServices")) { Action="MsiConfigureServices", Sequence=5850, SequenceTable=SequenceTable.InstallExecuteSequence, Overridable = true, Condition="VersionNT>=600" }, | 322 | new WixActionSymbol(null, new Identifier(AccessModifier.Virtual, "InstallExecuteSequence/MsiConfigureServices")) { Action="MsiConfigureServices", Sequence=5850, SequenceTable=SequenceTable.InstallExecuteSequence, Condition="VersionNT>=600" }, |
323 | new WixActionSymbol(null, new Identifier(AccessModifier.Global, "InstallExecuteSequence/StartServices")) { Action="StartServices", Sequence=5900, SequenceTable=SequenceTable.InstallExecuteSequence, Overridable = true, Condition="VersionNT" }, | 323 | new WixActionSymbol(null, new Identifier(AccessModifier.Virtual, "InstallExecuteSequence/StartServices")) { Action="StartServices", Sequence=5900, SequenceTable=SequenceTable.InstallExecuteSequence, Condition="VersionNT" }, |
324 | new WixActionSymbol(null, new Identifier(AccessModifier.Global, "InstallExecuteSequence/RegisterUser")) { Action="RegisterUser", Sequence=6000, SequenceTable=SequenceTable.InstallExecuteSequence, Overridable = true }, | 324 | new WixActionSymbol(null, new Identifier(AccessModifier.Virtual, "InstallExecuteSequence/RegisterUser")) { Action="RegisterUser", Sequence=6000, SequenceTable=SequenceTable.InstallExecuteSequence }, |
325 | new WixActionSymbol(null, new Identifier(AccessModifier.Global, "InstallExecuteSequence/RegisterProduct")) { Action="RegisterProduct", Sequence=6100, SequenceTable=SequenceTable.InstallExecuteSequence, Overridable = true }, | 325 | new WixActionSymbol(null, new Identifier(AccessModifier.Virtual, "InstallExecuteSequence/RegisterProduct")) { Action="RegisterProduct", Sequence=6100, SequenceTable=SequenceTable.InstallExecuteSequence }, |
326 | new WixActionSymbol(null, new Identifier(AccessModifier.Global, "InstallExecuteSequence/PublishComponents")) { Action="PublishComponents", Sequence=6200, SequenceTable=SequenceTable.InstallExecuteSequence, Overridable = true }, | 326 | new WixActionSymbol(null, new Identifier(AccessModifier.Virtual, "InstallExecuteSequence/PublishComponents")) { Action="PublishComponents", Sequence=6200, SequenceTable=SequenceTable.InstallExecuteSequence }, |
327 | new WixActionSymbol(null, new Identifier(AccessModifier.Global, "InstallExecuteSequence/MsiPublishAssemblies")) { Action="MsiPublishAssemblies", Sequence=6250, SequenceTable=SequenceTable.InstallExecuteSequence, Overridable = true }, | 327 | new WixActionSymbol(null, new Identifier(AccessModifier.Virtual, "InstallExecuteSequence/MsiPublishAssemblies")) { Action="MsiPublishAssemblies", Sequence=6250, SequenceTable=SequenceTable.InstallExecuteSequence }, |
328 | new WixActionSymbol(null, new Identifier(AccessModifier.Global, "InstallExecuteSequence/PublishFeatures")) { Action="PublishFeatures", Sequence=6300, SequenceTable=SequenceTable.InstallExecuteSequence, Overridable = true }, | 328 | new WixActionSymbol(null, new Identifier(AccessModifier.Virtual, "InstallExecuteSequence/PublishFeatures")) { Action="PublishFeatures", Sequence=6300, SequenceTable=SequenceTable.InstallExecuteSequence }, |
329 | new WixActionSymbol(null, new Identifier(AccessModifier.Global, "InstallExecuteSequence/PublishProduct")) { Action="PublishProduct", Sequence=6400, SequenceTable=SequenceTable.InstallExecuteSequence, Overridable = true }, | 329 | new WixActionSymbol(null, new Identifier(AccessModifier.Virtual, "InstallExecuteSequence/PublishProduct")) { Action="PublishProduct", Sequence=6400, SequenceTable=SequenceTable.InstallExecuteSequence }, |
330 | new WixActionSymbol(null, new Identifier(AccessModifier.Global, "InstallExecuteSequence/InstallExecute")) { Action="InstallExecute", Sequence=6500, SequenceTable=SequenceTable.InstallExecuteSequence, Overridable = true, Condition="NOT Installed" }, | 330 | new WixActionSymbol(null, new Identifier(AccessModifier.Virtual, "InstallExecuteSequence/InstallExecute")) { Action="InstallExecute", Sequence=6500, SequenceTable=SequenceTable.InstallExecuteSequence, Condition="NOT Installed" }, |
331 | new WixActionSymbol(null, new Identifier(AccessModifier.Global, "InstallExecuteSequence/InstallExecuteAgain")) { Action="InstallExecuteAgain", Sequence=6550, SequenceTable=SequenceTable.InstallExecuteSequence, Overridable = true, Condition="NOT Installed" }, | 331 | new WixActionSymbol(null, new Identifier(AccessModifier.Virtual, "InstallExecuteSequence/InstallExecuteAgain")) { Action="InstallExecuteAgain", Sequence=6550, SequenceTable=SequenceTable.InstallExecuteSequence, Condition="NOT Installed" }, |
332 | new WixActionSymbol(null, new Identifier(AccessModifier.Global, "InstallExecuteSequence/InstallFinalize")) { Action="InstallFinalize", Sequence=6600, SequenceTable=SequenceTable.InstallExecuteSequence, Overridable = true }, | 332 | new WixActionSymbol(null, new Identifier(AccessModifier.Virtual, "InstallExecuteSequence/InstallFinalize")) { Action="InstallFinalize", Sequence=6600, SequenceTable=SequenceTable.InstallExecuteSequence }, |
333 | }; | 333 | }; |
334 | 334 | ||
335 | var standardDirectories = new[] | 335 | var standardDirectories = new[] |
336 | { | 336 | { |
337 | new DirectorySymbol(null, new Identifier(AccessModifier.Global, "TARGETDIR")) { Name = "SourceDir" }, | 337 | new DirectorySymbol(null, new Identifier(AccessModifier.Virtual, "TARGETDIR")) { Name = "SourceDir" }, |
338 | new DirectorySymbol(null, new Identifier(AccessModifier.Global, "AdminToolsFolder")) { Name = "Admin" }, | 338 | new DirectorySymbol(null, new Identifier(AccessModifier.Virtual, "AdminToolsFolder")) { Name = "Admin" }, |
339 | new DirectorySymbol(null, new Identifier(AccessModifier.Global, "AppDataFolder")) { Name = "AppData" }, | 339 | new DirectorySymbol(null, new Identifier(AccessModifier.Virtual, "AppDataFolder")) { Name = "AppData" }, |
340 | new DirectorySymbol(null, new Identifier(AccessModifier.Global, "CommonAppDataFolder")) { Name = "CommApp" }, | 340 | new DirectorySymbol(null, new Identifier(AccessModifier.Virtual, "CommonAppDataFolder")) { Name = "CommApp" }, |
341 | new DirectorySymbol(null, new Identifier(AccessModifier.Global, "CommonFilesFolder")) { Name = "CFiles" }, | 341 | new DirectorySymbol(null, new Identifier(AccessModifier.Virtual, "CommonFilesFolder")) { Name = "CFiles" }, |
342 | new DirectorySymbol(null, new Identifier(AccessModifier.Global, "CommonFiles64Folder")) { Name = "CFiles64" }, | 342 | new DirectorySymbol(null, new Identifier(AccessModifier.Virtual, "CommonFiles64Folder")) { Name = "CFiles64" }, |
343 | new DirectorySymbol(null, new Identifier(AccessModifier.Global, "CommonFiles6432Folder")) { Name = "." }, | 343 | new DirectorySymbol(null, new Identifier(AccessModifier.Virtual, "CommonFiles6432Folder")) { Name = "." }, |
344 | new DirectorySymbol(null, new Identifier(AccessModifier.Global, "DesktopFolder")) { Name = "Desktop" }, | 344 | new DirectorySymbol(null, new Identifier(AccessModifier.Virtual, "DesktopFolder")) { Name = "Desktop" }, |
345 | new DirectorySymbol(null, new Identifier(AccessModifier.Global, "FavoritesFolder")) { Name = "Favs" }, | 345 | new DirectorySymbol(null, new Identifier(AccessModifier.Virtual, "FavoritesFolder")) { Name = "Favs" }, |
346 | new DirectorySymbol(null, new Identifier(AccessModifier.Global, "FontsFolder")) { Name = "Fonts" }, | 346 | new DirectorySymbol(null, new Identifier(AccessModifier.Virtual, "FontsFolder")) { Name = "Fonts" }, |
347 | new DirectorySymbol(null, new Identifier(AccessModifier.Global, "LocalAppDataFolder")) { Name = "LocalApp" }, | 347 | new DirectorySymbol(null, new Identifier(AccessModifier.Virtual, "LocalAppDataFolder")) { Name = "LocalApp" }, |
348 | new DirectorySymbol(null, new Identifier(AccessModifier.Global, "MyPicturesFolder")) { Name = "Pictures" }, | 348 | new DirectorySymbol(null, new Identifier(AccessModifier.Virtual, "MyPicturesFolder")) { Name = "Pictures" }, |
349 | new DirectorySymbol(null, new Identifier(AccessModifier.Global, "NetHoodFolder")) { Name = "NetHood" }, | 349 | new DirectorySymbol(null, new Identifier(AccessModifier.Virtual, "NetHoodFolder")) { Name = "NetHood" }, |
350 | new DirectorySymbol(null, new Identifier(AccessModifier.Global, "PersonalFolder")) { Name = "Personal" }, | 350 | new DirectorySymbol(null, new Identifier(AccessModifier.Virtual, "PersonalFolder")) { Name = "Personal" }, |
351 | new DirectorySymbol(null, new Identifier(AccessModifier.Global, "PrintHoodFolder")) { Name = "Printers" }, | 351 | new DirectorySymbol(null, new Identifier(AccessModifier.Virtual, "PrintHoodFolder")) { Name = "Printers" }, |
352 | new DirectorySymbol(null, new Identifier(AccessModifier.Global, "ProgramFilesFolder")) { Name = "PFiles" }, | 352 | new DirectorySymbol(null, new Identifier(AccessModifier.Virtual, "ProgramFilesFolder")) { Name = "PFiles" }, |
353 | new DirectorySymbol(null, new Identifier(AccessModifier.Global, "ProgramFiles64Folder")) { Name = "PFiles64" }, | 353 | new DirectorySymbol(null, new Identifier(AccessModifier.Virtual, "ProgramFiles64Folder")) { Name = "PFiles64" }, |
354 | new DirectorySymbol(null, new Identifier(AccessModifier.Global, "ProgramFiles6432Folder")) { Name = "." }, | 354 | new DirectorySymbol(null, new Identifier(AccessModifier.Virtual, "ProgramFiles6432Folder")) { Name = "." }, |
355 | new DirectorySymbol(null, new Identifier(AccessModifier.Global, "ProgramMenuFolder")) { Name = "PMenu" }, | 355 | new DirectorySymbol(null, new Identifier(AccessModifier.Virtual, "ProgramMenuFolder")) { Name = "PMenu" }, |
356 | new DirectorySymbol(null, new Identifier(AccessModifier.Global, "RecentFolder")) { Name = "Recent" }, | 356 | new DirectorySymbol(null, new Identifier(AccessModifier.Virtual, "RecentFolder")) { Name = "Recent" }, |
357 | new DirectorySymbol(null, new Identifier(AccessModifier.Global, "SendToFolder")) { Name = "SendTo" }, | 357 | new DirectorySymbol(null, new Identifier(AccessModifier.Virtual, "SendToFolder")) { Name = "SendTo" }, |
358 | new DirectorySymbol(null, new Identifier(AccessModifier.Global, "StartMenuFolder")) { Name = "StrtMenu" }, | 358 | new DirectorySymbol(null, new Identifier(AccessModifier.Virtual, "StartMenuFolder")) { Name = "StrtMenu" }, |
359 | new DirectorySymbol(null, new Identifier(AccessModifier.Global, "StartupFolder")) { Name = "StartUp" }, | 359 | new DirectorySymbol(null, new Identifier(AccessModifier.Virtual, "StartupFolder")) { Name = "StartUp" }, |
360 | new DirectorySymbol(null, new Identifier(AccessModifier.Global, "SystemFolder")) { Name = "System" }, | 360 | new DirectorySymbol(null, new Identifier(AccessModifier.Virtual, "SystemFolder")) { Name = "System" }, |
361 | new DirectorySymbol(null, new Identifier(AccessModifier.Global, "System16Folder")) { Name = "System16" }, | 361 | new DirectorySymbol(null, new Identifier(AccessModifier.Virtual, "System16Folder")) { Name = "System16" }, |
362 | new DirectorySymbol(null, new Identifier(AccessModifier.Global, "System64Folder")) { Name = "System64" }, | 362 | new DirectorySymbol(null, new Identifier(AccessModifier.Virtual, "System64Folder")) { Name = "System64" }, |
363 | new DirectorySymbol(null, new Identifier(AccessModifier.Global, "System6432Folder")) { Name = "." }, | 363 | new DirectorySymbol(null, new Identifier(AccessModifier.Virtual, "System6432Folder")) { Name = "." }, |
364 | new DirectorySymbol(null, new Identifier(AccessModifier.Global, "TempFolder")) { Name = "Temp" }, | 364 | new DirectorySymbol(null, new Identifier(AccessModifier.Virtual, "TempFolder")) { Name = "Temp" }, |
365 | new DirectorySymbol(null, new Identifier(AccessModifier.Global, "TemplateFolder")) { Name = "Template" }, | 365 | new DirectorySymbol(null, new Identifier(AccessModifier.Virtual, "TemplateFolder")) { Name = "Template" }, |
366 | new DirectorySymbol(null, new Identifier(AccessModifier.Global, "WindowsFolder")) { Name = "Windows" }, | 366 | new DirectorySymbol(null, new Identifier(AccessModifier.Virtual, "WindowsFolder")) { Name = "Windows" }, |
367 | }; | 367 | }; |
368 | 368 | ||
369 | standardActionNames = new HashSet<string>(standardActions.Select(a => a.Action)); | 369 | standardActionNames = new HashSet<string>(standardActions.Select(a => a.Action)); |
diff --git a/src/api/wix/test/WixToolsetTest.Data/SerializeFixture.cs b/src/api/wix/test/WixToolsetTest.Data/SerializeFixture.cs index 8c8a23b4..29ce1985 100644 --- a/src/api/wix/test/WixToolsetTest.Data/SerializeFixture.cs +++ b/src/api/wix/test/WixToolsetTest.Data/SerializeFixture.cs | |||
@@ -31,6 +31,12 @@ namespace WixToolsetTest.Data | |||
31 | KeyPath = null, | 31 | KeyPath = null, |
32 | }); | 32 | }); |
33 | 33 | ||
34 | section.AddSymbol(new DirectorySymbol(sln, new Identifier(AccessModifier.Virtual, "TestFolder")) | ||
35 | { | ||
36 | ParentDirectoryRef = String.Empty, | ||
37 | Name = "Test Folder", | ||
38 | }); | ||
39 | |||
34 | var intermediate = new Intermediate("TestIntermediate", IntermediateLevels.Compiled, new[] { section }, null); | 40 | var intermediate = new Intermediate("TestIntermediate", IntermediateLevels.Compiled, new[] { section }, null); |
35 | 41 | ||
36 | intermediate.UpdateLevel(IntermediateLevels.Linked); | 42 | intermediate.UpdateLevel(IntermediateLevels.Linked); |
@@ -47,14 +53,21 @@ namespace WixToolsetTest.Data | |||
47 | Assert.True(loaded.HasLevel(IntermediateLevels.Linked)); | 53 | Assert.True(loaded.HasLevel(IntermediateLevels.Linked)); |
48 | Assert.True(loaded.HasLevel(IntermediateLevels.Resolved)); | 54 | Assert.True(loaded.HasLevel(IntermediateLevels.Resolved)); |
49 | 55 | ||
50 | var symbol = (ComponentSymbol)loaded.Sections.Single().Symbols.Single(); | 56 | var componentSymbol = loaded.Sections.Single().Symbols.OfType<ComponentSymbol>().Single(); |
57 | |||
58 | Assert.Equal("TestComponent", componentSymbol.Id.Id); | ||
59 | Assert.Equal(AccessModifier.Global, componentSymbol.Id.Access); | ||
60 | Assert.Equal(String.Empty, componentSymbol.ComponentId); | ||
61 | Assert.Equal("TestFolder", componentSymbol.DirectoryRef); | ||
62 | Assert.Equal(ComponentLocation.Either, componentSymbol.Location); | ||
63 | Assert.Null(componentSymbol.KeyPath); | ||
64 | |||
65 | var directorySymbol = loaded.Sections.Single().Symbols.OfType<DirectorySymbol>().Single(); | ||
51 | 66 | ||
52 | Assert.Equal("TestComponent", symbol.Id.Id); | 67 | Assert.Equal("TestFolder", directorySymbol.Id.Id); |
53 | Assert.Equal(AccessModifier.Global, symbol.Id.Access); | 68 | Assert.Equal(AccessModifier.Virtual, directorySymbol.Id.Access); |
54 | Assert.Equal(String.Empty, symbol.ComponentId); | 69 | Assert.Equal(String.Empty, directorySymbol.ParentDirectoryRef); |
55 | Assert.Equal("TestFolder", symbol.DirectoryRef); | 70 | Assert.Equal("Test Folder", directorySymbol.Name); |
56 | Assert.Equal(ComponentLocation.Either, symbol.Location); | ||
57 | Assert.Null(symbol.KeyPath); | ||
58 | } | 71 | } |
59 | finally | 72 | finally |
60 | { | 73 | { |
diff --git a/src/ext/UI/wixlib/WixUI_Minimal.wxs b/src/ext/UI/wixlib/WixUI_Minimal.wxs index 0c69d8f8..e6f3437a 100644 --- a/src/ext/UI/wixlib/WixUI_Minimal.wxs +++ b/src/ext/UI/wixlib/WixUI_Minimal.wxs | |||
@@ -58,8 +58,8 @@ Patch dialog sequence: | |||
58 | <Publish Dialog="VerifyReadyDlg" Control="Back" Event="NewDialog" Value="WelcomeDlg" Order="2" Condition="Installed AND PATCH" /> | 58 | <Publish Dialog="VerifyReadyDlg" Control="Back" Event="NewDialog" Value="WelcomeDlg" Order="2" Condition="Installed AND PATCH" /> |
59 | 59 | ||
60 | <InstallUISequence> | 60 | <InstallUISequence> |
61 | <Show Dialog="WelcomeDlg" Before="WelcomeEulaDlg" Condition="Installed AND PATCH" /> | 61 | <Show Dialog="override WelcomeDlg" Before="WelcomeEulaDlg" Condition="Installed AND PATCH" /> |
62 | <Show Dialog="WelcomeEulaDlg" Before="ProgressDlg" Condition="NOT Installed" /> | 62 | <Show Dialog="override WelcomeEulaDlg" Before="ProgressDlg" Condition="NOT Installed" /> |
63 | </InstallUISequence> | 63 | </InstallUISequence> |
64 | 64 | ||
65 | <Property Id="ARPNOMODIFY" Value="1" /> | 65 | <Property Id="ARPNOMODIFY" Value="1" /> |
diff --git a/src/wix/WixToolset.Core.WindowsInstaller/Bind/SequenceActionsCommand.cs b/src/wix/WixToolset.Core.WindowsInstaller/Bind/SequenceActionsCommand.cs index 39d5680b..3cda47ae 100644 --- a/src/wix/WixToolset.Core.WindowsInstaller/Bind/SequenceActionsCommand.cs +++ b/src/wix/WixToolset.Core.WindowsInstaller/Bind/SequenceActionsCommand.cs | |||
@@ -108,7 +108,7 @@ namespace WixToolset.Core.WindowsInstaller.Bind | |||
108 | // the binder. | 108 | // the binder. |
109 | if (requiredActionSymbols.TryGetValue(key, out var requiredActionSymbol)) | 109 | if (requiredActionSymbols.TryGetValue(key, out var requiredActionSymbol)) |
110 | { | 110 | { |
111 | if (requiredActionSymbol.Overridable) | 111 | if (requiredActionSymbol.Overridable || requiredActionSymbol.Id.Access == AccessModifier.Virtual) |
112 | { | 112 | { |
113 | this.Messaging.Write(WarningMessages.SuppressAction(suppressActionSymbol.SourceLineNumbers, suppressActionSymbol.Action, suppressActionSymbol.SequenceTable.ToString())); | 113 | this.Messaging.Write(WarningMessages.SuppressAction(suppressActionSymbol.SourceLineNumbers, suppressActionSymbol.Action, suppressActionSymbol.SequenceTable.ToString())); |
114 | if (null != requiredActionSymbol.SourceLineNumbers) | 114 | if (null != requiredActionSymbol.SourceLineNumbers) |
@@ -240,7 +240,7 @@ namespace WixToolset.Core.WindowsInstaller.Bind | |||
240 | // Schedule the relatively scheduled actions (by resolving the dependency trees). | 240 | // Schedule the relatively scheduled actions (by resolving the dependency trees). |
241 | var previousUsedSequence = 0; | 241 | var previousUsedSequence = 0; |
242 | var relativeActionSymbols = new List<WixActionSymbol>(); | 242 | var relativeActionSymbols = new List<WixActionSymbol>(); |
243 | for (int j = 0; j < absoluteActionSymbols.Count; j++) | 243 | for (var j = 0; j < absoluteActionSymbols.Count; j++) |
244 | { | 244 | { |
245 | var absoluteActionSymbol = absoluteActionSymbols[j]; | 245 | var absoluteActionSymbol = absoluteActionSymbols[j]; |
246 | 246 | ||
diff --git a/src/wix/WixToolset.Core/Compiler_Package.cs b/src/wix/WixToolset.Core/Compiler_Package.cs index c8a1ae59..bfc59c75 100644 --- a/src/wix/WixToolset.Core/Compiler_Package.cs +++ b/src/wix/WixToolset.Core/Compiler_Package.cs | |||
@@ -2463,6 +2463,7 @@ namespace WixToolset.Core | |||
2463 | foreach (var child in node.Elements()) | 2463 | foreach (var child in node.Elements()) |
2464 | { | 2464 | { |
2465 | var childSourceLineNumbers = Preprocessor.GetSourceLineNumbers(child); | 2465 | var childSourceLineNumbers = Preprocessor.GetSourceLineNumbers(child); |
2466 | Identifier actionIdentifier = null; | ||
2466 | var actionName = child.Name.LocalName; | 2467 | var actionName = child.Name.LocalName; |
2467 | string afterAction = null; | 2468 | string afterAction = null; |
2468 | string beforeAction = null; | 2469 | string beforeAction = null; |
@@ -2485,8 +2486,9 @@ namespace WixToolset.Core | |||
2485 | case "Action": | 2486 | case "Action": |
2486 | if (customAction) | 2487 | if (customAction) |
2487 | { | 2488 | { |
2488 | actionName = this.Core.GetAttributeIdentifierValue(childSourceLineNumbers, attrib); | 2489 | actionIdentifier = this.Core.GetAttributeIdentifier(childSourceLineNumbers, attrib); |
2489 | this.Core.CreateSimpleReference(childSourceLineNumbers, SymbolDefinitions.CustomAction, actionName); | 2490 | actionName = actionIdentifier.Id; |
2491 | this.Core.CreateSimpleReference(childSourceLineNumbers, SymbolDefinitions.CustomAction, actionIdentifier.Id); | ||
2490 | } | 2492 | } |
2491 | else | 2493 | else |
2492 | { | 2494 | { |
@@ -2521,7 +2523,8 @@ namespace WixToolset.Core | |||
2521 | case "Dialog": | 2523 | case "Dialog": |
2522 | if (showDialog) | 2524 | if (showDialog) |
2523 | { | 2525 | { |
2524 | actionName = this.Core.GetAttributeIdentifierValue(childSourceLineNumbers, attrib); | 2526 | actionIdentifier = this.Core.GetAttributeIdentifier(childSourceLineNumbers, attrib); |
2527 | actionName = actionIdentifier.Id; | ||
2525 | this.Core.CreateSimpleReference(childSourceLineNumbers, SymbolDefinitions.Dialog, actionName); | 2528 | this.Core.CreateSimpleReference(childSourceLineNumbers, SymbolDefinitions.Dialog, actionName); |
2526 | } | 2529 | } |
2527 | else | 2530 | else |
@@ -2645,7 +2648,17 @@ namespace WixToolset.Core | |||
2645 | } | 2648 | } |
2646 | else | 2649 | else |
2647 | { | 2650 | { |
2648 | var symbol = this.Core.AddSymbol(new WixActionSymbol(childSourceLineNumbers, new Identifier(AccessModifier.Global, sequenceTable, actionName)) | 2651 | var access = AccessModifier.Global; |
2652 | if (overridable) | ||
2653 | { | ||
2654 | access = AccessModifier.Virtual; | ||
2655 | } | ||
2656 | else if (actionIdentifier != null) | ||
2657 | { | ||
2658 | access = actionIdentifier.Access; | ||
2659 | } | ||
2660 | |||
2661 | var symbol = this.Core.AddSymbol(new WixActionSymbol(childSourceLineNumbers, new Identifier(access, sequenceTable, actionName)) | ||
2649 | { | 2662 | { |
2650 | SequenceTable = sequenceTable, | 2663 | SequenceTable = sequenceTable, |
2651 | Action = actionName, | 2664 | Action = actionName, |
diff --git a/src/wix/WixToolset.Core/ExtensibilityServices/ParseHelper.cs b/src/wix/WixToolset.Core/ExtensibilityServices/ParseHelper.cs index 9c507dff..5ccaffdc 100644 --- a/src/wix/WixToolset.Core/ExtensibilityServices/ParseHelper.cs +++ b/src/wix/WixToolset.Core/ExtensibilityServices/ParseHelper.cs | |||
@@ -423,6 +423,14 @@ namespace WixToolset.Core.ExtensibilityServices | |||
423 | access = AccessModifier.Section; | 423 | access = AccessModifier.Section; |
424 | break; | 424 | break; |
425 | 425 | ||
426 | case "virtual": | ||
427 | access = AccessModifier.Virtual; | ||
428 | break; | ||
429 | |||
430 | case "override": | ||
431 | access = AccessModifier.Override; | ||
432 | break; | ||
433 | |||
426 | default: | 434 | default: |
427 | return null; | 435 | return null; |
428 | } | 436 | } |
diff --git a/src/wix/WixToolset.Core/Link/AddRequiredStandardDirectories.cs b/src/wix/WixToolset.Core/Link/AddRequiredStandardDirectories.cs index 49483552..38493648 100644 --- a/src/wix/WixToolset.Core/Link/AddRequiredStandardDirectories.cs +++ b/src/wix/WixToolset.Core/Link/AddRequiredStandardDirectories.cs | |||
@@ -43,12 +43,17 @@ namespace WixToolset.Core.Link | |||
43 | 43 | ||
44 | if (String.IsNullOrEmpty(parentDirectoryId)) | 44 | if (String.IsNullOrEmpty(parentDirectoryId)) |
45 | { | 45 | { |
46 | if (directory.Id.Id != "TARGETDIR") | 46 | parentDirectoryId = this.GetStandardDirectoryParent(directory.Id.Id, platform); |
47 | { | 47 | |
48 | directory.ParentDirectoryRef = "TARGETDIR"; | 48 | directory.ParentDirectoryRef = parentDirectoryId; |
49 | } | 49 | |
50 | //if (directory.Id.Id != "TARGETDIR") | ||
51 | //{ | ||
52 | // directory.ParentDirectoryRef = "TARGETDIR"; | ||
53 | //} | ||
50 | } | 54 | } |
51 | else | 55 | |
56 | if (!String.IsNullOrEmpty(parentDirectoryId)) | ||
52 | { | 57 | { |
53 | this.EnsureStandardDirectoryAdded(directoryIds, parentDirectoryId, directory.SourceLineNumbers, platform); | 58 | this.EnsureStandardDirectoryAdded(directoryIds, parentDirectoryId, directory.SourceLineNumbers, platform); |
54 | } | 59 | } |
diff --git a/src/wix/WixToolset.Core/Link/FindEntrySectionAndLoadSymbolsCommand.cs b/src/wix/WixToolset.Core/Link/FindEntrySectionAndLoadSymbolsCommand.cs index 496c6178..e614d4eb 100644 --- a/src/wix/WixToolset.Core/Link/FindEntrySectionAndLoadSymbolsCommand.cs +++ b/src/wix/WixToolset.Core/Link/FindEntrySectionAndLoadSymbolsCommand.cs | |||
@@ -44,11 +44,19 @@ namespace WixToolset.Core.Link | |||
44 | /// </summary> | 44 | /// </summary> |
45 | public ISet<IntermediateSymbol> IdenticalDirectorySymbols { get; private set; } | 45 | public ISet<IntermediateSymbol> IdenticalDirectorySymbols { get; private set; } |
46 | 46 | ||
47 | /// <summary> | ||
48 | /// Gets the collection of overridden symbols that should not be included | ||
49 | /// in the final output. | ||
50 | /// </summary> | ||
51 | public ISet<IntermediateSymbol> OverriddenSymbols { get; private set; } | ||
52 | |||
47 | public void Execute() | 53 | public void Execute() |
48 | { | 54 | { |
49 | var symbolsByName = new Dictionary<string, SymbolWithSection>(); | 55 | var symbolsByName = new Dictionary<string, SymbolWithSection>(); |
50 | var possibleConflicts = new HashSet<SymbolWithSection>(); | 56 | var possibleConflicts = new HashSet<SymbolWithSection>(); |
51 | var identicalDirectorySymbols = new HashSet<IntermediateSymbol>(); | 57 | var identicalDirectorySymbols = new HashSet<IntermediateSymbol>(); |
58 | var overrideSymbols = new List<SymbolWithSection>(); | ||
59 | var overriddenSymbols = new HashSet<IntermediateSymbol>(); | ||
52 | 60 | ||
53 | if (!Enum.TryParse(this.ExpectedOutputType.ToString(), out SectionType expectedEntrySectionType)) | 61 | if (!Enum.TryParse(this.ExpectedOutputType.ToString(), out SectionType expectedEntrySectionType)) |
54 | { | 62 | { |
@@ -84,15 +92,34 @@ namespace WixToolset.Core.Link | |||
84 | 92 | ||
85 | if (!symbolsByName.TryGetValue(fullName, out var existingSymbol)) | 93 | if (!symbolsByName.TryGetValue(fullName, out var existingSymbol)) |
86 | { | 94 | { |
95 | if (symbolWithSection.Access == AccessModifier.Override) | ||
96 | { | ||
97 | overrideSymbols.Add(symbolWithSection); | ||
98 | } | ||
99 | |||
87 | symbolsByName.Add(fullName, symbolWithSection); | 100 | symbolsByName.Add(fullName, symbolWithSection); |
88 | } | 101 | } |
89 | else // uh-oh, duplicate symbols. | 102 | else // uh-oh, duplicate symbols. |
90 | { | 103 | { |
104 | if (AccessModifier.Virtual == existingSymbol.Access && AccessModifier.Override == symbolWithSection.Access) | ||
105 | { | ||
106 | symbolWithSection.OverrideVirtualSymbol(existingSymbol); | ||
107 | symbolsByName[fullName] = symbolWithSection; // replace the virtual symbol with the override symbol. | ||
108 | |||
109 | overrideSymbols.Add(symbolWithSection); | ||
110 | overriddenSymbols.Add(existingSymbol.Symbol); | ||
111 | } | ||
112 | else if (AccessModifier.Override == existingSymbol.Access && AccessModifier.Virtual == symbolWithSection.Access) | ||
113 | { | ||
114 | existingSymbol.OverrideVirtualSymbol(symbolWithSection); | ||
115 | |||
116 | overriddenSymbols.Add(symbolWithSection.Symbol); | ||
117 | } | ||
91 | // If the duplicate symbols are both private directories, there is a chance that they | 118 | // If the duplicate symbols are both private directories, there is a chance that they |
92 | // point to identical symbols. Identical directory symbols should be treated as redundant. | 119 | // point to identical symbols. Identical directory symbols are redundant and will not cause |
93 | // and not cause conflicts. | 120 | // conflicts. |
94 | if (AccessModifier.Section == existingSymbol.Access && AccessModifier.Section == symbolWithSection.Access && | 121 | else if (AccessModifier.Section == existingSymbol.Access && AccessModifier.Section == symbolWithSection.Access && |
95 | SymbolDefinitionType.Directory == existingSymbol.Symbol.Definition.Type && existingSymbol.Symbol.IsIdentical(symbolWithSection.Symbol)) | 122 | SymbolDefinitionType.Directory == existingSymbol.Symbol.Definition.Type && existingSymbol.Symbol.IsIdentical(symbolWithSection.Symbol)) |
96 | { | 123 | { |
97 | // Ensure identical symbols are tracked to ensure that only one symbol will end up in linked intermediate. | 124 | // Ensure identical symbols are tracked to ensure that only one symbol will end up in linked intermediate. |
98 | identicalDirectorySymbols.Add(existingSymbol.Symbol); | 125 | identicalDirectorySymbols.Add(existingSymbol.Symbol); |
@@ -108,9 +135,21 @@ namespace WixToolset.Core.Link | |||
108 | } | 135 | } |
109 | } | 136 | } |
110 | 137 | ||
138 | // Ensure override symbols actually overrode a virtual symbol. | ||
139 | foreach (var symbolWithSection in overrideSymbols) | ||
140 | { | ||
141 | if (symbolWithSection.Overrides is null) | ||
142 | { | ||
143 | var fullName = symbolWithSection.GetFullName(); | ||
144 | |||
145 | this.Messaging.Write(LinkerErrors.VirtualSymbolNotFoundForOverride(symbolWithSection.Symbol.SourceLineNumbers, fullName)); | ||
146 | } | ||
147 | } | ||
148 | |||
111 | this.SymbolsByName = symbolsByName; | 149 | this.SymbolsByName = symbolsByName; |
112 | this.PossibleConflicts = possibleConflicts; | 150 | this.PossibleConflicts = possibleConflicts; |
113 | this.IdenticalDirectorySymbols = identicalDirectorySymbols; | 151 | this.IdenticalDirectorySymbols = identicalDirectorySymbols; |
152 | this.OverriddenSymbols = overriddenSymbols; | ||
114 | } | 153 | } |
115 | } | 154 | } |
116 | } | 155 | } |
diff --git a/src/wix/WixToolset.Core/Link/ResolveReferencesCommand.cs b/src/wix/WixToolset.Core/Link/ResolveReferencesCommand.cs index d95d648f..0edbf39c 100644 --- a/src/wix/WixToolset.Core/Link/ResolveReferencesCommand.cs +++ b/src/wix/WixToolset.Core/Link/ResolveReferencesCommand.cs | |||
@@ -133,13 +133,13 @@ namespace WixToolset.Core.Link | |||
133 | 133 | ||
134 | foreach (var dupe in symbolWithSection.PossiblyConflicts) | 134 | foreach (var dupe in symbolWithSection.PossiblyConflicts) |
135 | { | 135 | { |
136 | // don't count overridable WixActionSymbols | 136 | //// don't count overridable WixActionSymbols |
137 | var symbolAction = symbolWithSection.Symbol as WixActionSymbol; | 137 | //var symbolAction = symbolWithSection.Symbol as WixActionSymbol; |
138 | var dupeAction = dupe.Symbol as WixActionSymbol; | 138 | //var dupeAction = dupe.Symbol as WixActionSymbol; |
139 | if (symbolAction?.Overridable != dupeAction?.Overridable) | 139 | //if (symbolAction?.Overridable != dupeAction?.Overridable) |
140 | { | 140 | //{ |
141 | continue; | 141 | // continue; |
142 | } | 142 | //} |
143 | 143 | ||
144 | if (this.AccessibleSymbol(referencingSection, dupe)) | 144 | if (this.AccessibleSymbol(referencingSection, dupe)) |
145 | { | 145 | { |
@@ -161,6 +161,8 @@ namespace WixToolset.Core.Link | |||
161 | switch (symbolWithSection.Access) | 161 | switch (symbolWithSection.Access) |
162 | { | 162 | { |
163 | case AccessModifier.Global: | 163 | case AccessModifier.Global: |
164 | case AccessModifier.Virtual: | ||
165 | case AccessModifier.Override: | ||
164 | return true; | 166 | return true; |
165 | case AccessModifier.Library: | 167 | case AccessModifier.Library: |
166 | return symbolWithSection.Section.CompilationId == referencingSection.CompilationId || (null != symbolWithSection.Section.LibraryId && symbolWithSection.Section.LibraryId == referencingSection.LibraryId); | 168 | return symbolWithSection.Section.CompilationId == referencingSection.CompilationId || (null != symbolWithSection.Section.LibraryId && symbolWithSection.Section.LibraryId == referencingSection.LibraryId); |
diff --git a/src/wix/WixToolset.Core/Link/SymbolWithSection.cs b/src/wix/WixToolset.Core/Link/SymbolWithSection.cs index dbaceb28..979aa44f 100644 --- a/src/wix/WixToolset.Core/Link/SymbolWithSection.cs +++ b/src/wix/WixToolset.Core/Link/SymbolWithSection.cs | |||
@@ -49,6 +49,11 @@ namespace WixToolset.Core.Link | |||
49 | public IEnumerable<SymbolWithSection> PossiblyConflicts => this.possibleConflicts ?? Enumerable.Empty<SymbolWithSection>(); | 49 | public IEnumerable<SymbolWithSection> PossiblyConflicts => this.possibleConflicts ?? Enumerable.Empty<SymbolWithSection>(); |
50 | 50 | ||
51 | /// <summary> | 51 | /// <summary> |
52 | /// Gets the virtual symbol that is overridden by this symbol. | ||
53 | /// </summary> | ||
54 | public SymbolWithSection Overrides { get; private set; } | ||
55 | |||
56 | /// <summary> | ||
52 | /// Adds a duplicate symbol with sections that is a possible conflict. | 57 | /// Adds a duplicate symbol with sections that is a possible conflict. |
53 | /// </summary> | 58 | /// </summary> |
54 | /// <param name="symbolWithSection">Symbol with section that is a possible conflict of this symbol.</param> | 59 | /// <param name="symbolWithSection">Symbol with section that is a possible conflict of this symbol.</param> |
@@ -63,6 +68,20 @@ namespace WixToolset.Core.Link | |||
63 | } | 68 | } |
64 | 69 | ||
65 | /// <summary> | 70 | /// <summary> |
71 | /// Override a virtual symbol. | ||
72 | /// </summary> | ||
73 | /// <param name="virtualSymbolWithSection">Virtual symbol with section that is being overridden.</param> | ||
74 | public void OverrideVirtualSymbol(SymbolWithSection virtualSymbolWithSection) | ||
75 | { | ||
76 | if (virtualSymbolWithSection.Access != AccessModifier.Virtual) | ||
77 | { | ||
78 | throw new InvalidOperationException("Cannot override non-virtual symbols"); | ||
79 | } | ||
80 | |||
81 | this.Overrides = virtualSymbolWithSection; | ||
82 | } | ||
83 | |||
84 | /// <summary> | ||
66 | /// Gets the full name of the symbol. | 85 | /// Gets the full name of the symbol. |
67 | /// </summary> | 86 | /// </summary> |
68 | public string GetFullName() | 87 | public string GetFullName() |
diff --git a/src/wix/WixToolset.Core/Linker.cs b/src/wix/WixToolset.Core/Linker.cs index 59728741..85333da4 100644 --- a/src/wix/WixToolset.Core/Linker.cs +++ b/src/wix/WixToolset.Core/Linker.cs | |||
@@ -98,6 +98,9 @@ namespace WixToolset.Core | |||
98 | } | 98 | } |
99 | } | 99 | } |
100 | 100 | ||
101 | // TODO: Replace this with "std.wixlib" | ||
102 | this.LoadStandardSymbols(sections); | ||
103 | |||
101 | var multipleFeatureComponents = new Hashtable(); | 104 | var multipleFeatureComponents = new Hashtable(); |
102 | 105 | ||
103 | var wixVariables = new Dictionary<string, WixVariableSymbol>(); | 106 | var wixVariables = new Dictionary<string, WixVariableSymbol>(); |
@@ -119,8 +122,8 @@ namespace WixToolset.Core | |||
119 | } | 122 | } |
120 | } | 123 | } |
121 | 124 | ||
122 | // Add the missing standard action and directory symbols. | 125 | ////// Add the missing standard action and directory symbols. |
123 | this.LoadStandardSymbols(find.SymbolsByName); | 126 | ////this.LoadStandardSymbols(find.SymbolsByName); |
124 | 127 | ||
125 | // Resolve the symbol references to find the set of sections we care about for linking. | 128 | // Resolve the symbol references to find the set of sections we care about for linking. |
126 | // Of course, we start with the entry section (that's how it got its name after all). | 129 | // Of course, we start with the entry section (that's how it got its name after all). |
@@ -200,6 +203,11 @@ namespace WixToolset.Core | |||
200 | continue; | 203 | continue; |
201 | } | 204 | } |
202 | } | 205 | } |
206 | else if (find.OverriddenSymbols.Contains(symbol)) | ||
207 | { | ||
208 | // Skip the symbols that were overridden. | ||
209 | continue; | ||
210 | } | ||
203 | 211 | ||
204 | var copySymbol = true; // by default, copy symbols. | 212 | var copySymbol = true; // by default, copy symbols. |
205 | 213 | ||
@@ -360,33 +368,62 @@ namespace WixToolset.Core | |||
360 | /// Load the standard action and directory symbols. | 368 | /// Load the standard action and directory symbols. |
361 | /// </summary> | 369 | /// </summary> |
362 | /// <param name="symbolsByName">Collection of symbols.</param> | 370 | /// <param name="symbolsByName">Collection of symbols.</param> |
363 | private void LoadStandardSymbols(IDictionary<string, SymbolWithSection> symbolsByName) | 371 | //private void LoadStandardSymbols(IDictionary<string, SymbolWithSection> symbolsByName) |
372 | //{ | ||
373 | // foreach (var actionSymbol in WindowsInstallerStandard.StandardActions()) | ||
374 | // { | ||
375 | // var symbolWithSection = new SymbolWithSection(null, actionSymbol); | ||
376 | // var fullName = symbolWithSection.GetFullName(); | ||
377 | |||
378 | // // If the action's symbol has not already been defined (i.e. overriden by the user), add it now. | ||
379 | // if (!symbolsByName.ContainsKey(fullName)) | ||
380 | // { | ||
381 | // symbolsByName.Add(fullName, symbolWithSection); | ||
382 | // } | ||
383 | // } | ||
384 | |||
385 | // foreach (var directorySymbol in WindowsInstallerStandard.StandardDirectories()) | ||
386 | // { | ||
387 | // var symbolWithSection = new SymbolWithSection(null, directorySymbol); | ||
388 | // var fullName = symbolWithSection.GetFullName(); | ||
389 | |||
390 | // // If the directory's symbol has not already been defined (i.e. overriden by the user), add it now. | ||
391 | // if (!symbolsByName.ContainsKey(fullName)) | ||
392 | // { | ||
393 | // symbolsByName.Add(fullName, symbolWithSection); | ||
394 | // } | ||
395 | // } | ||
396 | //} | ||
397 | |||
398 | private void LoadStandardSymbols(List<IntermediateSection> sections) | ||
364 | { | 399 | { |
365 | foreach (var actionSymbol in WindowsInstallerStandard.StandardActions()) | 400 | foreach (var actionSymbol in WindowsInstallerStandard.StandardActions()) |
366 | { | 401 | { |
367 | var symbolWithSection = new SymbolWithSection(null, actionSymbol); | 402 | var section = new IntermediateSection(actionSymbol.Id.Id, SectionType.Fragment); |
368 | var fullName = symbolWithSection.GetFullName(); | 403 | section.AddSymbol(new WixActionSymbol(null, new Identifier(actionSymbol.Id.Access, actionSymbol.Id.Id)) |
369 | |||
370 | // If the action's symbol has not already been defined (i.e. overriden by the user), add it now. | ||
371 | if (!symbolsByName.ContainsKey(fullName)) | ||
372 | { | 404 | { |
373 | symbolsByName.Add(fullName, symbolWithSection); | 405 | Action = actionSymbol.Action, |
374 | } | 406 | SequenceTable = actionSymbol.SequenceTable, |
407 | Sequence = actionSymbol.Sequence, | ||
408 | Condition = actionSymbol.Condition, | ||
409 | }); | ||
410 | |||
411 | sections.Add(section); | ||
375 | } | 412 | } |
376 | 413 | ||
377 | foreach (var directorySymbol in WindowsInstallerStandard.StandardDirectories()) | 414 | foreach (var directorySymbol in WindowsInstallerStandard.StandardDirectories()) |
378 | { | 415 | { |
379 | var symbolWithSection = new SymbolWithSection(null, directorySymbol); | 416 | var section = new IntermediateSection(directorySymbol.Id.Id, SectionType.Fragment); |
380 | var fullName = symbolWithSection.GetFullName(); | 417 | section.AddSymbol(new DirectorySymbol(null, new Identifier(directorySymbol.Id.Access, directorySymbol.Id.Id)) |
381 | |||
382 | // If the directory's symbol has not already been defined (i.e. overriden by the user), add it now. | ||
383 | if (!symbolsByName.ContainsKey(fullName)) | ||
384 | { | 418 | { |
385 | symbolsByName.Add(fullName, symbolWithSection); | 419 | Name = directorySymbol.Name |
386 | } | 420 | }); |
421 | |||
422 | sections.Add(section); | ||
387 | } | 423 | } |
388 | } | 424 | } |
389 | 425 | ||
426 | |||
390 | /// <summary> | 427 | /// <summary> |
391 | /// Process the complex references. | 428 | /// Process the complex references. |
392 | /// </summary> | 429 | /// </summary> |
diff --git a/src/wix/WixToolset.Core/LinkerErrors.cs b/src/wix/WixToolset.Core/LinkerErrors.cs index cb13a344..78cd76f0 100644 --- a/src/wix/WixToolset.Core/LinkerErrors.cs +++ b/src/wix/WixToolset.Core/LinkerErrors.cs | |||
@@ -46,6 +46,11 @@ namespace WixToolset.Core | |||
46 | return Message(sourceLineNumbers, Ids.UncompressedPayloadInContainer, "The payload '{0}' is uncompressed and cannot be added to container '{1}'. Remove its Compressed attribute and provide a @SourceFile value to allow it to be added to a container.", payloadId, containerId); | 46 | return Message(sourceLineNumbers, Ids.UncompressedPayloadInContainer, "The payload '{0}' is uncompressed and cannot be added to container '{1}'. Remove its Compressed attribute and provide a @SourceFile value to allow it to be added to a container.", payloadId, containerId); |
47 | } | 47 | } |
48 | 48 | ||
49 | public static Message VirtualSymbolNotFoundForOverride(SourceLineNumber sourceLineNumbers, string id) | ||
50 | { | ||
51 | return Message(sourceLineNumbers, Ids.VirtualSymbolNotFoundForOverride, "Did not find virtual symbol for override symbol '{0}'",id); | ||
52 | } | ||
53 | |||
49 | private static Message Message(SourceLineNumber sourceLineNumber, Ids id, string format, params object[] args) | 54 | private static Message Message(SourceLineNumber sourceLineNumber, Ids id, string format, params object[] args) |
50 | { | 55 | { |
51 | return new Message(sourceLineNumber, MessageLevel.Error, (int)id, format, args); | 56 | return new Message(sourceLineNumber, MessageLevel.Error, (int)id, format, args); |
@@ -61,6 +66,7 @@ namespace WixToolset.Core | |||
61 | UncompressedPayloadInContainer = 7005, | 66 | UncompressedPayloadInContainer = 7005, |
62 | BAContainerCannotContainRemotePayload = 7006, | 67 | BAContainerCannotContainRemotePayload = 7006, |
63 | DuplicateBindPathVariableOnCommandLine = 7007, | 68 | DuplicateBindPathVariableOnCommandLine = 7007, |
69 | VirtualSymbolNotFoundForOverride = 7008, | ||
64 | } // last available is 7099. 7100 is WindowsInstallerBackendWarnings. | 70 | } // last available is 7099. 7100 is WindowsInstallerBackendWarnings. |
65 | } | 71 | } |
66 | } | 72 | } |
diff --git a/src/wix/test/WixToolsetTest.CoreIntegration/AccessModifierFixture.cs b/src/wix/test/WixToolsetTest.CoreIntegration/AccessModifierFixture.cs new file mode 100644 index 00000000..d0e31760 --- /dev/null +++ b/src/wix/test/WixToolsetTest.CoreIntegration/AccessModifierFixture.cs | |||
@@ -0,0 +1,159 @@ | |||
1 | // Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information. | ||
2 | |||
3 | namespace WixToolsetTest.CoreIntegration | ||
4 | { | ||
5 | using System.Collections.Generic; | ||
6 | using System.IO; | ||
7 | using System.Linq; | ||
8 | using WixInternal.Core.TestPackage; | ||
9 | using WixInternal.TestSupport; | ||
10 | using WixToolset.Data; | ||
11 | using WixToolset.Data.Symbols; | ||
12 | using Xunit; | ||
13 | |||
14 | public class AccessModifierFixture | ||
15 | { | ||
16 | [Fact] | ||
17 | public void CanCompileVirtualSymbol() | ||
18 | { | ||
19 | var dirSymbols = BuildToGetDirectorySymbols("TestData", "AccessModifier", "HasVirtualSymbol.wxs"); | ||
20 | WixAssert.CompareLineByLine(new[] | ||
21 | { | ||
22 | "virtual:ProgramFilesFolder:TARGETDIR:PFiles", | ||
23 | "virtual:TARGETDIR::SourceDir", | ||
24 | "virtual:TestFolder:ProgramFilesFolder:Test Folder", | ||
25 | }, dirSymbols.OrderBy(d => d.Id.Id).Select(d => d.Id.Access.AsString() + ":" + d.Id.Id + ":" + d.ParentDirectoryRef + ":" + d.Name).ToArray()); | ||
26 | } | ||
27 | |||
28 | [Fact] | ||
29 | public void CanCompileOverrideVirtualSymbol() | ||
30 | { | ||
31 | var dirSymbols = BuildToGetDirectorySymbols("TestData", "AccessModifier", "OverrideVirtualSymbol.wxs"); | ||
32 | WixAssert.CompareLineByLine(new[] | ||
33 | { | ||
34 | "virtual:ProgramFilesFolder:TARGETDIR:PFiles", | ||
35 | "virtual:TARGETDIR::SourceDir", | ||
36 | "override:TestFolder:ProgramFilesFolder:Override Test Folder", | ||
37 | }, dirSymbols.OrderBy(d => d.Id.Id).Select(d => d.Id.Access.AsString() + ":" + d.Id.Id + ":" + d.ParentDirectoryRef + ":" + d.Name).ToArray()); | ||
38 | } | ||
39 | |||
40 | [Fact] | ||
41 | public void CanCompileVirtualSymbolOverridden() | ||
42 | { | ||
43 | var dirSymbols = BuildToGetDirectorySymbols("TestData", "AccessModifier", "VirtualSymbolOverridden.wxs"); | ||
44 | WixAssert.CompareLineByLine(new[] | ||
45 | { | ||
46 | "virtual:ProgramFilesFolder:TARGETDIR:PFiles", | ||
47 | "virtual:TARGETDIR::SourceDir", | ||
48 | "override:TestFolder:ProgramFilesFolder:Test Folder Overrode Virtual", | ||
49 | }, dirSymbols.OrderBy(d => d.Id.Id).Select(d => d.Id.Access.AsString() + ":" + d.Id.Id + ":" + d.ParentDirectoryRef + ":" + d.Name).ToArray()); | ||
50 | } | ||
51 | |||
52 | [Fact] | ||
53 | public void CanCompileVirtualSymbolWithFragments() | ||
54 | { | ||
55 | var dirSymbols = BuildToGetDirectorySymbols("TestData", "AccessModifier", "OverrideVirtualSymbolWithFragments.wxs"); | ||
56 | WixAssert.CompareLineByLine(new[] | ||
57 | { | ||
58 | "global:AlsoIncluded:ProgramFilesFolder:Also Included", | ||
59 | "virtual:ProgramFilesFolder:TARGETDIR:PFiles", | ||
60 | "virtual:TARGETDIR::SourceDir", | ||
61 | "override:TestFolder:ProgramFilesFolder:Override Test Folder Includes Another", | ||
62 | }, dirSymbols.OrderBy(d => d.Id.Id).Select(d => d.Id.Access.AsString() + ":" + d.Id.Id + ":" + d.ParentDirectoryRef + ":" + d.Name).ToArray()); | ||
63 | } | ||
64 | |||
65 | [Fact] | ||
66 | public void CannotCompileInvalidCrossFragmentReference() | ||
67 | { | ||
68 | var errors = BuildForFailure("TestData", "AccessModifier", "InvalidCrossFragmentReference.wxs"); | ||
69 | WixAssert.CompareLineByLine(new[] | ||
70 | { | ||
71 | "ln 4: The identifier 'Directory:Foo' is inaccessible due to its protection level.", | ||
72 | }, errors); | ||
73 | } | ||
74 | |||
75 | [Fact] | ||
76 | public void CannotCompileDuplicateCrossFragmentReference() | ||
77 | { | ||
78 | var errors = BuildForFailure("TestData", "AccessModifier", "DuplicateCrossFragmentReference.wxs"); | ||
79 | WixAssert.CompareLineByLine(new[] | ||
80 | { | ||
81 | @"ln 8: Duplicate symbol 'Directory:TestFolder' referenced by <sourceFolder>\DuplicateCrossFragmentReference.wxs(4). This typically means that an Id is duplicated. Ensure all your identifiers of a given type (Directory, File, etc.) are unique or use an access modifier to scope the identfier.", | ||
82 | "ln 12: Location of symbol related to previous error." | ||
83 | }, errors); | ||
84 | } | ||
85 | |||
86 | [Fact] | ||
87 | public void CannotCompileOverrideWithoutVirtualSymbol() | ||
88 | { | ||
89 | var errors = BuildForFailure("TestData", "AccessModifier", "OverrideWithoutVirtualSymbol.wxs"); | ||
90 | WixAssert.CompareLineByLine(new[] | ||
91 | { | ||
92 | "ln 5: Did not find virtual symbol for override symbol 'Directory:TestFolder'", | ||
93 | }, errors); | ||
94 | } | ||
95 | |||
96 | [Fact] | ||
97 | public void CannotCompileDuplicatedOverride() | ||
98 | { | ||
99 | var errors = BuildForFailure("TestData", "AccessModifier", "DuplicatedOverrideVirtualSymbol.wxs"); | ||
100 | WixAssert.CompareLineByLine(new[] | ||
101 | { | ||
102 | "ln 14: Duplicate symbol 'Directory:TestFolder' found. This typically means that an Id is duplicated. Access modifiers (global, library, file, section) cannot prevent these conflicts. Ensure all your identifiers of a given type (Directory, File, etc.) are unique.", | ||
103 | "ln 6: Location of symbol related to previous error." | ||
104 | }, errors); | ||
105 | } | ||
106 | |||
107 | private static string[] BuildForFailure(params string[] testSourceFilePaths) | ||
108 | { | ||
109 | var sourceFile = TestData.Get(testSourceFilePaths); | ||
110 | var sourceFolder = Path.GetDirectoryName(sourceFile); | ||
111 | |||
112 | using (var fs = new DisposableFileSystem()) | ||
113 | { | ||
114 | var baseFolder = fs.GetFolder(); | ||
115 | var intermediateFolder = Path.Combine(baseFolder, "obj"); | ||
116 | var msiPath = Path.Combine(baseFolder, "bin", "test.msi"); | ||
117 | |||
118 | var result = WixRunner.Execute(new[] | ||
119 | { | ||
120 | "build", | ||
121 | sourceFile, | ||
122 | "-intermediateFolder", intermediateFolder, | ||
123 | "-o", msiPath | ||
124 | }); | ||
125 | |||
126 | return result.Messages.Where(m => m.Level == MessageLevel.Error) | ||
127 | .Select(m => $"ln {m.SourceLineNumbers.LineNumber}: {m}".Replace(sourceFolder, "<sourceFolder>").Replace(baseFolder, "<baseFolder>")) | ||
128 | .ToArray(); | ||
129 | } | ||
130 | } | ||
131 | |||
132 | private static List<DirectorySymbol> BuildToGetDirectorySymbols(params string[] testSourceFilePaths) | ||
133 | { | ||
134 | var sourceFile = TestData.Get(testSourceFilePaths); | ||
135 | |||
136 | using (var fs = new DisposableFileSystem()) | ||
137 | { | ||
138 | var baseFolder = fs.GetFolder(); | ||
139 | var intermediateFolder = Path.Combine(baseFolder, "obj"); | ||
140 | var msiPath = Path.Combine(baseFolder, "bin", "test.msi"); | ||
141 | |||
142 | var result = WixRunner.Execute(new[] | ||
143 | { | ||
144 | "build", | ||
145 | sourceFile, | ||
146 | "-intermediateFolder", intermediateFolder, | ||
147 | "-o", msiPath | ||
148 | }); | ||
149 | |||
150 | result.AssertSuccess(); | ||
151 | |||
152 | var intermediate = Intermediate.Load(Path.Combine(baseFolder, "bin", "test.wixpdb")); | ||
153 | var section = intermediate.Sections.Single(); | ||
154 | |||
155 | return section.Symbols.OfType<WixToolset.Data.Symbols.DirectorySymbol>().ToList(); | ||
156 | } | ||
157 | } | ||
158 | } | ||
159 | } | ||
diff --git a/src/wix/test/WixToolsetTest.CoreIntegration/RollbackBoundaryFixture.cs b/src/wix/test/WixToolsetTest.CoreIntegration/RollbackBoundaryFixture.cs index f8d46c24..8d8ac801 100644 --- a/src/wix/test/WixToolsetTest.CoreIntegration/RollbackBoundaryFixture.cs +++ b/src/wix/test/WixToolsetTest.CoreIntegration/RollbackBoundaryFixture.cs | |||
@@ -66,7 +66,7 @@ namespace WixToolsetTest.CoreIntegration | |||
66 | 66 | ||
67 | WixAssert.CompareLineByLine(new[] | 67 | WixAssert.CompareLineByLine(new[] |
68 | { | 68 | { |
69 | "Duplicate symbol 'WixChainItem:collision' found. This typically means that an Id is duplicated. Access modifiers (internal, protected, private) cannot prevent these conflicts. Ensure all your identifiers of a given type (File, Component, Feature) are unique.", | 69 | "Duplicate symbol 'WixChainItem:collision' found. This typically means that an Id is duplicated. Access modifiers (global, library, file, section) cannot prevent these conflicts. Ensure all your identifiers of a given type (Directory, File, etc.) are unique.", |
70 | "Location of symbol related to previous error.", | 70 | "Location of symbol related to previous error.", |
71 | }, result.Messages.Select(m => m.ToString()).ToArray()); | 71 | }, result.Messages.Select(m => m.ToString()).ToArray()); |
72 | 72 | ||
diff --git a/src/wix/test/WixToolsetTest.CoreIntegration/TestData/AccessModifier/DuplicateCrossFragmentReference.wxs b/src/wix/test/WixToolsetTest.CoreIntegration/TestData/AccessModifier/DuplicateCrossFragmentReference.wxs new file mode 100644 index 00000000..f987fe13 --- /dev/null +++ b/src/wix/test/WixToolsetTest.CoreIntegration/TestData/AccessModifier/DuplicateCrossFragmentReference.wxs | |||
@@ -0,0 +1,14 @@ | |||
1 | <?xml version="1.0" encoding="utf-8"?> | ||
2 | <Wix xmlns="http://wixtoolset.org/schemas/v4/wxs"> | ||
3 | <Package Name="Duplicate Cross Fragment Reference" Version="1.0.0.0" Manufacturer="Example Corporation" UpgradeCode="047730a5-30fe-4a62-a520-da9381b8226a"> | ||
4 | <DirectoryRef Id="TestFolder" /> | ||
5 | </Package> | ||
6 | |||
7 | <Fragment> | ||
8 | <Directory Id="TestFolder" Name="Dupe 1" /> | ||
9 | </Fragment> | ||
10 | |||
11 | <Fragment> | ||
12 | <Directory Id="TestFolder" Name="Dupe 2" /> | ||
13 | </Fragment> | ||
14 | </Wix> | ||
diff --git a/src/wix/test/WixToolsetTest.CoreIntegration/TestData/AccessModifier/DuplicatedOverrideVirtualSymbol.wxs b/src/wix/test/WixToolsetTest.CoreIntegration/TestData/AccessModifier/DuplicatedOverrideVirtualSymbol.wxs new file mode 100644 index 00000000..334b01ca --- /dev/null +++ b/src/wix/test/WixToolsetTest.CoreIntegration/TestData/AccessModifier/DuplicatedOverrideVirtualSymbol.wxs | |||
@@ -0,0 +1,17 @@ | |||
1 | <?xml version="1.0" encoding="utf-8"?> | ||
2 | <Wix xmlns="http://wixtoolset.org/schemas/v4/wxs"> | ||
3 | <Package Name="Duplicated Override Virtual Symbol" Version="1.0.0.0" Manufacturer="Example Corporation" UpgradeCode="047730a5-30fe-4a62-a520-da9381b8226a"> | ||
4 | |||
5 | <StandardDirectory Id="ProgramFilesFolder"> | ||
6 | <Directory Id="override TestFolder" Name="Override Test Folder" /> | ||
7 | </StandardDirectory> | ||
8 | |||
9 | <StandardDirectory Id="ProgramFilesFolder"> | ||
10 | <Directory Id="virtual TestFolder" Name="Test Folder" /> | ||
11 | </StandardDirectory> | ||
12 | |||
13 | <StandardDirectory Id="ProgramFilesFolder"> | ||
14 | <Directory Id="override TestFolder" Name="Collision Override Test Folder" /> | ||
15 | </StandardDirectory> | ||
16 | </Package> | ||
17 | </Wix> | ||
diff --git a/src/wix/test/WixToolsetTest.CoreIntegration/TestData/AccessModifier/HasVirtualSymbol.wxs b/src/wix/test/WixToolsetTest.CoreIntegration/TestData/AccessModifier/HasVirtualSymbol.wxs new file mode 100644 index 00000000..5cdedf04 --- /dev/null +++ b/src/wix/test/WixToolsetTest.CoreIntegration/TestData/AccessModifier/HasVirtualSymbol.wxs | |||
@@ -0,0 +1,8 @@ | |||
1 | <?xml version="1.0" encoding="utf-8"?> | ||
2 | <Wix xmlns="http://wixtoolset.org/schemas/v4/wxs"> | ||
3 | <Package Name="Has Virtual Symbol" Version="1.0.0.0" Manufacturer="Example Corporation" UpgradeCode="047730a5-30fe-4a62-a520-da9381b8226a"> | ||
4 | <StandardDirectory Id="ProgramFilesFolder"> | ||
5 | <Directory Id="virtual TestFolder" Name="Test Folder" /> | ||
6 | </StandardDirectory> | ||
7 | </Package> | ||
8 | </Wix> | ||
diff --git a/src/wix/test/WixToolsetTest.CoreIntegration/TestData/AccessModifier/InvalidCrossFragmentReference.wxs b/src/wix/test/WixToolsetTest.CoreIntegration/TestData/AccessModifier/InvalidCrossFragmentReference.wxs new file mode 100644 index 00000000..5ba21fb2 --- /dev/null +++ b/src/wix/test/WixToolsetTest.CoreIntegration/TestData/AccessModifier/InvalidCrossFragmentReference.wxs | |||
@@ -0,0 +1,10 @@ | |||
1 | <?xml version="1.0" encoding="utf-8"?> | ||
2 | <Wix xmlns="http://wixtoolset.org/schemas/v4/wxs"> | ||
3 | <Package Name="Invalid Cross Fragment Reference" Version="1.0.0.0" Manufacturer="Example Corporation" UpgradeCode="047730a5-30fe-4a62-a520-da9381b8226a"> | ||
4 | <DirectoryRef Id="Foo" /> | ||
5 | </Package> | ||
6 | |||
7 | <Fragment> | ||
8 | <Directory Id="fragment Foo" Name="Foo" /> | ||
9 | </Fragment> | ||
10 | </Wix> | ||
diff --git a/src/wix/test/WixToolsetTest.CoreIntegration/TestData/AccessModifier/OverrideVirtualSymbol.wxs b/src/wix/test/WixToolsetTest.CoreIntegration/TestData/AccessModifier/OverrideVirtualSymbol.wxs new file mode 100644 index 00000000..4f4cfc16 --- /dev/null +++ b/src/wix/test/WixToolsetTest.CoreIntegration/TestData/AccessModifier/OverrideVirtualSymbol.wxs | |||
@@ -0,0 +1,13 @@ | |||
1 | <?xml version="1.0" encoding="utf-8"?> | ||
2 | <Wix xmlns="http://wixtoolset.org/schemas/v4/wxs"> | ||
3 | <Package Name="Override Virtual Symbol" Version="1.0.0.0" Manufacturer="Example Corporation" UpgradeCode="047730a5-30fe-4a62-a520-da9381b8226a"> | ||
4 | |||
5 | <StandardDirectory Id="ProgramFilesFolder"> | ||
6 | <Directory Id="override TestFolder" Name="Override Test Folder" /> | ||
7 | </StandardDirectory> | ||
8 | |||
9 | <StandardDirectory Id="ProgramFilesFolder"> | ||
10 | <Directory Id="virtual TestFolder" Name="Test Folder" /> | ||
11 | </StandardDirectory> | ||
12 | </Package> | ||
13 | </Wix> | ||
diff --git a/src/wix/test/WixToolsetTest.CoreIntegration/TestData/AccessModifier/OverrideVirtualSymbolWithFragments.wxs b/src/wix/test/WixToolsetTest.CoreIntegration/TestData/AccessModifier/OverrideVirtualSymbolWithFragments.wxs new file mode 100644 index 00000000..13f03040 --- /dev/null +++ b/src/wix/test/WixToolsetTest.CoreIntegration/TestData/AccessModifier/OverrideVirtualSymbolWithFragments.wxs | |||
@@ -0,0 +1,20 @@ | |||
1 | <?xml version="1.0" encoding="utf-8"?> | ||
2 | <Wix xmlns="http://wixtoolset.org/schemas/v4/wxs"> | ||
3 | <Package Name="Override Virtual Symbol With Fragments" Version="1.0.0.0" Manufacturer="Example Corporation" UpgradeCode="047730a5-30fe-4a62-a520-da9381b8226a"> | ||
4 | <DirectoryRef Id="TestFolder" /> | ||
5 | </Package> | ||
6 | |||
7 | <Fragment> | ||
8 | <StandardDirectory Id="ProgramFilesFolder"> | ||
9 | <Directory Id="override TestFolder" Name="Override Test Folder Includes Another" /> | ||
10 | <Directory Id="AlsoIncluded" Name="Also Included" /> | ||
11 | </StandardDirectory> | ||
12 | </Fragment> | ||
13 | |||
14 | <Fragment> | ||
15 | <StandardDirectory Id="ProgramFilesFolder"> | ||
16 | <Directory Id="virtual TestFolder" Name="Test Folder" /> | ||
17 | <Directory Id="NotIncluded" Name="Not Included" /> | ||
18 | </StandardDirectory> | ||
19 | </Fragment> | ||
20 | </Wix> | ||
diff --git a/src/wix/test/WixToolsetTest.CoreIntegration/TestData/AccessModifier/OverrideWithoutVirtualSymbol.wxs b/src/wix/test/WixToolsetTest.CoreIntegration/TestData/AccessModifier/OverrideWithoutVirtualSymbol.wxs new file mode 100644 index 00000000..1cb749a7 --- /dev/null +++ b/src/wix/test/WixToolsetTest.CoreIntegration/TestData/AccessModifier/OverrideWithoutVirtualSymbol.wxs | |||
@@ -0,0 +1,8 @@ | |||
1 | <?xml version="1.0" encoding="utf-8"?> | ||
2 | <Wix xmlns="http://wixtoolset.org/schemas/v4/wxs"> | ||
3 | <Package Name="Override Without Virtual Symbol" Version="1.0.0.0" Manufacturer="Example Corporation" UpgradeCode="047730a5-30fe-4a62-a520-da9381b8226a"> | ||
4 | <StandardDirectory Id="ProgramFilesFolder"> | ||
5 | <Directory Id="override TestFolder" Name="Override Without Virtual Test Folder" /> | ||
6 | </StandardDirectory> | ||
7 | </Package> | ||
8 | </Wix> | ||
diff --git a/src/wix/test/WixToolsetTest.CoreIntegration/TestData/AccessModifier/VirtualSymbolOverridden.wxs b/src/wix/test/WixToolsetTest.CoreIntegration/TestData/AccessModifier/VirtualSymbolOverridden.wxs new file mode 100644 index 00000000..98e96766 --- /dev/null +++ b/src/wix/test/WixToolsetTest.CoreIntegration/TestData/AccessModifier/VirtualSymbolOverridden.wxs | |||
@@ -0,0 +1,12 @@ | |||
1 | <?xml version="1.0" encoding="utf-8"?> | ||
2 | <Wix xmlns="http://wixtoolset.org/schemas/v4/wxs"> | ||
3 | <Package Name="Virtual Symbol Overridden" Version="1.0.0.0" Manufacturer="Example Corporation" UpgradeCode="047730a5-30fe-4a62-a520-da9381b8226a"> | ||
4 | <StandardDirectory Id="ProgramFilesFolder"> | ||
5 | <Directory Id="virtual TestFolder" Name="Test Folder" /> | ||
6 | </StandardDirectory> | ||
7 | |||
8 | <StandardDirectory Id="ProgramFilesFolder"> | ||
9 | <Directory Id="override TestFolder" Name="Test Folder Overrode Virtual" /> | ||
10 | </StandardDirectory> | ||
11 | </Package> | ||
12 | </Wix> | ||
diff --git a/src/wix/test/WixToolsetTest.CoreIntegration/TestData/OverridableActions/Package.wxs b/src/wix/test/WixToolsetTest.CoreIntegration/TestData/OverridableActions/Package.wxs index 0bf0e963..ea10d012 100644 --- a/src/wix/test/WixToolsetTest.CoreIntegration/TestData/OverridableActions/Package.wxs +++ b/src/wix/test/WixToolsetTest.CoreIntegration/TestData/OverridableActions/Package.wxs | |||
@@ -36,7 +36,7 @@ | |||
36 | <ComponentGroup Id="Foo2" /> | 36 | <ComponentGroup Id="Foo2" /> |
37 | 37 | ||
38 | <InstallExecuteSequence> | 38 | <InstallExecuteSequence> |
39 | <Custom Action="SetBar" Before="AppSearch" /> | 39 | <Custom Action="override SetBar" Before="AppSearch" /> |
40 | </InstallExecuteSequence> | 40 | </InstallExecuteSequence> |
41 | </Fragment> | 41 | </Fragment> |
42 | 42 | ||
diff --git a/src/wix/test/WixToolsetTest.CoreIntegration/TestData/UI/DialogsInInstallUISequence.wxs b/src/wix/test/WixToolsetTest.CoreIntegration/TestData/UI/DialogsInInstallUISequence.wxs index ec6e62df..6b84e7f5 100644 --- a/src/wix/test/WixToolsetTest.CoreIntegration/TestData/UI/DialogsInInstallUISequence.wxs +++ b/src/wix/test/WixToolsetTest.CoreIntegration/TestData/UI/DialogsInInstallUISequence.wxs | |||
@@ -1,4 +1,4 @@ | |||
1 | <Wix xmlns="http://wixtoolset.org/schemas/v4/wxs"> | 1 | <Wix xmlns="http://wixtoolset.org/schemas/v4/wxs"> |
2 | <Fragment> | 2 | <Fragment> |
3 | <UI Id="CustomDialog"> | 3 | <UI Id="CustomDialog"> |
4 | <Dialog Id="FirstDialog" Width="100" Height="100"> | 4 | <Dialog Id="FirstDialog" Width="100" Height="100"> |
@@ -24,7 +24,7 @@ | |||
24 | 24 | ||
25 | <InstallUISequence> | 25 | <InstallUISequence> |
26 | <Show Dialog="FirstDialog" Before="SecondDialog" Condition="Installed AND PATCH" /> | 26 | <Show Dialog="FirstDialog" Before="SecondDialog" Condition="Installed AND PATCH" /> |
27 | <Show Dialog="SecondDialog" Before="ExecuteAction" Condition="NOT Installed" /> | 27 | <Show Dialog="override SecondDialog" Before="ExecuteAction" Condition="NOT Installed" /> |
28 | </InstallUISequence> | 28 | </InstallUISequence> |
29 | </UI> | 29 | </UI> |
30 | <ComponentGroup Id="ProductComponents" Directory="INSTALLFOLDER"> | 30 | <ComponentGroup Id="ProductComponents" Directory="INSTALLFOLDER"> |
diff --git a/src/wix/test/WixToolsetTest.CoreIntegration/UIFixture.cs b/src/wix/test/WixToolsetTest.CoreIntegration/UIFixture.cs index 8cd06331..c21ef9cb 100644 --- a/src/wix/test/WixToolsetTest.CoreIntegration/UIFixture.cs +++ b/src/wix/test/WixToolsetTest.CoreIntegration/UIFixture.cs | |||
@@ -2,15 +2,11 @@ | |||
2 | 2 | ||
3 | namespace WixToolsetTest.CoreIntegration | 3 | namespace WixToolsetTest.CoreIntegration |
4 | { | 4 | { |
5 | using System; | ||
6 | using System.IO; | 5 | using System.IO; |
7 | using System.Linq; | 6 | using System.Linq; |
8 | using Example.Extension; | ||
9 | using WixInternal.TestSupport; | ||
10 | using WixInternal.Core.TestPackage; | 7 | using WixInternal.Core.TestPackage; |
8 | using WixInternal.TestSupport; | ||
11 | using WixToolset.Data; | 9 | using WixToolset.Data; |
12 | using WixToolset.Data.Symbols; | ||
13 | using WixToolset.Data.WindowsInstaller; | ||
14 | using Xunit; | 10 | using Xunit; |
15 | 11 | ||
16 | public class UIFixture | 12 | public class UIFixture |
@@ -94,7 +90,7 @@ namespace WixToolsetTest.CoreIntegration | |||
94 | 21, | 90 | 21, |
95 | 52 | 91 | 52 |
96 | }, errors.Select(e => e.Id).ToArray()); | 92 | }, errors.Select(e => e.Id).ToArray()); |
97 | } | 93 | } |
98 | } | 94 | } |
99 | } | 95 | } |
100 | } | 96 | } |