@joebigelow / wix-1 / commits / 37992637

Initial support for virtual symbols.

Completes 7913

Rob Mensching committed Dec 5, 2023 at 16:11 UTC 379926377524951c692e8c342a49fb03da61345f
27 files changed +621 -200
src/api/wix/WixToolset.Data/AccessModifier.cs
+23 -1
@@ -28,11 +28,21 @@ namespace WixToolset.Data
28 Protected = File,
29
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>
33 Section,
34 [Obsolete]
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,
46 }
47
48 /// <summary>
@@ -65,6 +75,12 @@ namespace WixToolset.Data
75 case "private":
76 return AccessModifier.Section;
77
78 + case "virtual":
79 + return AccessModifier.Virtual;
80 +
81 + case "override":
82 + return AccessModifier.Override;
83 +
84 default:
85 throw new ArgumentException($"Unknown AccessModifier: {access}", nameof(access));
86 }
@@ -91,6 +107,12 @@ namespace WixToolset.Data
107 case AccessModifier.Section:
108 return "section";
109
110 + case AccessModifier.Virtual:
111 + return "virtual";
112 +
113 + case AccessModifier.Override:
114 + return "override";
115 +
116 default:
117 throw new ArgumentException($"Unknown AccessModifier: {access}", nameof(access));
118 }
src/api/wix/WixToolset.Data/ErrorMessages.cs
+2 -2
@@ -325,12 +325,12 @@ namespace WixToolset.Data
325
326 public static Message DuplicateSymbol(SourceLineNumber sourceLineNumbers, string symbolName)
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 }
330
331 public static Message DuplicateSymbol(SourceLineNumber sourceLineNumbers, string symbolName, string referencingSourceLineNumber)
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 }
335
336 public static Message DuplicateSymbol2(SourceLineNumber sourceLineNumbers)
src/api/wix/WixToolset.Data/WindowsInstaller/WindowsInstallerStandard.cs
+139 -139
@@ -213,157 +213,157 @@ namespace WixToolset.Data.WindowsInstaller
213 var standardActions = new[]
214 {
215 // AdminExecuteSequence
216 - new WixActionSymbol(null, new Identifier(AccessModifier.Global, "AdminExecuteSequence/LaunchConditions")) { Action="LaunchConditions", Sequence=100, SequenceTable=SequenceTable.AdminExecuteSequence, Overridable = true },
217 - new WixActionSymbol(null, new Identifier(AccessModifier.Global, "AdminExecuteSequence/CostInitialize")) { Action="CostInitialize", Sequence=800, SequenceTable=SequenceTable.AdminExecuteSequence, Overridable = true },
218 - new WixActionSymbol(null, new Identifier(AccessModifier.Global, "AdminExecuteSequence/FileCost")) { Action="FileCost", Sequence=900, SequenceTable=SequenceTable.AdminExecuteSequence, Overridable = true },
219 - new WixActionSymbol(null, new Identifier(AccessModifier.Global, "AdminExecuteSequence/CostFinalize")) { Action="CostFinalize", Sequence=1000, SequenceTable=SequenceTable.AdminExecuteSequence, Overridable = true },
220 - new WixActionSymbol(null, new Identifier(AccessModifier.Global, "AdminExecuteSequence/InstallValidate")) { Action="InstallValidate", Sequence=1400, SequenceTable=SequenceTable.AdminExecuteSequence, Overridable = true },
221 - new WixActionSymbol(null, new Identifier(AccessModifier.Global, "AdminExecuteSequence/InstallInitialize")) { Action="InstallInitialize", Sequence=1500, SequenceTable=SequenceTable.AdminExecuteSequence, Overridable = true },
222 - new WixActionSymbol(null, new Identifier(AccessModifier.Global, "AdminExecuteSequence/InstallAdminPackage")) { Action="InstallAdminPackage",Sequence=3900, SequenceTable=SequenceTable.AdminExecuteSequence, Overridable = true },
223 - new WixActionSymbol(null, new Identifier(AccessModifier.Global, "AdminExecuteSequence/InstallFiles")) { Action="InstallFiles", Sequence=4000, SequenceTable=SequenceTable.AdminExecuteSequence, Overridable = true },
224 - new WixActionSymbol(null, new Identifier(AccessModifier.Global, "AdminExecuteSequence/PatchFiles")) { Action="PatchFiles", Sequence=4090, SequenceTable=SequenceTable.AdminExecuteSequence, Overridable = true },
225 - new WixActionSymbol(null, new Identifier(AccessModifier.Global, "AdminExecuteSequence/InstallFinalize")) { Action="InstallFinalize", Sequence=6600, 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.Virtual, "AdminExecuteSequence/CostInitialize")) { Action="CostInitialize", Sequence=800, SequenceTable=SequenceTable.AdminExecuteSequence },
218 + new WixActionSymbol(null, new Identifier(AccessModifier.Virtual, "AdminExecuteSequence/FileCost")) { Action="FileCost", Sequence=900, SequenceTable=SequenceTable.AdminExecuteSequence },
219 + new WixActionSymbol(null, new Identifier(AccessModifier.Virtual, "AdminExecuteSequence/CostFinalize")) { Action="CostFinalize", Sequence=1000, SequenceTable=SequenceTable.AdminExecuteSequence },
220 + new WixActionSymbol(null, new Identifier(AccessModifier.Virtual, "AdminExecuteSequence/InstallValidate")) { Action="InstallValidate", Sequence=1400, SequenceTable=SequenceTable.AdminExecuteSequence },
221 + new WixActionSymbol(null, new Identifier(AccessModifier.Virtual, "AdminExecuteSequence/InstallInitialize")) { Action="InstallInitialize", Sequence=1500, SequenceTable=SequenceTable.AdminExecuteSequence },
222 + new WixActionSymbol(null, new Identifier(AccessModifier.Virtual, "AdminExecuteSequence/InstallAdminPackage")) { Action="InstallAdminPackage",Sequence=3900, SequenceTable=SequenceTable.AdminExecuteSequence },
223 + new WixActionSymbol(null, new Identifier(AccessModifier.Virtual, "AdminExecuteSequence/InstallFiles")) { Action="InstallFiles", Sequence=4000, SequenceTable=SequenceTable.AdminExecuteSequence },
224 + new WixActionSymbol(null, new Identifier(AccessModifier.Virtual, "AdminExecuteSequence/PatchFiles")) { Action="PatchFiles", Sequence=4090, SequenceTable=SequenceTable.AdminExecuteSequence },
225 + new WixActionSymbol(null, new Identifier(AccessModifier.Virtual, "AdminExecuteSequence/InstallFinalize")) { Action="InstallFinalize", Sequence=6600, SequenceTable=SequenceTable.AdminExecuteSequence },
226
227 // AdminUISequence
228 - new WixActionSymbol(null, new Identifier(AccessModifier.Global, "AdminUISequence/LaunchConditions")) { Action="LaunchConditions", Sequence=100, SequenceTable=SequenceTable.AdminUISequence, Overridable = true },
229 - new WixActionSymbol(null, new Identifier(AccessModifier.Global, "AdminUISequence/CostInitialize")) { Action="CostInitialize", Sequence=800, SequenceTable=SequenceTable.AdminUISequence, Overridable = true },
230 - new WixActionSymbol(null, new Identifier(AccessModifier.Global, "AdminUISequence/FileCost")) { Action="FileCost", Sequence=900, SequenceTable=SequenceTable.AdminUISequence, Overridable = true },
231 - new WixActionSymbol(null, new Identifier(AccessModifier.Global, "AdminUISequence/CostFinalize")) { Action="CostFinalize", Sequence=1000, SequenceTable=SequenceTable.AdminUISequence, Overridable = true },
232 - new WixActionSymbol(null, new Identifier(AccessModifier.Global, "AdminUISequence/ExecuteAction")) { Action="ExecuteAction", Sequence=1300, 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.Virtual, "AdminUISequence/CostInitialize")) { Action="CostInitialize", Sequence=800, SequenceTable=SequenceTable.AdminUISequence },
230 + new WixActionSymbol(null, new Identifier(AccessModifier.Virtual, "AdminUISequence/FileCost")) { Action="FileCost", Sequence=900, SequenceTable=SequenceTable.AdminUISequence },
231 + new WixActionSymbol(null, new Identifier(AccessModifier.Virtual, "AdminUISequence/CostFinalize")) { Action="CostFinalize", Sequence=1000, SequenceTable=SequenceTable.AdminUISequence },
232 + new WixActionSymbol(null, new Identifier(AccessModifier.Virtual, "AdminUISequence/ExecuteAction")) { Action="ExecuteAction", Sequence=1300, SequenceTable=SequenceTable.AdminUISequence },
233
234 // AdvertiseExecuteSequence
235 - new WixActionSymbol(null, new Identifier(AccessModifier.Global, "AdvertiseExecuteSequence/CostInitialize")) { Action="CostInitialize", Sequence=800, SequenceTable=SequenceTable.AdvertiseExecuteSequence, Overridable = true },
236 - new WixActionSymbol(null, new Identifier(AccessModifier.Global, "AdvertiseExecuteSequence/CostFinalize")) { Action="CostFinalize", Sequence=1000, SequenceTable=SequenceTable.AdvertiseExecuteSequence, Overridable = true },
237 - new WixActionSymbol(null, new Identifier(AccessModifier.Global, "AdvertiseExecuteSequence/InstallValidate")) { Action="InstallValidate", Sequence=1400, SequenceTable=SequenceTable.AdvertiseExecuteSequence, Overridable = true },
238 - new WixActionSymbol(null, new Identifier(AccessModifier.Global, "AdvertiseExecuteSequence/InstallInitialize")) { Action="InstallInitialize", Sequence=1500, SequenceTable=SequenceTable.AdvertiseExecuteSequence, Overridable = true },
239 - new WixActionSymbol(null, new Identifier(AccessModifier.Global, "AdvertiseExecuteSequence/CreateShortcuts")) { Action="CreateShortcuts", Sequence=4500, SequenceTable=SequenceTable.AdvertiseExecuteSequence, Overridable = true },
240 - new WixActionSymbol(null, new Identifier(AccessModifier.Global, "AdvertiseExecuteSequence/RegisterClassInfo")) { Action="RegisterClassInfo", Sequence=4600, SequenceTable=SequenceTable.AdvertiseExecuteSequence, Overridable = true },
241 - new WixActionSymbol(null, new Identifier(AccessModifier.Global, "AdvertiseExecuteSequence/RegisterExtensionInfo")) { Action="RegisterExtensionInfo", Sequence=4700, SequenceTable=SequenceTable.AdvertiseExecuteSequence, Overridable = true },
242 - new WixActionSymbol(null, new Identifier(AccessModifier.Global, "AdvertiseExecuteSequence/RegisterProgIdInfo")) { Action="RegisterProgIdInfo", Sequence=4800, SequenceTable=SequenceTable.AdvertiseExecuteSequence, Overridable = true },
243 - new WixActionSymbol(null, new Identifier(AccessModifier.Global, "AdvertiseExecuteSequence/RegisterMIMEInfo")) { Action="RegisterMIMEInfo", Sequence=4900, SequenceTable=SequenceTable.AdvertiseExecuteSequence, Overridable = true },
244 - new WixActionSymbol(null, new Identifier(AccessModifier.Global, "AdvertiseExecuteSequence/PublishComponents")) { Action="PublishComponents", Sequence=6200, SequenceTable=SequenceTable.AdvertiseExecuteSequence, Overridable = true },
245 - new WixActionSymbol(null, new Identifier(AccessModifier.Global, "AdvertiseExecuteSequence/MsiPublishAssemblies")) { Action="MsiPublishAssemblies", Sequence=6250, SequenceTable=SequenceTable.AdvertiseExecuteSequence, Overridable = true },
246 - new WixActionSymbol(null, new Identifier(AccessModifier.Global, "AdvertiseExecuteSequence/PublishFeatures")) { Action="PublishFeatures", Sequence=6300, SequenceTable=SequenceTable.AdvertiseExecuteSequence, Overridable = true },
247 - new WixActionSymbol(null, new Identifier(AccessModifier.Global, "AdvertiseExecuteSequence/PublishProduct")) { Action="PublishProduct", Sequence=6400, SequenceTable=SequenceTable.AdvertiseExecuteSequence, Overridable = true },
248 - new WixActionSymbol(null, new Identifier(AccessModifier.Global, "AdvertiseExecuteSequence/InstallFinalize")) { Action="InstallFinalize", Sequence=6600, 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.Virtual, "AdvertiseExecuteSequence/CostFinalize")) { Action="CostFinalize", Sequence=1000, SequenceTable=SequenceTable.AdvertiseExecuteSequence },
237 + new WixActionSymbol(null, new Identifier(AccessModifier.Virtual, "AdvertiseExecuteSequence/InstallValidate")) { Action="InstallValidate", Sequence=1400, SequenceTable=SequenceTable.AdvertiseExecuteSequence },
238 + new WixActionSymbol(null, new Identifier(AccessModifier.Virtual, "AdvertiseExecuteSequence/InstallInitialize")) { Action="InstallInitialize", Sequence=1500, SequenceTable=SequenceTable.AdvertiseExecuteSequence },
239 + new WixActionSymbol(null, new Identifier(AccessModifier.Virtual, "AdvertiseExecuteSequence/CreateShortcuts")) { Action="CreateShortcuts", Sequence=4500, SequenceTable=SequenceTable.AdvertiseExecuteSequence },
240 + new WixActionSymbol(null, new Identifier(AccessModifier.Virtual, "AdvertiseExecuteSequence/RegisterClassInfo")) { Action="RegisterClassInfo", Sequence=4600, SequenceTable=SequenceTable.AdvertiseExecuteSequence },
241 + new WixActionSymbol(null, new Identifier(AccessModifier.Virtual, "AdvertiseExecuteSequence/RegisterExtensionInfo")) { Action="RegisterExtensionInfo", Sequence=4700, SequenceTable=SequenceTable.AdvertiseExecuteSequence },
242 + new WixActionSymbol(null, new Identifier(AccessModifier.Virtual, "AdvertiseExecuteSequence/RegisterProgIdInfo")) { Action="RegisterProgIdInfo", Sequence=4800, SequenceTable=SequenceTable.AdvertiseExecuteSequence },
243 + new WixActionSymbol(null, new Identifier(AccessModifier.Virtual, "AdvertiseExecuteSequence/RegisterMIMEInfo")) { Action="RegisterMIMEInfo", Sequence=4900, SequenceTable=SequenceTable.AdvertiseExecuteSequence },
244 + new WixActionSymbol(null, new Identifier(AccessModifier.Virtual, "AdvertiseExecuteSequence/PublishComponents")) { Action="PublishComponents", Sequence=6200, SequenceTable=SequenceTable.AdvertiseExecuteSequence },
245 + new WixActionSymbol(null, new Identifier(AccessModifier.Virtual, "AdvertiseExecuteSequence/MsiPublishAssemblies")) { Action="MsiPublishAssemblies", Sequence=6250, SequenceTable=SequenceTable.AdvertiseExecuteSequence },
246 + new WixActionSymbol(null, new Identifier(AccessModifier.Virtual, "AdvertiseExecuteSequence/PublishFeatures")) { Action="PublishFeatures", Sequence=6300, SequenceTable=SequenceTable.AdvertiseExecuteSequence },
247 + new WixActionSymbol(null, new Identifier(AccessModifier.Virtual, "AdvertiseExecuteSequence/PublishProduct")) { Action="PublishProduct", Sequence=6400, SequenceTable=SequenceTable.AdvertiseExecuteSequence },
248 + new WixActionSymbol(null, new Identifier(AccessModifier.Virtual, "AdvertiseExecuteSequence/InstallFinalize")) { Action="InstallFinalize", Sequence=6600, SequenceTable=SequenceTable.AdvertiseExecuteSequence },
249
250 // InstallUISequence
251 - new WixActionSymbol(null, new Identifier(AccessModifier.Global, "InstallUISequence/FindRelatedProducts")) { Action="FindRelatedProducts", Sequence=25, SequenceTable=SequenceTable.InstallUISequence, Overridable = true },
252 - new WixActionSymbol(null, new Identifier(AccessModifier.Global, "InstallUISequence/AppSearch")) { Action="AppSearch", Sequence=50, SequenceTable=SequenceTable.InstallUISequence, Overridable = true },
253 - new WixActionSymbol(null, new Identifier(AccessModifier.Global, "InstallUISequence/LaunchConditions")) { Action="LaunchConditions", Sequence=100, SequenceTable=SequenceTable.InstallUISequence, Overridable = true },
254 - new WixActionSymbol(null, new Identifier(AccessModifier.Global, "InstallUISequence/CCPSearch")) { Action="CCPSearch", Sequence=500, SequenceTable=SequenceTable.InstallUISequence, Overridable = true, 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" },
256 - new WixActionSymbol(null, new Identifier(AccessModifier.Global, "InstallUISequence/ValidateProductID")) { Action="ValidateProductID", Sequence=700, SequenceTable=SequenceTable.InstallUISequence, Overridable = true },
257 - new WixActionSymbol(null, new Identifier(AccessModifier.Global, "InstallUISequence/CostInitialize")) { Action="CostInitialize", Sequence=800, SequenceTable=SequenceTable.InstallUISequence, Overridable = true },
258 - new WixActionSymbol(null, new Identifier(AccessModifier.Global, "InstallUISequence/FileCost")) { Action="FileCost", Sequence=900, SequenceTable=SequenceTable.InstallUISequence, Overridable = true },
259 - new WixActionSymbol(null, new Identifier(AccessModifier.Global, "InstallUISequence/IsolateComponents")) { Action="IsolateComponents", Sequence=950, SequenceTable=SequenceTable.InstallUISequence, Overridable = true },
260 - new WixActionSymbol(null, new Identifier(AccessModifier.Global, "InstallUISequence/CostFinalize")) { Action="CostFinalize", Sequence=1000, SequenceTable=SequenceTable.InstallUISequence, Overridable = true },
261 - new WixActionSymbol(null, new Identifier(AccessModifier.Global, "InstallUISequence/MigrateFeatureStates")) { Action="MigrateFeatureStates", Sequence=1200, SequenceTable=SequenceTable.InstallUISequence, Overridable = true },
262 - new WixActionSymbol(null, new Identifier(AccessModifier.Global, "InstallUISequence/ExecuteAction")) { Action="ExecuteAction", Sequence=1300, 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.Virtual, "InstallUISequence/AppSearch")) { Action="AppSearch", Sequence=50, SequenceTable=SequenceTable.InstallUISequence },
253 + new WixActionSymbol(null, new Identifier(AccessModifier.Virtual, "InstallUISequence/LaunchConditions")) { Action="LaunchConditions", Sequence=100, SequenceTable=SequenceTable.InstallUISequence },
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.Virtual, "InstallUISequence/RMCCPSearch")) { Action="RMCCPSearch", Sequence=600, SequenceTable=SequenceTable.InstallUISequence, Condition="NOT Installed" },
256 + new WixActionSymbol(null, new Identifier(AccessModifier.Virtual, "InstallUISequence/ValidateProductID")) { Action="ValidateProductID", Sequence=700, SequenceTable=SequenceTable.InstallUISequence },
257 + new WixActionSymbol(null, new Identifier(AccessModifier.Virtual, "InstallUISequence/CostInitialize")) { Action="CostInitialize", Sequence=800, SequenceTable=SequenceTable.InstallUISequence },
258 + new WixActionSymbol(null, new Identifier(AccessModifier.Virtual, "InstallUISequence/FileCost")) { Action="FileCost", Sequence=900, SequenceTable=SequenceTable.InstallUISequence },
259 + new WixActionSymbol(null, new Identifier(AccessModifier.Virtual, "InstallUISequence/IsolateComponents")) { Action="IsolateComponents", Sequence=950, SequenceTable=SequenceTable.InstallUISequence },
260 + new WixActionSymbol(null, new Identifier(AccessModifier.Virtual, "InstallUISequence/CostFinalize")) { Action="CostFinalize", Sequence=1000, SequenceTable=SequenceTable.InstallUISequence },
261 + new WixActionSymbol(null, new Identifier(AccessModifier.Virtual, "InstallUISequence/MigrateFeatureStates")) { Action="MigrateFeatureStates", Sequence=1200, SequenceTable=SequenceTable.InstallUISequence },
262 + new WixActionSymbol(null, new Identifier(AccessModifier.Virtual, "InstallUISequence/ExecuteAction")) { Action="ExecuteAction", Sequence=1300, SequenceTable=SequenceTable.InstallUISequence },
263
264 // InstallExecuteSequence
265 - new WixActionSymbol(null, new Identifier(AccessModifier.Global, "InstallExecuteSequence/FindRelatedProducts")) { Action="FindRelatedProducts", Sequence=25, SequenceTable=SequenceTable.InstallExecuteSequence, Overridable = true },
266 - new WixActionSymbol(null, new Identifier(AccessModifier.Global, "InstallExecuteSequence/AppSearch")) { Action="AppSearch", Sequence=50, SequenceTable=SequenceTable.InstallExecuteSequence, Overridable = true },
267 - new WixActionSymbol(null, new Identifier(AccessModifier.Global, "InstallExecuteSequence/LaunchConditions")) { Action="LaunchConditions", Sequence=100, SequenceTable=SequenceTable.InstallExecuteSequence, Overridable = true },
268 - new WixActionSymbol(null, new Identifier(AccessModifier.Global, "InstallExecuteSequence/CCPSearch")) { Action="CCPSearch", Sequence=500, SequenceTable=SequenceTable.InstallExecuteSequence, Overridable = true, 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" },
270 - new WixActionSymbol(null, new Identifier(AccessModifier.Global, "InstallExecuteSequence/ValidateProductID")) { Action="ValidateProductID", Sequence=700, SequenceTable=SequenceTable.InstallExecuteSequence, Overridable = true },
271 - new WixActionSymbol(null, new Identifier(AccessModifier.Global, "InstallExecuteSequence/CostInitialize")) { Action="CostInitialize", Sequence=800, SequenceTable=SequenceTable.InstallExecuteSequence, Overridable = true },
272 - new WixActionSymbol(null, new Identifier(AccessModifier.Global, "InstallExecuteSequence/FileCost")) { Action="FileCost", Sequence=900, SequenceTable=SequenceTable.InstallExecuteSequence, Overridable = true },
273 - new WixActionSymbol(null, new Identifier(AccessModifier.Global, "InstallExecuteSequence/IsolateComponents")) { Action="IsolateComponents", Sequence=950, SequenceTable=SequenceTable.InstallExecuteSequence, Overridable = true },
274 - new WixActionSymbol(null, new Identifier(AccessModifier.Global, "InstallExecuteSequence/CostFinalize")) { Action="CostFinalize", Sequence=1000, SequenceTable=SequenceTable.InstallExecuteSequence, Overridable = true },
275 - new WixActionSymbol(null, new Identifier(AccessModifier.Global, "InstallExecuteSequence/SetODBCFolders")) { Action="SetODBCFolders", Sequence=1100, SequenceTable=SequenceTable.InstallExecuteSequence, Overridable = true },
276 - new WixActionSymbol(null, new Identifier(AccessModifier.Global, "InstallExecuteSequence/MigrateFeatureStates")) { Action="MigrateFeatureStates", Sequence=1200, SequenceTable=SequenceTable.InstallExecuteSequence, Overridable = true },
277 - new WixActionSymbol(null, new Identifier(AccessModifier.Global, "InstallExecuteSequence/InstallValidate")) { Action="InstallValidate", Sequence=1400, SequenceTable=SequenceTable.InstallExecuteSequence, Overridable = true },
278 - new WixActionSymbol(null, new Identifier(AccessModifier.Global, "InstallExecuteSequence/InstallInitialize")) { Action="InstallInitialize", Sequence=1500, SequenceTable=SequenceTable.InstallExecuteSequence, Overridable = true },
279 - new WixActionSymbol(null, new Identifier(AccessModifier.Global, "InstallExecuteSequence/AllocateRegistrySpace")) { Action="AllocateRegistrySpace", Sequence=1550, SequenceTable=SequenceTable.InstallExecuteSequence, Overridable = true },
280 - new WixActionSymbol(null, new Identifier(AccessModifier.Global, "InstallExecuteSequence/ProcessComponents")) { Action="ProcessComponents", Sequence=1600, SequenceTable=SequenceTable.InstallExecuteSequence, Overridable = true },
281 - new WixActionSymbol(null, new Identifier(AccessModifier.Global, "InstallExecuteSequence/UnpublishComponents")) { Action="UnpublishComponents", Sequence=1700, SequenceTable=SequenceTable.InstallExecuteSequence, Overridable = true },
282 - new WixActionSymbol(null, new Identifier(AccessModifier.Global, "InstallExecuteSequence/MsiUnpublishAssemblies")) { Action="MsiUnpublishAssemblies", Sequence=1750, SequenceTable=SequenceTable.InstallExecuteSequence, Overridable = true },
283 - new WixActionSymbol(null, new Identifier(AccessModifier.Global, "InstallExecuteSequence/UnpublishFeatures")) { Action="UnpublishFeatures", Sequence=1800, SequenceTable=SequenceTable.InstallExecuteSequence, Overridable = true },
284 - new WixActionSymbol(null, new Identifier(AccessModifier.Global, "InstallExecuteSequence/StopServices")) { Action="StopServices", Sequence=1900, SequenceTable=SequenceTable.InstallExecuteSequence, Overridable = true, Condition="VersionNT" },
285 - new WixActionSymbol(null, new Identifier(AccessModifier.Global, "InstallExecuteSequence/DeleteServices")) { Action="DeleteServices", Sequence=2000, SequenceTable=SequenceTable.InstallExecuteSequence, Overridable = true, Condition="VersionNT" },
286 - new WixActionSymbol(null, new Identifier(AccessModifier.Global, "InstallExecuteSequence/UnregisterComPlus")) { Action="UnregisterComPlus", Sequence=2100, SequenceTable=SequenceTable.InstallExecuteSequence, Overridable = true },
287 - new WixActionSymbol(null, new Identifier(AccessModifier.Global, "InstallExecuteSequence/SelfUnregModules")) { Action="SelfUnregModules", Sequence=2200, SequenceTable=SequenceTable.InstallExecuteSequence, Overridable = true },
288 - new WixActionSymbol(null, new Identifier(AccessModifier.Global, "InstallExecuteSequence/UnregisterTypeLibraries")) { Action="UnregisterTypeLibraries", Sequence=2300, SequenceTable=SequenceTable.InstallExecuteSequence, Overridable = true },
289 - new WixActionSymbol(null, new Identifier(AccessModifier.Global, "InstallExecuteSequence/RemoveODBC")) { Action="RemoveODBC", Sequence=2400, SequenceTable=SequenceTable.InstallExecuteSequence, Overridable = true },
290 - new WixActionSymbol(null, new Identifier(AccessModifier.Global, "InstallExecuteSequence/UnregisterFonts")) { Action="UnregisterFonts", Sequence=2500, SequenceTable=SequenceTable.InstallExecuteSequence, Overridable = true },
291 - new WixActionSymbol(null, new Identifier(AccessModifier.Global, "InstallExecuteSequence/RemoveRegistryValues")) { Action="RemoveRegistryValues", Sequence=2600, SequenceTable=SequenceTable.InstallExecuteSequence, Overridable = true },
292 - new WixActionSymbol(null, new Identifier(AccessModifier.Global, "InstallExecuteSequence/UnregisterClassInfo")) { Action="UnregisterClassInfo", Sequence=2700, SequenceTable=SequenceTable.InstallExecuteSequence, Overridable = true },
293 - new WixActionSymbol(null, new Identifier(AccessModifier.Global, "InstallExecuteSequence/UnregisterExtensionInfo")) { Action="UnregisterExtensionInfo", Sequence=2800, SequenceTable=SequenceTable.InstallExecuteSequence, Overridable = true },
294 - new WixActionSymbol(null, new Identifier(AccessModifier.Global, "InstallExecuteSequence/UnregisterProgIdInfo")) { Action="UnregisterProgIdInfo", Sequence=2900, SequenceTable=SequenceTable.InstallExecuteSequence, Overridable = true },
295 - new WixActionSymbol(null, new Identifier(AccessModifier.Global, "InstallExecuteSequence/UnregisterMIMEInfo")) { Action="UnregisterMIMEInfo", Sequence=3000, SequenceTable=SequenceTable.InstallExecuteSequence, Overridable = true },
296 - new WixActionSymbol(null, new Identifier(AccessModifier.Global, "InstallExecuteSequence/RemoveIniValues")) { Action="RemoveIniValues", Sequence=3100, SequenceTable=SequenceTable.InstallExecuteSequence, Overridable = true },
297 - new WixActionSymbol(null, new Identifier(AccessModifier.Global, "InstallExecuteSequence/RemoveShortcuts")) { Action="RemoveShortcuts", Sequence=3200, SequenceTable=SequenceTable.InstallExecuteSequence, Overridable = true },
298 - new WixActionSymbol(null, new Identifier(AccessModifier.Global, "InstallExecuteSequence/RemoveEnvironmentStrings")) { Action="RemoveEnvironmentStrings", Sequence=3300, SequenceTable=SequenceTable.InstallExecuteSequence, Overridable = true },
299 - new WixActionSymbol(null, new Identifier(AccessModifier.Global, "InstallExecuteSequence/RemoveDuplicateFiles")) { Action="RemoveDuplicateFiles", Sequence=3400, SequenceTable=SequenceTable.InstallExecuteSequence, Overridable = true },
300 - new WixActionSymbol(null, new Identifier(AccessModifier.Global, "InstallExecuteSequence/RemoveFiles")) { Action="RemoveFiles", Sequence=3500, SequenceTable=SequenceTable.InstallExecuteSequence, Overridable = true },
301 - new WixActionSymbol(null, new Identifier(AccessModifier.Global, "InstallExecuteSequence/RemoveFolders")) { Action="RemoveFolders", Sequence=3600, SequenceTable=SequenceTable.InstallExecuteSequence, Overridable = true },
302 - new WixActionSymbol(null, new Identifier(AccessModifier.Global, "InstallExecuteSequence/CreateFolders")) { Action="CreateFolders", Sequence=3700, SequenceTable=SequenceTable.InstallExecuteSequence, Overridable = true },
303 - new WixActionSymbol(null, new Identifier(AccessModifier.Global, "InstallExecuteSequence/MoveFiles")) { Action="MoveFiles", Sequence=3800, SequenceTable=SequenceTable.InstallExecuteSequence, Overridable = true },
304 - new WixActionSymbol(null, new Identifier(AccessModifier.Global, "InstallExecuteSequence/InstallFiles")) { Action="InstallFiles", Sequence=4000, SequenceTable=SequenceTable.InstallExecuteSequence, Overridable = true },
305 - new WixActionSymbol(null, new Identifier(AccessModifier.Global, "InstallExecuteSequence/PatchFiles")) { Action="PatchFiles", Sequence=4090, SequenceTable=SequenceTable.InstallExecuteSequence, Overridable = true },
306 - new WixActionSymbol(null, new Identifier(AccessModifier.Global, "InstallExecuteSequence/DuplicateFiles")) { Action="DuplicateFiles", Sequence=4210, SequenceTable=SequenceTable.InstallExecuteSequence, Overridable = true },
307 - new WixActionSymbol(null, new Identifier(AccessModifier.Global, "InstallExecuteSequence/BindImage")) { Action="BindImage", Sequence=4300, SequenceTable=SequenceTable.InstallExecuteSequence, Overridable = true },
308 - new WixActionSymbol(null, new Identifier(AccessModifier.Global, "InstallExecuteSequence/CreateShortcuts")) { Action="CreateShortcuts", Sequence=4500, SequenceTable=SequenceTable.InstallExecuteSequence, Overridable = true },
309 - new WixActionSymbol(null, new Identifier(AccessModifier.Global, "InstallExecuteSequence/RegisterClassInfo")) { Action="RegisterClassInfo", Sequence=4600, SequenceTable=SequenceTable.InstallExecuteSequence, Overridable = true },
310 - new WixActionSymbol(null, new Identifier(AccessModifier.Global, "InstallExecuteSequence/RegisterExtensionInfo")) { Action="RegisterExtensionInfo", Sequence=4700, SequenceTable=SequenceTable.InstallExecuteSequence, Overridable = true },
311 - new WixActionSymbol(null, new Identifier(AccessModifier.Global, "InstallExecuteSequence/RegisterProgIdInfo")) { Action="RegisterProgIdInfo", Sequence=4800, SequenceTable=SequenceTable.InstallExecuteSequence, Overridable = true },
312 - new WixActionSymbol(null, new Identifier(AccessModifier.Global, "InstallExecuteSequence/RegisterMIMEInfo")) { Action="RegisterMIMEInfo", Sequence=4900, SequenceTable=SequenceTable.InstallExecuteSequence, Overridable = true },
313 - new WixActionSymbol(null, new Identifier(AccessModifier.Global, "InstallExecuteSequence/WriteRegistryValues")) { Action="WriteRegistryValues", Sequence=5000, SequenceTable=SequenceTable.InstallExecuteSequence, Overridable = true },
314 - new WixActionSymbol(null, new Identifier(AccessModifier.Global, "InstallExecuteSequence/WriteIniValues")) { Action="WriteIniValues", Sequence=5100, SequenceTable=SequenceTable.InstallExecuteSequence, Overridable = true },
315 - new WixActionSymbol(null, new Identifier(AccessModifier.Global, "InstallExecuteSequence/WriteEnvironmentStrings")) { Action="WriteEnvironmentStrings", Sequence=5200, SequenceTable=SequenceTable.InstallExecuteSequence, Overridable = true },
316 - new WixActionSymbol(null, new Identifier(AccessModifier.Global, "InstallExecuteSequence/RegisterFonts")) { Action="RegisterFonts", Sequence=5300, SequenceTable=SequenceTable.InstallExecuteSequence, Overridable = true },
317 - new WixActionSymbol(null, new Identifier(AccessModifier.Global, "InstallExecuteSequence/InstallODBC")) { Action="InstallODBC", Sequence=5400, SequenceTable=SequenceTable.InstallExecuteSequence, Overridable = true },
318 - new WixActionSymbol(null, new Identifier(AccessModifier.Global, "InstallExecuteSequence/RegisterTypeLibraries")) { Action="RegisterTypeLibraries", Sequence=5500, SequenceTable=SequenceTable.InstallExecuteSequence, Overridable = true },
319 - new WixActionSymbol(null, new Identifier(AccessModifier.Global, "InstallExecuteSequence/SelfRegModules")) { Action="SelfRegModules", Sequence=5600, SequenceTable=SequenceTable.InstallExecuteSequence, Overridable = true },
320 - new WixActionSymbol(null, new Identifier(AccessModifier.Global, "InstallExecuteSequence/RegisterComPlus")) { Action="RegisterComPlus", Sequence=5700, SequenceTable=SequenceTable.InstallExecuteSequence, Overridable = true },
321 - new WixActionSymbol(null, new Identifier(AccessModifier.Global, "InstallExecuteSequence/InstallServices")) { Action="InstallServices", Sequence=5800, SequenceTable=SequenceTable.InstallExecuteSequence, Overridable = true, Condition="VersionNT" },
322 - new WixActionSymbol(null, new Identifier(AccessModifier.Global, "InstallExecuteSequence/MsiConfigureServices")) { Action="MsiConfigureServices", Sequence=5850, SequenceTable=SequenceTable.InstallExecuteSequence, Overridable = true, Condition="VersionNT>=600" },
323 - new WixActionSymbol(null, new Identifier(AccessModifier.Global, "InstallExecuteSequence/StartServices")) { Action="StartServices", Sequence=5900, SequenceTable=SequenceTable.InstallExecuteSequence, Overridable = true, Condition="VersionNT" },
324 - new WixActionSymbol(null, new Identifier(AccessModifier.Global, "InstallExecuteSequence/RegisterUser")) { Action="RegisterUser", Sequence=6000, SequenceTable=SequenceTable.InstallExecuteSequence, Overridable = true },
325 - new WixActionSymbol(null, new Identifier(AccessModifier.Global, "InstallExecuteSequence/RegisterProduct")) { Action="RegisterProduct", Sequence=6100, SequenceTable=SequenceTable.InstallExecuteSequence, Overridable = true },
326 - new WixActionSymbol(null, new Identifier(AccessModifier.Global, "InstallExecuteSequence/PublishComponents")) { Action="PublishComponents", Sequence=6200, SequenceTable=SequenceTable.InstallExecuteSequence, Overridable = true },
327 - new WixActionSymbol(null, new Identifier(AccessModifier.Global, "InstallExecuteSequence/MsiPublishAssemblies")) { Action="MsiPublishAssemblies", Sequence=6250, SequenceTable=SequenceTable.InstallExecuteSequence, Overridable = true },
328 - new WixActionSymbol(null, new Identifier(AccessModifier.Global, "InstallExecuteSequence/PublishFeatures")) { Action="PublishFeatures", Sequence=6300, SequenceTable=SequenceTable.InstallExecuteSequence, Overridable = true },
329 - new WixActionSymbol(null, new Identifier(AccessModifier.Global, "InstallExecuteSequence/PublishProduct")) { Action="PublishProduct", Sequence=6400, SequenceTable=SequenceTable.InstallExecuteSequence, Overridable = true },
330 - new WixActionSymbol(null, new Identifier(AccessModifier.Global, "InstallExecuteSequence/InstallExecute")) { Action="InstallExecute", Sequence=6500, SequenceTable=SequenceTable.InstallExecuteSequence, Overridable = true, 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" },
332 - new WixActionSymbol(null, new Identifier(AccessModifier.Global, "InstallExecuteSequence/InstallFinalize")) { Action="InstallFinalize", Sequence=6600, 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.Virtual, "InstallExecuteSequence/AppSearch")) { Action="AppSearch", Sequence=50, SequenceTable=SequenceTable.InstallExecuteSequence },
267 + new WixActionSymbol(null, new Identifier(AccessModifier.Virtual, "InstallExecuteSequence/LaunchConditions")) { Action="LaunchConditions", Sequence=100, SequenceTable=SequenceTable.InstallExecuteSequence },
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.Virtual, "InstallExecuteSequence/RMCCPSearch")) { Action="RMCCPSearch", Sequence=600, SequenceTable=SequenceTable.InstallExecuteSequence, Condition="NOT Installed" },
270 + new WixActionSymbol(null, new Identifier(AccessModifier.Virtual, "InstallExecuteSequence/ValidateProductID")) { Action="ValidateProductID", Sequence=700, SequenceTable=SequenceTable.InstallExecuteSequence },
271 + new WixActionSymbol(null, new Identifier(AccessModifier.Virtual, "InstallExecuteSequence/CostInitialize")) { Action="CostInitialize", Sequence=800, SequenceTable=SequenceTable.InstallExecuteSequence },
272 + new WixActionSymbol(null, new Identifier(AccessModifier.Virtual, "InstallExecuteSequence/FileCost")) { Action="FileCost", Sequence=900, SequenceTable=SequenceTable.InstallExecuteSequence },
273 + new WixActionSymbol(null, new Identifier(AccessModifier.Virtual, "InstallExecuteSequence/IsolateComponents")) { Action="IsolateComponents", Sequence=950, SequenceTable=SequenceTable.InstallExecuteSequence },
274 + new WixActionSymbol(null, new Identifier(AccessModifier.Virtual, "InstallExecuteSequence/CostFinalize")) { Action="CostFinalize", Sequence=1000, SequenceTable=SequenceTable.InstallExecuteSequence },
275 + new WixActionSymbol(null, new Identifier(AccessModifier.Virtual, "InstallExecuteSequence/SetODBCFolders")) { Action="SetODBCFolders", Sequence=1100, SequenceTable=SequenceTable.InstallExecuteSequence },
276 + new WixActionSymbol(null, new Identifier(AccessModifier.Virtual, "InstallExecuteSequence/MigrateFeatureStates")) { Action="MigrateFeatureStates", Sequence=1200, SequenceTable=SequenceTable.InstallExecuteSequence },
277 + new WixActionSymbol(null, new Identifier(AccessModifier.Virtual, "InstallExecuteSequence/InstallValidate")) { Action="InstallValidate", Sequence=1400, SequenceTable=SequenceTable.InstallExecuteSequence },
278 + new WixActionSymbol(null, new Identifier(AccessModifier.Virtual, "InstallExecuteSequence/InstallInitialize")) { Action="InstallInitialize", Sequence=1500, SequenceTable=SequenceTable.InstallExecuteSequence },
279 + new WixActionSymbol(null, new Identifier(AccessModifier.Virtual, "InstallExecuteSequence/AllocateRegistrySpace")) { Action="AllocateRegistrySpace", Sequence=1550, SequenceTable=SequenceTable.InstallExecuteSequence },
280 + new WixActionSymbol(null, new Identifier(AccessModifier.Virtual, "InstallExecuteSequence/ProcessComponents")) { Action="ProcessComponents", Sequence=1600, SequenceTable=SequenceTable.InstallExecuteSequence },
281 + new WixActionSymbol(null, new Identifier(AccessModifier.Virtual, "InstallExecuteSequence/UnpublishComponents")) { Action="UnpublishComponents", Sequence=1700, SequenceTable=SequenceTable.InstallExecuteSequence },
282 + new WixActionSymbol(null, new Identifier(AccessModifier.Virtual, "InstallExecuteSequence/MsiUnpublishAssemblies")) { Action="MsiUnpublishAssemblies", Sequence=1750, SequenceTable=SequenceTable.InstallExecuteSequence },
283 + new WixActionSymbol(null, new Identifier(AccessModifier.Virtual, "InstallExecuteSequence/UnpublishFeatures")) { Action="UnpublishFeatures", Sequence=1800, SequenceTable=SequenceTable.InstallExecuteSequence },
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.Virtual, "InstallExecuteSequence/DeleteServices")) { Action="DeleteServices", Sequence=2000, SequenceTable=SequenceTable.InstallExecuteSequence, Condition="VersionNT" },
286 + new WixActionSymbol(null, new Identifier(AccessModifier.Virtual, "InstallExecuteSequence/UnregisterComPlus")) { Action="UnregisterComPlus", Sequence=2100, SequenceTable=SequenceTable.InstallExecuteSequence },
287 + new WixActionSymbol(null, new Identifier(AccessModifier.Virtual, "InstallExecuteSequence/SelfUnregModules")) { Action="SelfUnregModules", Sequence=2200, SequenceTable=SequenceTable.InstallExecuteSequence },
288 + new WixActionSymbol(null, new Identifier(AccessModifier.Virtual, "InstallExecuteSequence/UnregisterTypeLibraries")) { Action="UnregisterTypeLibraries", Sequence=2300, SequenceTable=SequenceTable.InstallExecuteSequence },
289 + new WixActionSymbol(null, new Identifier(AccessModifier.Virtual, "InstallExecuteSequence/RemoveODBC")) { Action="RemoveODBC", Sequence=2400, SequenceTable=SequenceTable.InstallExecuteSequence },
290 + new WixActionSymbol(null, new Identifier(AccessModifier.Virtual, "InstallExecuteSequence/UnregisterFonts")) { Action="UnregisterFonts", Sequence=2500, SequenceTable=SequenceTable.InstallExecuteSequence },
291 + new WixActionSymbol(null, new Identifier(AccessModifier.Virtual, "InstallExecuteSequence/RemoveRegistryValues")) { Action="RemoveRegistryValues", Sequence=2600, SequenceTable=SequenceTable.InstallExecuteSequence },
292 + new WixActionSymbol(null, new Identifier(AccessModifier.Virtual, "InstallExecuteSequence/UnregisterClassInfo")) { Action="UnregisterClassInfo", Sequence=2700, SequenceTable=SequenceTable.InstallExecuteSequence },
293 + new WixActionSymbol(null, new Identifier(AccessModifier.Virtual, "InstallExecuteSequence/UnregisterExtensionInfo")) { Action="UnregisterExtensionInfo", Sequence=2800, SequenceTable=SequenceTable.InstallExecuteSequence },
294 + new WixActionSymbol(null, new Identifier(AccessModifier.Virtual, "InstallExecuteSequence/UnregisterProgIdInfo")) { Action="UnregisterProgIdInfo", Sequence=2900, SequenceTable=SequenceTable.InstallExecuteSequence },
295 + new WixActionSymbol(null, new Identifier(AccessModifier.Virtual, "InstallExecuteSequence/UnregisterMIMEInfo")) { Action="UnregisterMIMEInfo", Sequence=3000, SequenceTable=SequenceTable.InstallExecuteSequence },
296 + new WixActionSymbol(null, new Identifier(AccessModifier.Virtual, "InstallExecuteSequence/RemoveIniValues")) { Action="RemoveIniValues", Sequence=3100, SequenceTable=SequenceTable.InstallExecuteSequence },
297 + new WixActionSymbol(null, new Identifier(AccessModifier.Virtual, "InstallExecuteSequence/RemoveShortcuts")) { Action="RemoveShortcuts", Sequence=3200, SequenceTable=SequenceTable.InstallExecuteSequence },
298 + new WixActionSymbol(null, new Identifier(AccessModifier.Virtual, "InstallExecuteSequence/RemoveEnvironmentStrings")) { Action="RemoveEnvironmentStrings", Sequence=3300, SequenceTable=SequenceTable.InstallExecuteSequence },
299 + new WixActionSymbol(null, new Identifier(AccessModifier.Virtual, "InstallExecuteSequence/RemoveDuplicateFiles")) { Action="RemoveDuplicateFiles", Sequence=3400, SequenceTable=SequenceTable.InstallExecuteSequence },
300 + new WixActionSymbol(null, new Identifier(AccessModifier.Virtual, "InstallExecuteSequence/RemoveFiles")) { Action="RemoveFiles", Sequence=3500, SequenceTable=SequenceTable.InstallExecuteSequence },
301 + new WixActionSymbol(null, new Identifier(AccessModifier.Virtual, "InstallExecuteSequence/RemoveFolders")) { Action="RemoveFolders", Sequence=3600, SequenceTable=SequenceTable.InstallExecuteSequence },
302 + new WixActionSymbol(null, new Identifier(AccessModifier.Virtual, "InstallExecuteSequence/CreateFolders")) { Action="CreateFolders", Sequence=3700, SequenceTable=SequenceTable.InstallExecuteSequence },
303 + new WixActionSymbol(null, new Identifier(AccessModifier.Virtual, "InstallExecuteSequence/MoveFiles")) { Action="MoveFiles", Sequence=3800, SequenceTable=SequenceTable.InstallExecuteSequence },
304 + new WixActionSymbol(null, new Identifier(AccessModifier.Virtual, "InstallExecuteSequence/InstallFiles")) { Action="InstallFiles", Sequence=4000, SequenceTable=SequenceTable.InstallExecuteSequence },
305 + new WixActionSymbol(null, new Identifier(AccessModifier.Virtual, "InstallExecuteSequence/PatchFiles")) { Action="PatchFiles", Sequence=4090, SequenceTable=SequenceTable.InstallExecuteSequence },
306 + new WixActionSymbol(null, new Identifier(AccessModifier.Virtual, "InstallExecuteSequence/DuplicateFiles")) { Action="DuplicateFiles", Sequence=4210, SequenceTable=SequenceTable.InstallExecuteSequence },
307 + new WixActionSymbol(null, new Identifier(AccessModifier.Virtual, "InstallExecuteSequence/BindImage")) { Action="BindImage", Sequence=4300, SequenceTable=SequenceTable.InstallExecuteSequence },
308 + new WixActionSymbol(null, new Identifier(AccessModifier.Virtual, "InstallExecuteSequence/CreateShortcuts")) { Action="CreateShortcuts", Sequence=4500, SequenceTable=SequenceTable.InstallExecuteSequence },
309 + new WixActionSymbol(null, new Identifier(AccessModifier.Virtual, "InstallExecuteSequence/RegisterClassInfo")) { Action="RegisterClassInfo", Sequence=4600, SequenceTable=SequenceTable.InstallExecuteSequence },
310 + new WixActionSymbol(null, new Identifier(AccessModifier.Virtual, "InstallExecuteSequence/RegisterExtensionInfo")) { Action="RegisterExtensionInfo", Sequence=4700, SequenceTable=SequenceTable.InstallExecuteSequence },
311 + new WixActionSymbol(null, new Identifier(AccessModifier.Virtual, "InstallExecuteSequence/RegisterProgIdInfo")) { Action="RegisterProgIdInfo", Sequence=4800, SequenceTable=SequenceTable.InstallExecuteSequence },
312 + new WixActionSymbol(null, new Identifier(AccessModifier.Virtual, "InstallExecuteSequence/RegisterMIMEInfo")) { Action="RegisterMIMEInfo", Sequence=4900, SequenceTable=SequenceTable.InstallExecuteSequence },
313 + new WixActionSymbol(null, new Identifier(AccessModifier.Virtual, "InstallExecuteSequence/WriteRegistryValues")) { Action="WriteRegistryValues", Sequence=5000, SequenceTable=SequenceTable.InstallExecuteSequence },
314 + new WixActionSymbol(null, new Identifier(AccessModifier.Virtual, "InstallExecuteSequence/WriteIniValues")) { Action="WriteIniValues", Sequence=5100, SequenceTable=SequenceTable.InstallExecuteSequence },
315 + new WixActionSymbol(null, new Identifier(AccessModifier.Virtual, "InstallExecuteSequence/WriteEnvironmentStrings")) { Action="WriteEnvironmentStrings", Sequence=5200, SequenceTable=SequenceTable.InstallExecuteSequence },
316 + new WixActionSymbol(null, new Identifier(AccessModifier.Virtual, "InstallExecuteSequence/RegisterFonts")) { Action="RegisterFonts", Sequence=5300, SequenceTable=SequenceTable.InstallExecuteSequence },
317 + new WixActionSymbol(null, new Identifier(AccessModifier.Virtual, "InstallExecuteSequence/InstallODBC")) { Action="InstallODBC", Sequence=5400, SequenceTable=SequenceTable.InstallExecuteSequence },
318 + new WixActionSymbol(null, new Identifier(AccessModifier.Virtual, "InstallExecuteSequence/RegisterTypeLibraries")) { Action="RegisterTypeLibraries", Sequence=5500, SequenceTable=SequenceTable.InstallExecuteSequence },
319 + new WixActionSymbol(null, new Identifier(AccessModifier.Virtual, "InstallExecuteSequence/SelfRegModules")) { Action="SelfRegModules", Sequence=5600, SequenceTable=SequenceTable.InstallExecuteSequence },
320 + new WixActionSymbol(null, new Identifier(AccessModifier.Virtual, "InstallExecuteSequence/RegisterComPlus")) { Action="RegisterComPlus", Sequence=5700, SequenceTable=SequenceTable.InstallExecuteSequence },
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.Virtual, "InstallExecuteSequence/MsiConfigureServices")) { Action="MsiConfigureServices", Sequence=5850, SequenceTable=SequenceTable.InstallExecuteSequence, Condition="VersionNT>=600" },
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.Virtual, "InstallExecuteSequence/RegisterUser")) { Action="RegisterUser", Sequence=6000, SequenceTable=SequenceTable.InstallExecuteSequence },
325 + new WixActionSymbol(null, new Identifier(AccessModifier.Virtual, "InstallExecuteSequence/RegisterProduct")) { Action="RegisterProduct", Sequence=6100, SequenceTable=SequenceTable.InstallExecuteSequence },
326 + new WixActionSymbol(null, new Identifier(AccessModifier.Virtual, "InstallExecuteSequence/PublishComponents")) { Action="PublishComponents", Sequence=6200, SequenceTable=SequenceTable.InstallExecuteSequence },
327 + new WixActionSymbol(null, new Identifier(AccessModifier.Virtual, "InstallExecuteSequence/MsiPublishAssemblies")) { Action="MsiPublishAssemblies", Sequence=6250, SequenceTable=SequenceTable.InstallExecuteSequence },
328 + new WixActionSymbol(null, new Identifier(AccessModifier.Virtual, "InstallExecuteSequence/PublishFeatures")) { Action="PublishFeatures", Sequence=6300, SequenceTable=SequenceTable.InstallExecuteSequence },
329 + new WixActionSymbol(null, new Identifier(AccessModifier.Virtual, "InstallExecuteSequence/PublishProduct")) { Action="PublishProduct", Sequence=6400, SequenceTable=SequenceTable.InstallExecuteSequence },
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.Virtual, "InstallExecuteSequence/InstallExecuteAgain")) { Action="InstallExecuteAgain", Sequence=6550, SequenceTable=SequenceTable.InstallExecuteSequence, Condition="NOT Installed" },
332 + new WixActionSymbol(null, new Identifier(AccessModifier.Virtual, "InstallExecuteSequence/InstallFinalize")) { Action="InstallFinalize", Sequence=6600, SequenceTable=SequenceTable.InstallExecuteSequence },
333 };
334
335 var standardDirectories = new[]
336 {
337 - new DirectorySymbol(null, new Identifier(AccessModifier.Global, "TARGETDIR")) { Name = "SourceDir" },
338 - new DirectorySymbol(null, new Identifier(AccessModifier.Global, "AdminToolsFolder")) { Name = "Admin" },
339 - new DirectorySymbol(null, new Identifier(AccessModifier.Global, "AppDataFolder")) { Name = "AppData" },
340 - new DirectorySymbol(null, new Identifier(AccessModifier.Global, "CommonAppDataFolder")) { Name = "CommApp" },
341 - new DirectorySymbol(null, new Identifier(AccessModifier.Global, "CommonFilesFolder")) { Name = "CFiles" },
342 - new DirectorySymbol(null, new Identifier(AccessModifier.Global, "CommonFiles64Folder")) { Name = "CFiles64" },
343 - new DirectorySymbol(null, new Identifier(AccessModifier.Global, "CommonFiles6432Folder")) { Name = "." },
344 - new DirectorySymbol(null, new Identifier(AccessModifier.Global, "DesktopFolder")) { Name = "Desktop" },
345 - new DirectorySymbol(null, new Identifier(AccessModifier.Global, "FavoritesFolder")) { Name = "Favs" },
346 - new DirectorySymbol(null, new Identifier(AccessModifier.Global, "FontsFolder")) { Name = "Fonts" },
347 - new DirectorySymbol(null, new Identifier(AccessModifier.Global, "LocalAppDataFolder")) { Name = "LocalApp" },
348 - new DirectorySymbol(null, new Identifier(AccessModifier.Global, "MyPicturesFolder")) { Name = "Pictures" },
349 - new DirectorySymbol(null, new Identifier(AccessModifier.Global, "NetHoodFolder")) { Name = "NetHood" },
350 - new DirectorySymbol(null, new Identifier(AccessModifier.Global, "PersonalFolder")) { Name = "Personal" },
351 - new DirectorySymbol(null, new Identifier(AccessModifier.Global, "PrintHoodFolder")) { Name = "Printers" },
352 - new DirectorySymbol(null, new Identifier(AccessModifier.Global, "ProgramFilesFolder")) { Name = "PFiles" },
353 - new DirectorySymbol(null, new Identifier(AccessModifier.Global, "ProgramFiles64Folder")) { Name = "PFiles64" },
354 - new DirectorySymbol(null, new Identifier(AccessModifier.Global, "ProgramFiles6432Folder")) { Name = "." },
355 - new DirectorySymbol(null, new Identifier(AccessModifier.Global, "ProgramMenuFolder")) { Name = "PMenu" },
356 - new DirectorySymbol(null, new Identifier(AccessModifier.Global, "RecentFolder")) { Name = "Recent" },
357 - new DirectorySymbol(null, new Identifier(AccessModifier.Global, "SendToFolder")) { Name = "SendTo" },
358 - new DirectorySymbol(null, new Identifier(AccessModifier.Global, "StartMenuFolder")) { Name = "StrtMenu" },
359 - new DirectorySymbol(null, new Identifier(AccessModifier.Global, "StartupFolder")) { Name = "StartUp" },
360 - new DirectorySymbol(null, new Identifier(AccessModifier.Global, "SystemFolder")) { Name = "System" },
361 - new DirectorySymbol(null, new Identifier(AccessModifier.Global, "System16Folder")) { Name = "System16" },
362 - new DirectorySymbol(null, new Identifier(AccessModifier.Global, "System64Folder")) { Name = "System64" },
363 - new DirectorySymbol(null, new Identifier(AccessModifier.Global, "System6432Folder")) { Name = "." },
364 - new DirectorySymbol(null, new Identifier(AccessModifier.Global, "TempFolder")) { Name = "Temp" },
365 - new DirectorySymbol(null, new Identifier(AccessModifier.Global, "TemplateFolder")) { Name = "Template" },
366 - new DirectorySymbol(null, new Identifier(AccessModifier.Global, "WindowsFolder")) { Name = "Windows" },
337 + new DirectorySymbol(null, new Identifier(AccessModifier.Virtual, "TARGETDIR")) { Name = "SourceDir" },
338 + new DirectorySymbol(null, new Identifier(AccessModifier.Virtual, "AdminToolsFolder")) { Name = "Admin" },
339 + new DirectorySymbol(null, new Identifier(AccessModifier.Virtual, "AppDataFolder")) { Name = "AppData" },
340 + new DirectorySymbol(null, new Identifier(AccessModifier.Virtual, "CommonAppDataFolder")) { Name = "CommApp" },
341 + new DirectorySymbol(null, new Identifier(AccessModifier.Virtual, "CommonFilesFolder")) { Name = "CFiles" },
342 + new DirectorySymbol(null, new Identifier(AccessModifier.Virtual, "CommonFiles64Folder")) { Name = "CFiles64" },
343 + new DirectorySymbol(null, new Identifier(AccessModifier.Virtual, "CommonFiles6432Folder")) { Name = "." },
344 + new DirectorySymbol(null, new Identifier(AccessModifier.Virtual, "DesktopFolder")) { Name = "Desktop" },
345 + new DirectorySymbol(null, new Identifier(AccessModifier.Virtual, "FavoritesFolder")) { Name = "Favs" },
346 + new DirectorySymbol(null, new Identifier(AccessModifier.Virtual, "FontsFolder")) { Name = "Fonts" },
347 + new DirectorySymbol(null, new Identifier(AccessModifier.Virtual, "LocalAppDataFolder")) { Name = "LocalApp" },
348 + new DirectorySymbol(null, new Identifier(AccessModifier.Virtual, "MyPicturesFolder")) { Name = "Pictures" },
349 + new DirectorySymbol(null, new Identifier(AccessModifier.Virtual, "NetHoodFolder")) { Name = "NetHood" },
350 + new DirectorySymbol(null, new Identifier(AccessModifier.Virtual, "PersonalFolder")) { Name = "Personal" },
351 + new DirectorySymbol(null, new Identifier(AccessModifier.Virtual, "PrintHoodFolder")) { Name = "Printers" },
352 + new DirectorySymbol(null, new Identifier(AccessModifier.Virtual, "ProgramFilesFolder")) { Name = "PFiles" },
353 + new DirectorySymbol(null, new Identifier(AccessModifier.Virtual, "ProgramFiles64Folder")) { Name = "PFiles64" },
354 + new DirectorySymbol(null, new Identifier(AccessModifier.Virtual, "ProgramFiles6432Folder")) { Name = "." },
355 + new DirectorySymbol(null, new Identifier(AccessModifier.Virtual, "ProgramMenuFolder")) { Name = "PMenu" },
356 + new DirectorySymbol(null, new Identifier(AccessModifier.Virtual, "RecentFolder")) { Name = "Recent" },
357 + new DirectorySymbol(null, new Identifier(AccessModifier.Virtual, "SendToFolder")) { Name = "SendTo" },
358 + new DirectorySymbol(null, new Identifier(AccessModifier.Virtual, "StartMenuFolder")) { Name = "StrtMenu" },
359 + new DirectorySymbol(null, new Identifier(AccessModifier.Virtual, "StartupFolder")) { Name = "StartUp" },
360 + new DirectorySymbol(null, new Identifier(AccessModifier.Virtual, "SystemFolder")) { Name = "System" },
361 + new DirectorySymbol(null, new Identifier(AccessModifier.Virtual, "System16Folder")) { Name = "System16" },
362 + new DirectorySymbol(null, new Identifier(AccessModifier.Virtual, "System64Folder")) { Name = "System64" },
363 + new DirectorySymbol(null, new Identifier(AccessModifier.Virtual, "System6432Folder")) { Name = "." },
364 + new DirectorySymbol(null, new Identifier(AccessModifier.Virtual, "TempFolder")) { Name = "Temp" },
365 + new DirectorySymbol(null, new Identifier(AccessModifier.Virtual, "TemplateFolder")) { Name = "Template" },
366 + new DirectorySymbol(null, new Identifier(AccessModifier.Virtual, "WindowsFolder")) { Name = "Windows" },
367 };
368
369 standardActionNames = new HashSet<string>(standardActions.Select(a => a.Action));
src/api/wix/test/WixToolsetTest.Data/SerializeFixture.cs
+20 -7
@@ -31,6 +31,12 @@ namespace WixToolsetTest.Data
31 KeyPath = null,
32 });
33
34 + section.AddSymbol(new DirectorySymbol(sln, new Identifier(AccessModifier.Virtual, "TestFolder"))
35 + {
36 + ParentDirectoryRef = String.Empty,
37 + Name = "Test Folder",
38 + });
39 +
40 var intermediate = new Intermediate("TestIntermediate", IntermediateLevels.Compiled, new[] { section }, null);
41
42 intermediate.UpdateLevel(IntermediateLevels.Linked);
@@ -47,14 +53,21 @@ namespace WixToolsetTest.Data
53 Assert.True(loaded.HasLevel(IntermediateLevels.Linked));
54 Assert.True(loaded.HasLevel(IntermediateLevels.Resolved));
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();
66
52 - Assert.Equal("TestComponent", symbol.Id.Id);
53 - Assert.Equal(AccessModifier.Global, symbol.Id.Access);
54 - Assert.Equal(String.Empty, symbol.ComponentId);
55 - Assert.Equal("TestFolder", symbol.DirectoryRef);
56 - Assert.Equal(ComponentLocation.Either, symbol.Location);
57 - Assert.Null(symbol.KeyPath);
67 + Assert.Equal("TestFolder", directorySymbol.Id.Id);
68 + Assert.Equal(AccessModifier.Virtual, directorySymbol.Id.Access);
69 + Assert.Equal(String.Empty, directorySymbol.ParentDirectoryRef);
70 + Assert.Equal("Test Folder", directorySymbol.Name);
71 }
72 finally
73 {
src/ext/UI/wixlib/WixUI_Minimal.wxs
+2 -2
@@ -58,8 +58,8 @@ Patch dialog sequence:
58 <Publish Dialog="VerifyReadyDlg" Control="Back" Event="NewDialog" Value="WelcomeDlg" Order="2" Condition="Installed AND PATCH" />
59
60 <InstallUISequence>
61 - <Show Dialog="WelcomeDlg" Before="WelcomeEulaDlg" Condition="Installed AND PATCH" />
62 - <Show Dialog="WelcomeEulaDlg" Before="ProgressDlg" Condition="NOT Installed" />
61 + <Show Dialog="override WelcomeDlg" Before="WelcomeEulaDlg" Condition="Installed AND PATCH" />
62 + <Show Dialog="override WelcomeEulaDlg" Before="ProgressDlg" Condition="NOT Installed" />
63 </InstallUISequence>
64
65 <Property Id="ARPNOMODIFY" Value="1" />
src/wix/WixToolset.Core.WindowsInstaller/Bind/SequenceActionsCommand.cs
+2 -2
@@ -108,7 +108,7 @@ namespace WixToolset.Core.WindowsInstaller.Bind
108 // the binder.
109 if (requiredActionSymbols.TryGetValue(key, out var requiredActionSymbol))
110 {
111 - if (requiredActionSymbol.Overridable)
111 + if (requiredActionSymbol.Overridable || requiredActionSymbol.Id.Access == AccessModifier.Virtual)
112 {
113 this.Messaging.Write(WarningMessages.SuppressAction(suppressActionSymbol.SourceLineNumbers, suppressActionSymbol.Action, suppressActionSymbol.SequenceTable.ToString()));
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).
241 var previousUsedSequence = 0;
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 {
245 var absoluteActionSymbol = absoluteActionSymbols[j];
246
src/wix/WixToolset.Core/Compiler_Package.cs
+17 -4
@@ -2463,6 +2463,7 @@ namespace WixToolset.Core
2463 foreach (var child in node.Elements())
2464 {
2465 var childSourceLineNumbers = Preprocessor.GetSourceLineNumbers(child);
2466 + Identifier actionIdentifier = null;
2467 var actionName = child.Name.LocalName;
2468 string afterAction = null;
2469 string beforeAction = null;
@@ -2485,8 +2486,9 @@ namespace WixToolset.Core
2486 case "Action":
2487 if (customAction)
2488 {
2488 - actionName = this.Core.GetAttributeIdentifierValue(childSourceLineNumbers, attrib);
2489 - this.Core.CreateSimpleReference(childSourceLineNumbers, SymbolDefinitions.CustomAction, actionName);
2489 + actionIdentifier = this.Core.GetAttributeIdentifier(childSourceLineNumbers, attrib);
2490 + actionName = actionIdentifier.Id;
2491 + this.Core.CreateSimpleReference(childSourceLineNumbers, SymbolDefinitions.CustomAction, actionIdentifier.Id);
2492 }
2493 else
2494 {
@@ -2521,7 +2523,8 @@ namespace WixToolset.Core
2523 case "Dialog":
2524 if (showDialog)
2525 {
2524 - actionName = this.Core.GetAttributeIdentifierValue(childSourceLineNumbers, attrib);
2526 + actionIdentifier = this.Core.GetAttributeIdentifier(childSourceLineNumbers, attrib);
2527 + actionName = actionIdentifier.Id;
2528 this.Core.CreateSimpleReference(childSourceLineNumbers, SymbolDefinitions.Dialog, actionName);
2529 }
2530 else
@@ -2645,7 +2648,17 @@ namespace WixToolset.Core
2648 }
2649 else
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))
2662 {
2663 SequenceTable = sequenceTable,
2664 Action = actionName,
src/wix/WixToolset.Core/ExtensibilityServices/ParseHelper.cs
+8
@@ -423,6 +423,14 @@ namespace WixToolset.Core.ExtensibilityServices
423 access = AccessModifier.Section;
424 break;
425
426 + case "virtual":
427 + access = AccessModifier.Virtual;
428 + break;
429 +
430 + case "override":
431 + access = AccessModifier.Override;
432 + break;
433 +
434 default:
435 return null;
436 }
src/wix/WixToolset.Core/Link/AddRequiredStandardDirectories.cs
+10 -5
@@ -43,12 +43,17 @@ namespace WixToolset.Core.Link
43
44 if (String.IsNullOrEmpty(parentDirectoryId))
45 {
46 - if (directory.Id.Id != "TARGETDIR")
47 - {
48 - directory.ParentDirectoryRef = "TARGETDIR";
49 - }
46 + parentDirectoryId = this.GetStandardDirectoryParent(directory.Id.Id, platform);
47 +
48 + directory.ParentDirectoryRef = parentDirectoryId;
49 +
50 + //if (directory.Id.Id != "TARGETDIR")
51 + //{
52 + // directory.ParentDirectoryRef = "TARGETDIR";
53 + //}
54 }
51 - else
55 +
56 + if (!String.IsNullOrEmpty(parentDirectoryId))
57 {
58 this.EnsureStandardDirectoryAdded(directoryIds, parentDirectoryId, directory.SourceLineNumbers, platform);
59 }
src/wix/WixToolset.Core/Link/FindEntrySectionAndLoadSymbolsCommand.cs
+43 -4
@@ -44,11 +44,19 @@ namespace WixToolset.Core.Link
44 /// </summary>
45 public ISet<IntermediateSymbol> IdenticalDirectorySymbols { get; private set; }
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 +
53 public void Execute()
54 {
55 var symbolsByName = new Dictionary<string, SymbolWithSection>();
56 var possibleConflicts = new HashSet<SymbolWithSection>();
57 var identicalDirectorySymbols = new HashSet<IntermediateSymbol>();
58 + var overrideSymbols = new List<SymbolWithSection>();
59 + var overriddenSymbols = new HashSet<IntermediateSymbol>();
60
61 if (!Enum.TryParse(this.ExpectedOutputType.ToString(), out SectionType expectedEntrySectionType))
62 {
@@ -84,15 +92,34 @@ namespace WixToolset.Core.Link
92
93 if (!symbolsByName.TryGetValue(fullName, out var existingSymbol))
94 {
95 + if (symbolWithSection.Access == AccessModifier.Override)
96 + {
97 + overrideSymbols.Add(symbolWithSection);
98 + }
99 +
100 symbolsByName.Add(fullName, symbolWithSection);
101 }
102 else // uh-oh, duplicate symbols.
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 + }
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.
93 - // and not cause conflicts.
94 - if (AccessModifier.Section == existingSymbol.Access && AccessModifier.Section == symbolWithSection.Access &&
95 - SymbolDefinitionType.Directory == existingSymbol.Symbol.Definition.Type && existingSymbol.Symbol.IsIdentical(symbolWithSection.Symbol))
119 + // point to identical symbols. Identical directory symbols are redundant and will not cause
120 + // conflicts.
121 + else if (AccessModifier.Section == existingSymbol.Access && AccessModifier.Section == symbolWithSection.Access &&
122 + SymbolDefinitionType.Directory == existingSymbol.Symbol.Definition.Type && existingSymbol.Symbol.IsIdentical(symbolWithSection.Symbol))
123 {
124 // Ensure identical symbols are tracked to ensure that only one symbol will end up in linked intermediate.
125 identicalDirectorySymbols.Add(existingSymbol.Symbol);
@@ -108,9 +135,21 @@ namespace WixToolset.Core.Link
135 }
136 }
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 +
149 this.SymbolsByName = symbolsByName;
150 this.PossibleConflicts = possibleConflicts;
151 this.IdenticalDirectorySymbols = identicalDirectorySymbols;
152 + this.OverriddenSymbols = overriddenSymbols;
153 }
154 }
155 }
src/wix/WixToolset.Core/Link/ResolveReferencesCommand.cs
+9 -7
@@ -133,13 +133,13 @@ namespace WixToolset.Core.Link
133
134 foreach (var dupe in symbolWithSection.PossiblyConflicts)
135 {
136 - // don't count overridable WixActionSymbols
137 - var symbolAction = symbolWithSection.Symbol as WixActionSymbol;
138 - var dupeAction = dupe.Symbol as WixActionSymbol;
139 - if (symbolAction?.Overridable != dupeAction?.Overridable)
140 - {
141 - continue;
142 - }
136 + //// don't count overridable WixActionSymbols
137 + //var symbolAction = symbolWithSection.Symbol as WixActionSymbol;
138 + //var dupeAction = dupe.Symbol as WixActionSymbol;
139 + //if (symbolAction?.Overridable != dupeAction?.Overridable)
140 + //{
141 + // continue;
142 + //}
143
144 if (this.AccessibleSymbol(referencingSection, dupe))
145 {
@@ -161,6 +161,8 @@ namespace WixToolset.Core.Link
161 switch (symbolWithSection.Access)
162 {
163 case AccessModifier.Global:
164 + case AccessModifier.Virtual:
165 + case AccessModifier.Override:
166 return true;
167 case AccessModifier.Library:
168 return symbolWithSection.Section.CompilationId == referencingSection.CompilationId || (null != symbolWithSection.Section.LibraryId && symbolWithSection.Section.LibraryId == referencingSection.LibraryId);
src/wix/WixToolset.Core/Link/SymbolWithSection.cs
+19
@@ -48,6 +48,11 @@ namespace WixToolset.Core.Link
48 /// </summary>
49 public IEnumerable<SymbolWithSection> PossiblyConflicts => this.possibleConflicts ?? Enumerable.Empty<SymbolWithSection>();
50
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>
57 /// Adds a duplicate symbol with sections that is a possible conflict.
58 /// </summary>
@@ -62,6 +67,20 @@ namespace WixToolset.Core.Link
67 this.possibleConflicts.Add(symbolWithSection);
68 }
69
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>
85 /// Gets the full name of the symbol.
86 /// </summary>
src/wix/WixToolset.Core/Linker.cs
+54 -17
@@ -98,6 +98,9 @@ namespace WixToolset.Core
98 }
99 }
100
101 + // TODO: Replace this with "std.wixlib"
102 + this.LoadStandardSymbols(sections);
103 +
104 var multipleFeatureComponents = new Hashtable();
105
106 var wixVariables = new Dictionary<string, WixVariableSymbol>();
@@ -119,8 +122,8 @@ namespace WixToolset.Core
122 }
123 }
124
122 - // Add the missing standard action and directory symbols.
123 - this.LoadStandardSymbols(find.SymbolsByName);
125 + ////// Add the missing standard action and directory symbols.
126 + ////this.LoadStandardSymbols(find.SymbolsByName);
127
128 // Resolve the symbol references to find the set of sections we care about for linking.
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
203 continue;
204 }
205 }
206 + else if (find.OverriddenSymbols.Contains(symbol))
207 + {
208 + // Skip the symbols that were overridden.
209 + continue;
210 + }
211
212 var copySymbol = true; // by default, copy symbols.
213
@@ -360,33 +368,62 @@ namespace WixToolset.Core
368 /// Load the standard action and directory symbols.
369 /// </summary>
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)
399 {
400 foreach (var actionSymbol in WindowsInstallerStandard.StandardActions())
401 {
367 - var symbolWithSection = new SymbolWithSection(null, actionSymbol);
368 - var fullName = symbolWithSection.GetFullName();
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))
402 + var section = new IntermediateSection(actionSymbol.Id.Id, SectionType.Fragment);
403 + section.AddSymbol(new WixActionSymbol(null, new Identifier(actionSymbol.Id.Access, actionSymbol.Id.Id))
404 {
373 - symbolsByName.Add(fullName, symbolWithSection);
374 - }
405 + Action = actionSymbol.Action,
406 + SequenceTable = actionSymbol.SequenceTable,
407 + Sequence = actionSymbol.Sequence,
408 + Condition = actionSymbol.Condition,
409 + });
410 +
411 + sections.Add(section);
412 }
413
414 foreach (var directorySymbol in WindowsInstallerStandard.StandardDirectories())
415 {
379 - var symbolWithSection = new SymbolWithSection(null, directorySymbol);
380 - var fullName = symbolWithSection.GetFullName();
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))
416 + var section = new IntermediateSection(directorySymbol.Id.Id, SectionType.Fragment);
417 + section.AddSymbol(new DirectorySymbol(null, new Identifier(directorySymbol.Id.Access, directorySymbol.Id.Id))
418 {
385 - symbolsByName.Add(fullName, symbolWithSection);
386 - }
419 + Name = directorySymbol.Name
420 + });
421 +
422 + sections.Add(section);
423 }
424 }
425
426 +
427 /// <summary>
428 /// Process the complex references.
429 /// </summary>
src/wix/WixToolset.Core/LinkerErrors.cs
+6
@@ -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);
47 }
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 +
54 private static Message Message(SourceLineNumber sourceLineNumber, Ids id, string format, params object[] args)
55 {
56 return new Message(sourceLineNumber, MessageLevel.Error, (int)id, format, args);
@@ -61,6 +66,7 @@ namespace WixToolset.Core
66 UncompressedPayloadInContainer = 7005,
67 BAContainerCannotContainRemotePayload = 7006,
68 DuplicateBindPathVariableOnCommandLine = 7007,
69 + VirtualSymbolNotFoundForOverride = 7008,
70 } // last available is 7099. 7100 is WindowsInstallerBackendWarnings.
71 }
72 }
src/wix/test/WixToolsetTest.CoreIntegration/AccessModifierFixture.cs new
+159
@@ -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 +}
src/wix/test/WixToolsetTest.CoreIntegration/RollbackBoundaryFixture.cs
+1 -1
@@ -66,7 +66,7 @@ namespace WixToolsetTest.CoreIntegration
66
67 WixAssert.CompareLineByLine(new[]
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.",
71 }, result.Messages.Select(m => m.ToString()).ToArray());
72
src/wix/test/WixToolsetTest.CoreIntegration/TestData/AccessModifier/DuplicateCrossFragmentReference.wxs new
+14
@@ -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>
src/wix/test/WixToolsetTest.CoreIntegration/TestData/AccessModifier/DuplicatedOverrideVirtualSymbol.wxs new
+17
@@ -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>
src/wix/test/WixToolsetTest.CoreIntegration/TestData/AccessModifier/HasVirtualSymbol.wxs new
+8
@@ -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>
src/wix/test/WixToolsetTest.CoreIntegration/TestData/AccessModifier/InvalidCrossFragmentReference.wxs new
+10
@@ -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>
src/wix/test/WixToolsetTest.CoreIntegration/TestData/AccessModifier/OverrideVirtualSymbol.wxs new
+13
@@ -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>
src/wix/test/WixToolsetTest.CoreIntegration/TestData/AccessModifier/OverrideVirtualSymbolWithFragments.wxs new
+20
@@ -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>
src/wix/test/WixToolsetTest.CoreIntegration/TestData/AccessModifier/OverrideWithoutVirtualSymbol.wxs new
+8
@@ -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>
src/wix/test/WixToolsetTest.CoreIntegration/TestData/AccessModifier/VirtualSymbolOverridden.wxs new
+12
@@ -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>
src/wix/test/WixToolsetTest.CoreIntegration/TestData/OverridableActions/Package.wxs
+1 -1
@@ -36,7 +36,7 @@
36 <ComponentGroup Id="Foo2" />
37
38 <InstallExecuteSequence>
39 - <Custom Action="SetBar" Before="AppSearch" />
39 + <Custom Action="override SetBar" Before="AppSearch" />
40 </InstallExecuteSequence>
41 </Fragment>
42
src/wix/test/WixToolsetTest.CoreIntegration/TestData/UI/DialogsInInstallUISequence.wxs
+2 -2
@@ -1,4 +1,4 @@
1 -<Wix xmlns="http://wixtoolset.org/schemas/v4/wxs">
1 +<Wix xmlns="http://wixtoolset.org/schemas/v4/wxs">
2 <Fragment>
3 <UI Id="CustomDialog">
4 <Dialog Id="FirstDialog" Width="100" Height="100">
@@ -24,7 +24,7 @@
24
25 <InstallUISequence>
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>
29 </UI>
30 <ComponentGroup Id="ProductComponents" Directory="INSTALLFOLDER">
src/wix/test/WixToolsetTest.CoreIntegration/UIFixture.cs
+2 -6
@@ -2,15 +2,11 @@
2
3 namespace WixToolsetTest.CoreIntegration
4 {
5 - using System;
5 using System.IO;
6 using System.Linq;
8 - using Example.Extension;
9 - using WixInternal.TestSupport;
7 using WixInternal.Core.TestPackage;
8 + using WixInternal.TestSupport;
9 using WixToolset.Data;
12 - using WixToolset.Data.Symbols;
13 - using WixToolset.Data.WindowsInstaller;
10 using Xunit;
11
12 public class UIFixture
@@ -94,7 +90,7 @@ namespace WixToolsetTest.CoreIntegration
90 21,
91 52
92 }, errors.Select(e => e.Id).ToArray());
97 - }
93 + }
94 }
95 }
96 }