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
}