diff options
Diffstat (limited to 'src/wixext')
-rw-r--r-- | src/wixext/ComPlusCompiler.cs | 2188 | ||||
-rw-r--r-- | src/wixext/ComPlusDecompiler.cs | 1843 | ||||
-rw-r--r-- | src/wixext/ComPlusExtensionData.cs | 64 | ||||
-rw-r--r-- | src/wixext/WixComPlusExtension.csproj | 50 | ||||
-rw-r--r-- | src/wixext/complus.xsd | 944 | ||||
-rw-r--r-- | src/wixext/messages.xml | 77 | ||||
-rw-r--r-- | src/wixext/tables.xml | 250 |
7 files changed, 5416 insertions, 0 deletions
diff --git a/src/wixext/ComPlusCompiler.cs b/src/wixext/ComPlusCompiler.cs new file mode 100644 index 00000000..7f22c56b --- /dev/null +++ b/src/wixext/ComPlusCompiler.cs | |||
@@ -0,0 +1,2188 @@ | |||
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 WixToolset.Extensions | ||
4 | { | ||
5 | using System; | ||
6 | using System.Collections; | ||
7 | using System.Collections.Generic; | ||
8 | using System.Globalization; | ||
9 | using System.Reflection; | ||
10 | using System.Xml; | ||
11 | using System.Xml.Linq; | ||
12 | using System.Xml.Schema; | ||
13 | using WixToolset.Data; | ||
14 | using WixToolset.Extensibility; | ||
15 | |||
16 | /// <summary> | ||
17 | /// The compiler for the WiX Toolset Internet Information Services Extension. | ||
18 | /// </summary> | ||
19 | public sealed class ComPlusCompiler : CompilerExtension | ||
20 | { | ||
21 | /// <summary> | ||
22 | /// Instantiate a new ComPlusCompiler. | ||
23 | /// </summary> | ||
24 | public ComPlusCompiler() | ||
25 | { | ||
26 | this.Namespace = "http://wixtoolset.org/schemas/v4/wxs/complus"; | ||
27 | } | ||
28 | |||
29 | /// <summary> | ||
30 | /// </summary> | ||
31 | /// <remarks></remarks> | ||
32 | public enum CpiAssemblyAttributes | ||
33 | { | ||
34 | EventClass = (1 << 0), | ||
35 | DotNetAssembly = (1 << 1), | ||
36 | DllPathFromGAC = (1 << 2), | ||
37 | RegisterInCommit = (1 << 3) | ||
38 | } | ||
39 | |||
40 | /// <summary> | ||
41 | /// Processes an element for the Compiler. | ||
42 | /// </summary> | ||
43 | /// <param name="sourceLineNumbers">Source line number for the parent element.</param> | ||
44 | /// <param name="parentElement">Parent element of element to process.</param> | ||
45 | /// <param name="element">Element to process.</param> | ||
46 | /// <param name="contextValues">Extra information about the context in which this element is being parsed.</param> | ||
47 | public override void ParseElement(XElement parentElement, XElement element, IDictionary<string, string> context) | ||
48 | { | ||
49 | switch (parentElement.Name.LocalName) | ||
50 | { | ||
51 | case "Component": | ||
52 | string componentId = context["ComponentId"]; | ||
53 | string directoryId = context["DirectoryId"]; | ||
54 | bool win64 = Boolean.Parse(context["Win64"]); | ||
55 | |||
56 | switch (element.Name.LocalName) | ||
57 | { | ||
58 | case "ComPlusPartition": | ||
59 | this.ParseComPlusPartitionElement(element, componentId, win64); | ||
60 | break; | ||
61 | case "ComPlusPartitionRole": | ||
62 | this.ParseComPlusPartitionRoleElement(element, componentId, null); | ||
63 | break; | ||
64 | case "ComPlusUserInPartitionRole": | ||
65 | this.ParseComPlusUserInPartitionRoleElement(element, componentId, null); | ||
66 | break; | ||
67 | case "ComPlusGroupInPartitionRole": | ||
68 | this.ParseComPlusGroupInPartitionRoleElement(element, componentId, null); | ||
69 | break; | ||
70 | case "ComPlusPartitionUser": | ||
71 | this.ParseComPlusPartitionUserElement(element, componentId, null); | ||
72 | break; | ||
73 | case "ComPlusApplication": | ||
74 | this.ParseComPlusApplicationElement(element, componentId, win64, null); | ||
75 | break; | ||
76 | case "ComPlusApplicationRole": | ||
77 | this.ParseComPlusApplicationRoleElement(element, componentId, null); | ||
78 | break; | ||
79 | case "ComPlusUserInApplicationRole": | ||
80 | this.ParseComPlusUserInApplicationRoleElement(element, componentId, null); | ||
81 | break; | ||
82 | case "ComPlusGroupInApplicationRole": | ||
83 | this.ParseComPlusGroupInApplicationRoleElement(element, componentId, null); | ||
84 | break; | ||
85 | case "ComPlusAssembly": | ||
86 | this.ParseComPlusAssemblyElement(element, componentId, win64, null); | ||
87 | break; | ||
88 | case "ComPlusRoleForComponent": | ||
89 | this.ParseComPlusRoleForComponentElement(element, componentId, null); | ||
90 | break; | ||
91 | case "ComPlusRoleForInterface": | ||
92 | this.ParseComPlusRoleForInterfaceElement(element, componentId, null); | ||
93 | break; | ||
94 | case "ComPlusRoleForMethod": | ||
95 | this.ParseComPlusRoleForMethodElement(element, componentId, null); | ||
96 | break; | ||
97 | case "ComPlusSubscription": | ||
98 | this.ParseComPlusSubscriptionElement(element, componentId, null); | ||
99 | break; | ||
100 | default: | ||
101 | this.Core.UnexpectedElement(parentElement, element); | ||
102 | break; | ||
103 | } | ||
104 | break; | ||
105 | case "Fragment": | ||
106 | case "Module": | ||
107 | case "Product": | ||
108 | switch (element.Name.LocalName) | ||
109 | { | ||
110 | case "ComPlusPartition": | ||
111 | this.ParseComPlusPartitionElement(element, null, false); | ||
112 | break; | ||
113 | case "ComPlusPartitionRole": | ||
114 | this.ParseComPlusPartitionRoleElement(element, null, null); | ||
115 | break; | ||
116 | case "ComPlusApplication": | ||
117 | this.ParseComPlusApplicationElement(element, null, false, null); | ||
118 | break; | ||
119 | case "ComPlusApplicationRole": | ||
120 | this.ParseComPlusApplicationRoleElement(element, null, null); | ||
121 | break; | ||
122 | default: | ||
123 | this.Core.UnexpectedElement(parentElement, element); | ||
124 | break; | ||
125 | } | ||
126 | break; | ||
127 | default: | ||
128 | this.Core.UnexpectedElement(parentElement, element); | ||
129 | break; | ||
130 | } | ||
131 | } | ||
132 | |||
133 | /// <summary> | ||
134 | /// Parses a COM+ partition element. | ||
135 | /// </summary> | ||
136 | /// <param name="node">Element to parse.</param> | ||
137 | /// <param name="componentKey">Identifier of parent component.</param> | ||
138 | private void ParseComPlusPartitionElement(XElement node, string componentKey, bool win64) | ||
139 | { | ||
140 | SourceLineNumber sourceLineNumbers = Preprocessor.GetSourceLineNumbers(node); | ||
141 | |||
142 | string key = null; | ||
143 | string id = null; | ||
144 | string name = null; | ||
145 | |||
146 | Hashtable properties = new Hashtable(); | ||
147 | |||
148 | foreach (XAttribute attrib in node.Attributes()) | ||
149 | { | ||
150 | if (String.IsNullOrEmpty(attrib.Name.NamespaceName) || this.Namespace == attrib.Name.Namespace) | ||
151 | { | ||
152 | switch (attrib.Name.LocalName) | ||
153 | { | ||
154 | case "Id": | ||
155 | key = this.Core.GetAttributeIdentifierValue(sourceLineNumbers, attrib); | ||
156 | break; | ||
157 | case "PartitionId": | ||
158 | id = TryFormatGuidValue(this.Core.GetAttributeValue(sourceLineNumbers, attrib)); | ||
159 | break; | ||
160 | case "Name": | ||
161 | name = this.Core.GetAttributeValue(sourceLineNumbers, attrib); | ||
162 | break; | ||
163 | case "Changeable": | ||
164 | this.Core.OnMessage(WixWarnings.DeprecatedAttribute(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName)); | ||
165 | break; | ||
166 | case "Deleteable": | ||
167 | if (null == componentKey) | ||
168 | { | ||
169 | this.Core.OnMessage(ComPlusErrors.IllegalAttributeWithoutComponent(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName)); | ||
170 | } | ||
171 | properties["Deleteable"] = YesNoType.Yes == this.Core.GetAttributeYesNoValue(sourceLineNumbers, attrib) ? "1" : "0"; | ||
172 | break; | ||
173 | case "Description": | ||
174 | if (null == componentKey) | ||
175 | { | ||
176 | this.Core.OnMessage(ComPlusErrors.IllegalAttributeWithoutComponent(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName)); | ||
177 | } | ||
178 | properties["Description"] = this.Core.GetAttributeValue(sourceLineNumbers, attrib); | ||
179 | break; | ||
180 | default: | ||
181 | this.Core.UnexpectedAttribute(node, attrib); | ||
182 | break; | ||
183 | } | ||
184 | } | ||
185 | else | ||
186 | { | ||
187 | this.Core.ParseExtensionAttribute(node, attrib); | ||
188 | } | ||
189 | } | ||
190 | |||
191 | if (null != componentKey && null == name) | ||
192 | { | ||
193 | this.Core.OnMessage(ComPlusErrors.RequiredAttributeUnderComponent(sourceLineNumbers, node.Name.LocalName, "Name")); | ||
194 | } | ||
195 | if (null == componentKey && null == id && null == name) | ||
196 | { | ||
197 | this.Core.OnMessage(ComPlusErrors.RequiredAttributeNotUnderComponent(sourceLineNumbers, node.Name.LocalName, "Id", "Name")); | ||
198 | } | ||
199 | |||
200 | foreach (XElement child in node.Elements()) | ||
201 | { | ||
202 | if (this.Namespace == child.Name.Namespace) | ||
203 | { | ||
204 | switch (child.Name.LocalName) | ||
205 | { | ||
206 | case "ComPlusPartitionRole": | ||
207 | this.ParseComPlusPartitionRoleElement(child, componentKey, key); | ||
208 | break; | ||
209 | case "ComPlusPartitionUser": | ||
210 | this.ParseComPlusPartitionUserElement(child, componentKey, key); | ||
211 | break; | ||
212 | case "ComPlusApplication": | ||
213 | this.ParseComPlusApplicationElement(child, componentKey, win64, key); | ||
214 | break; | ||
215 | default: | ||
216 | this.Core.UnexpectedElement(node, child); | ||
217 | break; | ||
218 | } | ||
219 | } | ||
220 | else | ||
221 | { | ||
222 | this.Core.ParseExtensionElement(node, child); | ||
223 | } | ||
224 | } | ||
225 | |||
226 | Row row = this.Core.CreateRow(sourceLineNumbers, "ComPlusPartition"); | ||
227 | row[0] = key; | ||
228 | row[1] = componentKey; | ||
229 | row[2] = id; | ||
230 | row[3] = name; | ||
231 | |||
232 | IDictionaryEnumerator propertiesEnumerator = properties.GetEnumerator(); | ||
233 | while (propertiesEnumerator.MoveNext()) | ||
234 | { | ||
235 | Row propertyRow = this.Core.CreateRow(sourceLineNumbers, "ComPlusPartitionProperty"); | ||
236 | propertyRow[0] = key; | ||
237 | propertyRow[1] = (string)propertiesEnumerator.Key; | ||
238 | propertyRow[2] = (string)propertiesEnumerator.Value; | ||
239 | } | ||
240 | |||
241 | if (componentKey != null) | ||
242 | { | ||
243 | if (win64) | ||
244 | { | ||
245 | if (this.Core.CurrentPlatform == Platform.IA64) | ||
246 | { | ||
247 | this.Core.OnMessage(WixErrors.UnsupportedPlatformForElement(sourceLineNumbers, "ia64", node.Name.LocalName)); | ||
248 | } | ||
249 | else | ||
250 | { | ||
251 | this.Core.CreateSimpleReference(sourceLineNumbers, "CustomAction", "ConfigureComPlusInstall_x64"); | ||
252 | this.Core.CreateSimpleReference(sourceLineNumbers, "CustomAction", "ConfigureComPlusUninstall_x64"); | ||
253 | } | ||
254 | } | ||
255 | else | ||
256 | { | ||
257 | this.Core.CreateSimpleReference(sourceLineNumbers, "CustomAction", "ConfigureComPlusInstall"); | ||
258 | this.Core.CreateSimpleReference(sourceLineNumbers, "CustomAction", "ConfigureComPlusUninstall"); | ||
259 | } | ||
260 | } | ||
261 | } | ||
262 | |||
263 | /// <summary> | ||
264 | /// Parses a COM+ partition role element. | ||
265 | /// </summary> | ||
266 | /// <param name="node">Element to parse.</param> | ||
267 | /// <param name="componentKey">Identifier of parent component.</param> | ||
268 | /// <param name="applicationKey">Optional identifier of parent application.</param> | ||
269 | private void ParseComPlusPartitionRoleElement(XElement node, string componentKey, string partitionKey) | ||
270 | { | ||
271 | SourceLineNumber sourceLineNumbers = Preprocessor.GetSourceLineNumbers(node); | ||
272 | |||
273 | string key = null; | ||
274 | string name = null; | ||
275 | |||
276 | foreach (XAttribute attrib in node.Attributes()) | ||
277 | { | ||
278 | if (String.IsNullOrEmpty(attrib.Name.NamespaceName) || this.Namespace == attrib.Name.Namespace) | ||
279 | { | ||
280 | switch (attrib.Name.LocalName) | ||
281 | { | ||
282 | case "Id": | ||
283 | key = this.Core.GetAttributeIdentifierValue(sourceLineNumbers, attrib); | ||
284 | break; | ||
285 | case "Partition": | ||
286 | if (null != partitionKey) | ||
287 | { | ||
288 | this.Core.OnMessage(WixErrors.IllegalAttributeWhenNested(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName, node.Parent.Name.LocalName)); | ||
289 | } | ||
290 | partitionKey = this.Core.GetAttributeValue(sourceLineNumbers, attrib); | ||
291 | this.Core.CreateSimpleReference(sourceLineNumbers, "ComPlusPartition", partitionKey); | ||
292 | break; | ||
293 | case "Name": | ||
294 | name = this.Core.GetAttributeValue(sourceLineNumbers, attrib); | ||
295 | break; | ||
296 | default: | ||
297 | this.Core.UnexpectedAttribute(node, attrib); | ||
298 | break; | ||
299 | } | ||
300 | } | ||
301 | else | ||
302 | { | ||
303 | this.Core.ParseExtensionAttribute(node, attrib); | ||
304 | } | ||
305 | } | ||
306 | |||
307 | if (null == partitionKey) | ||
308 | { | ||
309 | this.Core.OnMessage(WixErrors.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Partition")); | ||
310 | } | ||
311 | |||
312 | foreach (XElement child in node.Elements()) | ||
313 | { | ||
314 | if (this.Namespace == child.Name.Namespace) | ||
315 | { | ||
316 | switch (child.Name.LocalName) | ||
317 | { | ||
318 | case "ComPlusUserInPartitionRole": | ||
319 | this.ParseComPlusUserInPartitionRoleElement(child, componentKey, key); | ||
320 | break; | ||
321 | case "ComPlusGroupInPartitionRole": | ||
322 | this.ParseComPlusGroupInPartitionRoleElement(child, componentKey, key); | ||
323 | break; | ||
324 | default: | ||
325 | this.Core.UnexpectedElement(node, child); | ||
326 | break; | ||
327 | } | ||
328 | } | ||
329 | else | ||
330 | { | ||
331 | this.Core.ParseExtensionElement(node, child); | ||
332 | } | ||
333 | } | ||
334 | |||
335 | // add table row | ||
336 | Row row = this.Core.CreateRow(sourceLineNumbers, "ComPlusPartitionRole"); | ||
337 | row[0] = key; | ||
338 | row[1] = partitionKey; | ||
339 | row[3] = name; | ||
340 | } | ||
341 | |||
342 | /// <summary> | ||
343 | /// Parses a COM+ partition role user element. | ||
344 | /// </summary> | ||
345 | /// <param name="node">Element to parse.</param> | ||
346 | /// <param name="componentKey">Identifier of parent component.</param> | ||
347 | /// <param name="applicationKey">Optional identifier of parent application role.</param> | ||
348 | private void ParseComPlusUserInPartitionRoleElement(XElement node, string componentKey, string partitionRoleKey) | ||
349 | { | ||
350 | SourceLineNumber sourceLineNumbers = Preprocessor.GetSourceLineNumbers(node); | ||
351 | |||
352 | string key = null; | ||
353 | string user = null; | ||
354 | |||
355 | foreach (XAttribute attrib in node.Attributes()) | ||
356 | { | ||
357 | if (String.IsNullOrEmpty(attrib.Name.NamespaceName) || this.Namespace == attrib.Name.Namespace) | ||
358 | { | ||
359 | switch (attrib.Name.LocalName) | ||
360 | { | ||
361 | case "Id": | ||
362 | key = this.Core.GetAttributeIdentifierValue(sourceLineNumbers, attrib); | ||
363 | break; | ||
364 | case "PartitionRole": | ||
365 | if (null != partitionRoleKey) | ||
366 | { | ||
367 | this.Core.OnMessage(WixErrors.IllegalAttributeWhenNested(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName, node.Parent.Name.LocalName)); | ||
368 | } | ||
369 | partitionRoleKey = this.Core.GetAttributeValue(sourceLineNumbers, attrib); | ||
370 | this.Core.CreateSimpleReference(sourceLineNumbers, "ComPlusPartitionRole", partitionRoleKey); | ||
371 | break; | ||
372 | case "User": | ||
373 | user = this.Core.GetAttributeValue(sourceLineNumbers, attrib); | ||
374 | this.Core.CreateSimpleReference(sourceLineNumbers, "User", user); | ||
375 | break; | ||
376 | default: | ||
377 | this.Core.UnexpectedAttribute(node, attrib); | ||
378 | break; | ||
379 | } | ||
380 | } | ||
381 | else | ||
382 | { | ||
383 | this.Core.ParseExtensionAttribute(node, attrib); | ||
384 | } | ||
385 | } | ||
386 | |||
387 | if (null == partitionRoleKey) | ||
388 | { | ||
389 | this.Core.OnMessage(WixErrors.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "PartitionRole")); | ||
390 | } | ||
391 | |||
392 | Row row = this.Core.CreateRow(sourceLineNumbers, "ComPlusUserInPartitionRole"); | ||
393 | row[0] = key; | ||
394 | row[1] = partitionRoleKey; | ||
395 | row[2] = componentKey; | ||
396 | row[3] = user; | ||
397 | } | ||
398 | |||
399 | /// <summary> | ||
400 | /// Parses a COM+ partition role user element. | ||
401 | /// </summary> | ||
402 | /// <param name="node">Element to parse.</param> | ||
403 | /// <param name="componentKey">Identifier of parent component.</param> | ||
404 | /// <param name="applicationKey">Optional identifier of parent application role.</param> | ||
405 | private void ParseComPlusGroupInPartitionRoleElement(XElement node, string componentKey, string partitionRoleKey) | ||
406 | { | ||
407 | SourceLineNumber sourceLineNumbers = Preprocessor.GetSourceLineNumbers(node); | ||
408 | |||
409 | string key = null; | ||
410 | string group = null; | ||
411 | |||
412 | foreach (XAttribute attrib in node.Attributes()) | ||
413 | { | ||
414 | if (String.IsNullOrEmpty(attrib.Name.NamespaceName) || this.Namespace == attrib.Name.Namespace) | ||
415 | { | ||
416 | switch (attrib.Name.LocalName) | ||
417 | { | ||
418 | case "Id": | ||
419 | key = this.Core.GetAttributeIdentifierValue(sourceLineNumbers, attrib); | ||
420 | break; | ||
421 | case "PartitionRole": | ||
422 | if (null != partitionRoleKey) | ||
423 | { | ||
424 | this.Core.OnMessage(WixErrors.IllegalAttributeWhenNested(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName, node.Parent.Name.LocalName)); | ||
425 | } | ||
426 | partitionRoleKey = this.Core.GetAttributeValue(sourceLineNumbers, attrib); | ||
427 | this.Core.CreateSimpleReference(sourceLineNumbers, "ComPlusPartitionRole", partitionRoleKey); | ||
428 | break; | ||
429 | case "Group": | ||
430 | group = this.Core.GetAttributeValue(sourceLineNumbers, attrib); | ||
431 | this.Core.CreateSimpleReference(sourceLineNumbers, "Group", group); | ||
432 | break; | ||
433 | default: | ||
434 | this.Core.UnexpectedAttribute(node, attrib); | ||
435 | break; | ||
436 | } | ||
437 | } | ||
438 | else | ||
439 | { | ||
440 | this.Core.ParseExtensionAttribute(node, attrib); | ||
441 | } | ||
442 | } | ||
443 | |||
444 | if (null == partitionRoleKey) | ||
445 | { | ||
446 | this.Core.OnMessage(WixErrors.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "PartitionRole")); | ||
447 | } | ||
448 | |||
449 | Row row = this.Core.CreateRow(sourceLineNumbers, "ComPlusGroupInPartitionRole"); | ||
450 | row[0] = key; | ||
451 | row[1] = partitionRoleKey; | ||
452 | row[2] = componentKey; | ||
453 | row[3] = group; | ||
454 | } | ||
455 | |||
456 | /// <summary> | ||
457 | /// Parses a COM+ partition element. | ||
458 | /// </summary> | ||
459 | /// <param name="node">Element to parse.</param> | ||
460 | /// <param name="componentKey">Identifier of parent component.</param> | ||
461 | private void ParseComPlusPartitionUserElement(XElement node, string componentKey, string partitionKey) | ||
462 | { | ||
463 | SourceLineNumber sourceLineNumbers = Preprocessor.GetSourceLineNumbers(node); | ||
464 | |||
465 | string key = null; | ||
466 | string user = null; | ||
467 | |||
468 | foreach (XAttribute attrib in node.Attributes()) | ||
469 | { | ||
470 | if (String.IsNullOrEmpty(attrib.Name.NamespaceName) || this.Namespace == attrib.Name.Namespace) | ||
471 | { | ||
472 | switch (attrib.Name.LocalName) | ||
473 | { | ||
474 | case "Id": | ||
475 | key = this.Core.GetAttributeIdentifierValue(sourceLineNumbers, attrib); | ||
476 | break; | ||
477 | case "Partition": | ||
478 | if (null != partitionKey) | ||
479 | { | ||
480 | this.Core.OnMessage(WixErrors.IllegalAttributeWhenNested(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName, node.Parent.Name.LocalName)); | ||
481 | } | ||
482 | partitionKey = this.Core.GetAttributeValue(sourceLineNumbers, attrib); | ||
483 | this.Core.CreateSimpleReference(sourceLineNumbers, "ComPlusPartition", partitionKey); | ||
484 | break; | ||
485 | case "User": | ||
486 | user = this.Core.GetAttributeValue(sourceLineNumbers, attrib); | ||
487 | this.Core.CreateSimpleReference(sourceLineNumbers, "User", user); | ||
488 | break; | ||
489 | default: | ||
490 | this.Core.UnexpectedAttribute(node, attrib); | ||
491 | break; | ||
492 | } | ||
493 | } | ||
494 | else | ||
495 | { | ||
496 | this.Core.ParseExtensionAttribute(node, attrib); | ||
497 | } | ||
498 | } | ||
499 | |||
500 | if (null == partitionKey) | ||
501 | { | ||
502 | this.Core.OnMessage(WixErrors.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Partition")); | ||
503 | } | ||
504 | |||
505 | Row row = this.Core.CreateRow(sourceLineNumbers, "ComPlusPartitionUser"); | ||
506 | row[0] = key; | ||
507 | row[1] = partitionKey; | ||
508 | row[2] = componentKey; | ||
509 | row[3] = user; | ||
510 | } | ||
511 | |||
512 | /// <summary> | ||
513 | /// Parses a COM+ application element. | ||
514 | /// </summary> | ||
515 | /// <param name="node">Element to parse.</param> | ||
516 | /// <param name="componentKey">Identifier of parent component.</param> | ||
517 | /// <param name="partitionKey">Optional identifier of parent partition.</param> | ||
518 | private void ParseComPlusApplicationElement(XElement node, string componentKey, bool win64, string partitionKey) | ||
519 | { | ||
520 | SourceLineNumber sourceLineNumbers = Preprocessor.GetSourceLineNumbers(node); | ||
521 | |||
522 | string key = null; | ||
523 | string id = null; | ||
524 | string name = null; | ||
525 | |||
526 | Hashtable properties = new Hashtable(); | ||
527 | |||
528 | foreach (XAttribute attrib in node.Attributes()) | ||
529 | { | ||
530 | if (String.IsNullOrEmpty(attrib.Name.NamespaceName) || this.Namespace == attrib.Name.Namespace) | ||
531 | { | ||
532 | switch (attrib.Name.LocalName) | ||
533 | { | ||
534 | case "Id": | ||
535 | key = this.Core.GetAttributeIdentifierValue(sourceLineNumbers, attrib); | ||
536 | break; | ||
537 | case "Partition": | ||
538 | if (null != partitionKey) | ||
539 | { | ||
540 | this.Core.OnMessage(WixErrors.IllegalAttributeWhenNested(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName, node.Parent.Name.LocalName)); | ||
541 | } | ||
542 | partitionKey = this.Core.GetAttributeValue(sourceLineNumbers, attrib); | ||
543 | this.Core.CreateSimpleReference(sourceLineNumbers, "ComPlusPartition", partitionKey); | ||
544 | break; | ||
545 | case "ApplicationId": | ||
546 | id = TryFormatGuidValue(this.Core.GetAttributeValue(sourceLineNumbers, attrib)); | ||
547 | break; | ||
548 | case "Name": | ||
549 | name = this.Core.GetAttributeValue(sourceLineNumbers, attrib); | ||
550 | break; | ||
551 | case "ThreeGigSupportEnabled": | ||
552 | if (null == componentKey) | ||
553 | { | ||
554 | this.Core.OnMessage(ComPlusErrors.IllegalAttributeWithoutComponent(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName)); | ||
555 | } | ||
556 | properties["3GigSupportEnabled"] = YesNoType.Yes == this.Core.GetAttributeYesNoValue(sourceLineNumbers, attrib) ? "1" : "0"; | ||
557 | break; | ||
558 | case "AccessChecksLevel": | ||
559 | if (null == componentKey) | ||
560 | { | ||
561 | this.Core.OnMessage(ComPlusErrors.IllegalAttributeWithoutComponent(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName)); | ||
562 | } | ||
563 | string accessChecksLevelValue = this.Core.GetAttributeValue(sourceLineNumbers, attrib); | ||
564 | switch (accessChecksLevelValue) | ||
565 | { | ||
566 | case "applicationLevel": | ||
567 | properties["AccessChecksLevel"] = "0"; | ||
568 | break; | ||
569 | case "applicationComponentLevel": | ||
570 | properties["AccessChecksLevel"] = "1"; | ||
571 | break; | ||
572 | default: | ||
573 | this.Core.OnMessage(WixErrors.IllegalAttributeValue(sourceLineNumbers, "ComPlusApplication", "AccessChecksLevel", accessChecksLevelValue, "applicationLevel", "applicationComponentLevel")); | ||
574 | break; | ||
575 | } | ||
576 | break; | ||
577 | case "Activation": | ||
578 | if (null == componentKey) | ||
579 | { | ||
580 | this.Core.OnMessage(ComPlusErrors.IllegalAttributeWithoutComponent(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName)); | ||
581 | } | ||
582 | string activationValue = this.Core.GetAttributeValue(sourceLineNumbers, attrib); | ||
583 | switch (activationValue) | ||
584 | { | ||
585 | case "inproc": | ||
586 | properties["Activation"] = "Inproc"; | ||
587 | break; | ||
588 | case "local": | ||
589 | properties["Activation"] = "Local"; | ||
590 | break; | ||
591 | default: | ||
592 | this.Core.OnMessage(WixErrors.IllegalAttributeValue(sourceLineNumbers, "ComPlusApplication", "Activation", activationValue, "inproc", "local")); | ||
593 | break; | ||
594 | } | ||
595 | break; | ||
596 | case "ApplicationAccessChecksEnabled": | ||
597 | if (null == componentKey) | ||
598 | { | ||
599 | this.Core.OnMessage(ComPlusErrors.IllegalAttributeWithoutComponent(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName)); | ||
600 | } | ||
601 | properties["ApplicationAccessChecksEnabled"] = YesNoType.Yes == this.Core.GetAttributeYesNoValue(sourceLineNumbers, attrib) ? "1" : "0"; | ||
602 | break; | ||
603 | case "ApplicationDirectory": | ||
604 | if (null == componentKey) | ||
605 | { | ||
606 | this.Core.OnMessage(ComPlusErrors.IllegalAttributeWithoutComponent(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName)); | ||
607 | } | ||
608 | properties["ApplicationDirectory"] = this.Core.GetAttributeValue(sourceLineNumbers, attrib); | ||
609 | break; | ||
610 | case "Authentication": | ||
611 | if (null == componentKey) | ||
612 | { | ||
613 | this.Core.OnMessage(ComPlusErrors.IllegalAttributeWithoutComponent(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName)); | ||
614 | } | ||
615 | string authenticationValue = this.Core.GetAttributeValue(sourceLineNumbers, attrib); | ||
616 | switch (authenticationValue) | ||
617 | { | ||
618 | case "default": | ||
619 | properties["Authentication"] = "0"; | ||
620 | break; | ||
621 | case "none": | ||
622 | properties["Authentication"] = "1"; | ||
623 | break; | ||
624 | case "connect": | ||
625 | properties["Authentication"] = "2"; | ||
626 | break; | ||
627 | case "call": | ||
628 | properties["Authentication"] = "3"; | ||
629 | break; | ||
630 | case "packet": | ||
631 | properties["Authentication"] = "4"; | ||
632 | break; | ||
633 | case "integrity": | ||
634 | properties["Authentication"] = "5"; | ||
635 | break; | ||
636 | case "privacy": | ||
637 | properties["Authentication"] = "6"; | ||
638 | break; | ||
639 | default: | ||
640 | this.Core.OnMessage(WixErrors.IllegalAttributeValue(sourceLineNumbers, "ComPlusApplication", "Authentication", authenticationValue, "default", "none", "connect", "call", "packet", "integrity", "privacy")); | ||
641 | break; | ||
642 | } | ||
643 | break; | ||
644 | case "AuthenticationCapability": | ||
645 | if (null == componentKey) | ||
646 | { | ||
647 | this.Core.OnMessage(ComPlusErrors.IllegalAttributeWithoutComponent(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName)); | ||
648 | } | ||
649 | string authenticationCapabilityValue = this.Core.GetAttributeValue(sourceLineNumbers, attrib); | ||
650 | switch (authenticationCapabilityValue) | ||
651 | { | ||
652 | case "none": | ||
653 | properties["AuthenticationCapability"] = "0"; | ||
654 | break; | ||
655 | case "secureReference": | ||
656 | properties["AuthenticationCapability"] = "2"; | ||
657 | break; | ||
658 | case "staticCloaking": | ||
659 | properties["AuthenticationCapability"] = "32"; | ||
660 | break; | ||
661 | case "dynamicCloaking": | ||
662 | properties["AuthenticationCapability"] = "64"; | ||
663 | break; | ||
664 | default: | ||
665 | this.Core.OnMessage(WixErrors.IllegalAttributeValue(sourceLineNumbers, "ComPlusApplication", "AuthenticationCapability", authenticationCapabilityValue, "none", "secureReference", "staticCloaking", "dynamicCloaking")); | ||
666 | break; | ||
667 | } | ||
668 | break; | ||
669 | case "Changeable": | ||
670 | this.Core.OnMessage(WixWarnings.DeprecatedAttribute(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName)); | ||
671 | break; | ||
672 | case "CommandLine": | ||
673 | if (null == componentKey) | ||
674 | { | ||
675 | this.Core.OnMessage(ComPlusErrors.IllegalAttributeWithoutComponent(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName)); | ||
676 | } | ||
677 | properties["CommandLine"] = this.Core.GetAttributeValue(sourceLineNumbers, attrib); | ||
678 | break; | ||
679 | case "ConcurrentApps": | ||
680 | if (null == componentKey) | ||
681 | { | ||
682 | this.Core.OnMessage(ComPlusErrors.IllegalAttributeWithoutComponent(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName)); | ||
683 | } | ||
684 | properties["ConcurrentApps"] = this.Core.GetAttributeValue(sourceLineNumbers, attrib); | ||
685 | break; | ||
686 | case "CreatedBy": | ||
687 | if (null == componentKey) | ||
688 | { | ||
689 | this.Core.OnMessage(ComPlusErrors.IllegalAttributeWithoutComponent(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName)); | ||
690 | } | ||
691 | properties["CreatedBy"] = this.Core.GetAttributeValue(sourceLineNumbers, attrib); | ||
692 | break; | ||
693 | case "CRMEnabled": | ||
694 | if (null == componentKey) | ||
695 | { | ||
696 | this.Core.OnMessage(ComPlusErrors.IllegalAttributeWithoutComponent(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName)); | ||
697 | } | ||
698 | properties["CRMEnabled"] = YesNoType.Yes == this.Core.GetAttributeYesNoValue(sourceLineNumbers, attrib) ? "1" : "0"; | ||
699 | break; | ||
700 | case "CRMLogFile": | ||
701 | if (null == componentKey) | ||
702 | { | ||
703 | this.Core.OnMessage(ComPlusErrors.IllegalAttributeWithoutComponent(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName)); | ||
704 | } | ||
705 | properties["CRMLogFile"] = this.Core.GetAttributeValue(sourceLineNumbers, attrib); | ||
706 | break; | ||
707 | case "Deleteable": | ||
708 | if (null == componentKey) | ||
709 | { | ||
710 | this.Core.OnMessage(ComPlusErrors.IllegalAttributeWithoutComponent(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName)); | ||
711 | } | ||
712 | properties["Deleteable"] = YesNoType.Yes == this.Core.GetAttributeYesNoValue(sourceLineNumbers, attrib) ? "1" : "0"; | ||
713 | break; | ||
714 | case "Description": | ||
715 | if (null == componentKey) | ||
716 | { | ||
717 | this.Core.OnMessage(ComPlusErrors.IllegalAttributeWithoutComponent(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName)); | ||
718 | } | ||
719 | properties["Description"] = this.Core.GetAttributeValue(sourceLineNumbers, attrib); | ||
720 | break; | ||
721 | case "DumpEnabled": | ||
722 | if (null == componentKey) | ||
723 | { | ||
724 | this.Core.OnMessage(ComPlusErrors.IllegalAttributeWithoutComponent(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName)); | ||
725 | } | ||
726 | properties["DumpEnabled"] = YesNoType.Yes == this.Core.GetAttributeYesNoValue(sourceLineNumbers, attrib) ? "1" : "0"; | ||
727 | break; | ||
728 | case "DumpOnException": | ||
729 | if (null == componentKey) | ||
730 | { | ||
731 | this.Core.OnMessage(ComPlusErrors.IllegalAttributeWithoutComponent(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName)); | ||
732 | } | ||
733 | properties["DumpOnException"] = YesNoType.Yes == this.Core.GetAttributeYesNoValue(sourceLineNumbers, attrib) ? "1" : "0"; | ||
734 | break; | ||
735 | case "DumpOnFailfast": | ||
736 | if (null == componentKey) | ||
737 | { | ||
738 | this.Core.OnMessage(ComPlusErrors.IllegalAttributeWithoutComponent(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName)); | ||
739 | } | ||
740 | properties["DumpOnFailfast"] = YesNoType.Yes == this.Core.GetAttributeYesNoValue(sourceLineNumbers, attrib) ? "1" : "0"; | ||
741 | break; | ||
742 | case "DumpPath": | ||
743 | if (null == componentKey) | ||
744 | { | ||
745 | this.Core.OnMessage(ComPlusErrors.IllegalAttributeWithoutComponent(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName)); | ||
746 | } | ||
747 | properties["DumpPath"] = this.Core.GetAttributeValue(sourceLineNumbers, attrib); | ||
748 | break; | ||
749 | case "EventsEnabled": | ||
750 | if (null == componentKey) | ||
751 | { | ||
752 | this.Core.OnMessage(ComPlusErrors.IllegalAttributeWithoutComponent(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName)); | ||
753 | } | ||
754 | properties["EventsEnabled"] = YesNoType.Yes == this.Core.GetAttributeYesNoValue(sourceLineNumbers, attrib) ? "1" : "0"; | ||
755 | break; | ||
756 | case "Identity": | ||
757 | if (null == componentKey) | ||
758 | { | ||
759 | this.Core.OnMessage(ComPlusErrors.IllegalAttributeWithoutComponent(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName)); | ||
760 | } | ||
761 | properties["Identity"] = this.Core.GetAttributeValue(sourceLineNumbers, attrib); | ||
762 | break; | ||
763 | case "ImpersonationLevel": | ||
764 | if (null == componentKey) | ||
765 | { | ||
766 | this.Core.OnMessage(ComPlusErrors.IllegalAttributeWithoutComponent(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName)); | ||
767 | } | ||
768 | string impersonationLevelValue = this.Core.GetAttributeValue(sourceLineNumbers, attrib); | ||
769 | switch (impersonationLevelValue) | ||
770 | { | ||
771 | case "anonymous": | ||
772 | properties["ImpersonationLevel"] = "1"; | ||
773 | break; | ||
774 | case "identify": | ||
775 | properties["ImpersonationLevel"] = "2"; | ||
776 | break; | ||
777 | case "impersonate": | ||
778 | properties["ImpersonationLevel"] = "3"; | ||
779 | break; | ||
780 | case "delegate": | ||
781 | properties["ImpersonationLevel"] = "4"; | ||
782 | break; | ||
783 | default: | ||
784 | this.Core.OnMessage(WixErrors.IllegalAttributeValue(sourceLineNumbers, "ComPlusApplication", "ImpersonationLevel", impersonationLevelValue, "anonymous", "identify", "impersonate", "delegate")); | ||
785 | break; | ||
786 | } | ||
787 | break; | ||
788 | case "IsEnabled": | ||
789 | if (null == componentKey) | ||
790 | { | ||
791 | this.Core.OnMessage(ComPlusErrors.IllegalAttributeWithoutComponent(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName)); | ||
792 | } | ||
793 | properties["IsEnabled"] = YesNoType.Yes == this.Core.GetAttributeYesNoValue(sourceLineNumbers, attrib) ? "1" : "0"; | ||
794 | break; | ||
795 | case "MaxDumpCount": | ||
796 | if (null == componentKey) | ||
797 | { | ||
798 | this.Core.OnMessage(ComPlusErrors.IllegalAttributeWithoutComponent(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName)); | ||
799 | } | ||
800 | properties["MaxDumpCount"] = this.Core.GetAttributeValue(sourceLineNumbers, attrib); | ||
801 | break; | ||
802 | case "Password": | ||
803 | if (null == componentKey) | ||
804 | { | ||
805 | this.Core.OnMessage(ComPlusErrors.IllegalAttributeWithoutComponent(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName)); | ||
806 | } | ||
807 | properties["Password"] = this.Core.GetAttributeValue(sourceLineNumbers, attrib); | ||
808 | break; | ||
809 | case "QCAuthenticateMsgs": | ||
810 | if (null == componentKey) | ||
811 | { | ||
812 | this.Core.OnMessage(ComPlusErrors.IllegalAttributeWithoutComponent(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName)); | ||
813 | } | ||
814 | string qcAuthenticateMsgsValue = this.Core.GetAttributeValue(sourceLineNumbers, attrib); | ||
815 | switch (qcAuthenticateMsgsValue) | ||
816 | { | ||
817 | case "secureApps": | ||
818 | properties["QCAuthenticateMsgs"] = "0"; | ||
819 | break; | ||
820 | case "off": | ||
821 | properties["QCAuthenticateMsgs"] = "1"; | ||
822 | break; | ||
823 | case "on": | ||
824 | properties["QCAuthenticateMsgs"] = "2"; | ||
825 | break; | ||
826 | default: | ||
827 | this.Core.OnMessage(WixErrors.IllegalAttributeValue(sourceLineNumbers, "ComPlusApplication", "QCAuthenticateMsgs", qcAuthenticateMsgsValue, "secureApps", "off", "on")); | ||
828 | break; | ||
829 | } | ||
830 | break; | ||
831 | case "QCListenerMaxThreads": | ||
832 | if (null == componentKey) | ||
833 | { | ||
834 | this.Core.OnMessage(ComPlusErrors.IllegalAttributeWithoutComponent(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName)); | ||
835 | } | ||
836 | properties["QCListenerMaxThreads"] = this.Core.GetAttributeValue(sourceLineNumbers, attrib); | ||
837 | break; | ||
838 | case "QueueListenerEnabled": | ||
839 | if (null == componentKey) | ||
840 | { | ||
841 | this.Core.OnMessage(ComPlusErrors.IllegalAttributeWithoutComponent(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName)); | ||
842 | } | ||
843 | properties["QueueListenerEnabled"] = YesNoType.Yes == this.Core.GetAttributeYesNoValue(sourceLineNumbers, attrib) ? "1" : "0"; | ||
844 | break; | ||
845 | case "QueuingEnabled": | ||
846 | if (null == componentKey) | ||
847 | { | ||
848 | this.Core.OnMessage(ComPlusErrors.IllegalAttributeWithoutComponent(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName)); | ||
849 | } | ||
850 | properties["QueuingEnabled"] = YesNoType.Yes == this.Core.GetAttributeYesNoValue(sourceLineNumbers, attrib) ? "1" : "0"; | ||
851 | break; | ||
852 | case "RecycleActivationLimit": | ||
853 | if (null == componentKey) | ||
854 | { | ||
855 | this.Core.OnMessage(ComPlusErrors.IllegalAttributeWithoutComponent(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName)); | ||
856 | } | ||
857 | properties["RecycleActivationLimit"] = this.Core.GetAttributeValue(sourceLineNumbers, attrib); | ||
858 | break; | ||
859 | case "RecycleCallLimit": | ||
860 | if (null == componentKey) | ||
861 | { | ||
862 | this.Core.OnMessage(ComPlusErrors.IllegalAttributeWithoutComponent(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName)); | ||
863 | } | ||
864 | properties["RecycleCallLimit"] = this.Core.GetAttributeValue(sourceLineNumbers, attrib); | ||
865 | break; | ||
866 | case "RecycleExpirationTimeout": | ||
867 | if (null == componentKey) | ||
868 | { | ||
869 | this.Core.OnMessage(ComPlusErrors.IllegalAttributeWithoutComponent(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName)); | ||
870 | } | ||
871 | properties["RecycleExpirationTimeout"] = this.Core.GetAttributeValue(sourceLineNumbers, attrib); | ||
872 | break; | ||
873 | case "RecycleLifetimeLimit": | ||
874 | if (null == componentKey) | ||
875 | { | ||
876 | this.Core.OnMessage(ComPlusErrors.IllegalAttributeWithoutComponent(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName)); | ||
877 | } | ||
878 | properties["RecycleLifetimeLimit"] = this.Core.GetAttributeValue(sourceLineNumbers, attrib); | ||
879 | break; | ||
880 | case "RecycleMemoryLimit": | ||
881 | if (null == componentKey) | ||
882 | { | ||
883 | this.Core.OnMessage(ComPlusErrors.IllegalAttributeWithoutComponent(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName)); | ||
884 | } | ||
885 | properties["RecycleMemoryLimit"] = this.Core.GetAttributeValue(sourceLineNumbers, attrib); | ||
886 | break; | ||
887 | case "Replicable": | ||
888 | if (null == componentKey) | ||
889 | { | ||
890 | this.Core.OnMessage(ComPlusErrors.IllegalAttributeWithoutComponent(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName)); | ||
891 | } | ||
892 | properties["Replicable"] = YesNoType.Yes == this.Core.GetAttributeYesNoValue(sourceLineNumbers, attrib) ? "1" : "0"; | ||
893 | break; | ||
894 | case "RunForever": | ||
895 | if (null == componentKey) | ||
896 | { | ||
897 | this.Core.OnMessage(ComPlusErrors.IllegalAttributeWithoutComponent(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName)); | ||
898 | } | ||
899 | properties["RunForever"] = YesNoType.Yes == this.Core.GetAttributeYesNoValue(sourceLineNumbers, attrib) ? "1" : "0"; | ||
900 | break; | ||
901 | case "ShutdownAfter": | ||
902 | if (null == componentKey) | ||
903 | { | ||
904 | this.Core.OnMessage(ComPlusErrors.IllegalAttributeWithoutComponent(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName)); | ||
905 | } | ||
906 | properties["ShutdownAfter"] = this.Core.GetAttributeValue(sourceLineNumbers, attrib); | ||
907 | break; | ||
908 | case "SoapActivated": | ||
909 | if (null == componentKey) | ||
910 | { | ||
911 | this.Core.OnMessage(ComPlusErrors.IllegalAttributeWithoutComponent(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName)); | ||
912 | } | ||
913 | properties["SoapActivated"] = YesNoType.Yes == this.Core.GetAttributeYesNoValue(sourceLineNumbers, attrib) ? "1" : "0"; | ||
914 | break; | ||
915 | case "SoapBaseUrl": | ||
916 | if (null == componentKey) | ||
917 | { | ||
918 | this.Core.OnMessage(ComPlusErrors.IllegalAttributeWithoutComponent(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName)); | ||
919 | } | ||
920 | properties["SoapBaseUrl"] = this.Core.GetAttributeValue(sourceLineNumbers, attrib); | ||
921 | break; | ||
922 | case "SoapMailTo": | ||
923 | if (null == componentKey) | ||
924 | { | ||
925 | this.Core.OnMessage(ComPlusErrors.IllegalAttributeWithoutComponent(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName)); | ||
926 | } | ||
927 | properties["SoapMailTo"] = this.Core.GetAttributeValue(sourceLineNumbers, attrib); | ||
928 | break; | ||
929 | case "SoapVRoot": | ||
930 | if (null == componentKey) | ||
931 | { | ||
932 | this.Core.OnMessage(ComPlusErrors.IllegalAttributeWithoutComponent(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName)); | ||
933 | } | ||
934 | properties["SoapVRoot"] = this.Core.GetAttributeValue(sourceLineNumbers, attrib); | ||
935 | break; | ||
936 | case "SRPEnabled": | ||
937 | if (null == componentKey) | ||
938 | { | ||
939 | this.Core.OnMessage(ComPlusErrors.IllegalAttributeWithoutComponent(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName)); | ||
940 | } | ||
941 | properties["SRPEnabled"] = YesNoType.Yes == this.Core.GetAttributeYesNoValue(sourceLineNumbers, attrib) ? "1" : "0"; | ||
942 | break; | ||
943 | case "SRPTrustLevel": | ||
944 | if (null == componentKey) | ||
945 | { | ||
946 | this.Core.OnMessage(ComPlusErrors.IllegalAttributeWithoutComponent(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName)); | ||
947 | } | ||
948 | string srpTrustLevelValue = this.Core.GetAttributeValue(sourceLineNumbers, attrib); | ||
949 | switch (srpTrustLevelValue) | ||
950 | { | ||
951 | case "disallowed": | ||
952 | properties["SRPTrustLevel"] = "0"; | ||
953 | break; | ||
954 | case "fullyTrusted": | ||
955 | properties["SRPTrustLevel"] = "262144"; | ||
956 | break; | ||
957 | default: | ||
958 | this.Core.OnMessage(WixErrors.IllegalAttributeValue(sourceLineNumbers, "ComPlusApplication", "SRPTrustLevel", srpTrustLevelValue, "disallowed", "fullyTrusted")); | ||
959 | break; | ||
960 | } | ||
961 | break; | ||
962 | default: | ||
963 | this.Core.UnexpectedAttribute(node, attrib); | ||
964 | break; | ||
965 | } | ||
966 | } | ||
967 | else | ||
968 | { | ||
969 | this.Core.ParseExtensionAttribute(node, attrib); | ||
970 | } | ||
971 | } | ||
972 | |||
973 | if (null != componentKey && null == name) | ||
974 | { | ||
975 | this.Core.OnMessage(ComPlusErrors.RequiredAttributeUnderComponent(sourceLineNumbers, node.Name.LocalName, "Name")); | ||
976 | } | ||
977 | if (null == componentKey && null == id && null == name) | ||
978 | { | ||
979 | this.Core.OnMessage(ComPlusErrors.RequiredAttributeNotUnderComponent(sourceLineNumbers, node.Name.LocalName, "Id", "Name")); | ||
980 | } | ||
981 | |||
982 | foreach (XElement child in node.Elements()) | ||
983 | { | ||
984 | if (this.Namespace == child.Name.Namespace) | ||
985 | { | ||
986 | switch (child.Name.LocalName) | ||
987 | { | ||
988 | case "ComPlusApplicationRole": | ||
989 | this.ParseComPlusApplicationRoleElement(child, componentKey, key); | ||
990 | break; | ||
991 | case "ComPlusAssembly": | ||
992 | this.ParseComPlusAssemblyElement(child, componentKey, win64, key); | ||
993 | break; | ||
994 | default: | ||
995 | this.Core.UnexpectedElement(node, child); | ||
996 | break; | ||
997 | } | ||
998 | } | ||
999 | else | ||
1000 | { | ||
1001 | this.Core.ParseExtensionElement(node, child); | ||
1002 | } | ||
1003 | } | ||
1004 | |||
1005 | Row row = this.Core.CreateRow(sourceLineNumbers, "ComPlusApplication"); | ||
1006 | row[0] = key; | ||
1007 | row[1] = partitionKey; | ||
1008 | row[2] = componentKey; | ||
1009 | row[3] = id; | ||
1010 | row[4] = name; | ||
1011 | |||
1012 | IDictionaryEnumerator propertiesEnumerator = properties.GetEnumerator(); | ||
1013 | while (propertiesEnumerator.MoveNext()) | ||
1014 | { | ||
1015 | Row propertyRow = this.Core.CreateRow(sourceLineNumbers, "ComPlusApplicationProperty"); | ||
1016 | propertyRow[0] = key; | ||
1017 | propertyRow[1] = (string)propertiesEnumerator.Key; | ||
1018 | propertyRow[2] = (string)propertiesEnumerator.Value; | ||
1019 | } | ||
1020 | |||
1021 | if (componentKey != null) | ||
1022 | { | ||
1023 | if (win64) | ||
1024 | { | ||
1025 | if (this.Core.CurrentPlatform == Platform.IA64) | ||
1026 | { | ||
1027 | this.Core.OnMessage(WixErrors.UnsupportedPlatformForElement(sourceLineNumbers, "ia64", node.Name.LocalName)); | ||
1028 | } | ||
1029 | else | ||
1030 | { | ||
1031 | this.Core.CreateSimpleReference(sourceLineNumbers, "CustomAction", "ConfigureComPlusInstall_x64"); | ||
1032 | this.Core.CreateSimpleReference(sourceLineNumbers, "CustomAction", "ConfigureComPlusUninstall_x64"); | ||
1033 | } | ||
1034 | } | ||
1035 | else | ||
1036 | { | ||
1037 | this.Core.CreateSimpleReference(sourceLineNumbers, "CustomAction", "ConfigureComPlusInstall"); | ||
1038 | this.Core.CreateSimpleReference(sourceLineNumbers, "CustomAction", "ConfigureComPlusUninstall"); | ||
1039 | } | ||
1040 | } | ||
1041 | } | ||
1042 | |||
1043 | /// <summary> | ||
1044 | /// Parses a COM+ application role element. | ||
1045 | /// </summary> | ||
1046 | /// <param name="node">Element to parse.</param> | ||
1047 | /// <param name="componentKey">Identifier of parent component.</param> | ||
1048 | /// <param name="applicationKey">Optional identifier of parent application.</param> | ||
1049 | private void ParseComPlusApplicationRoleElement(XElement node, string componentKey, string applicationKey) | ||
1050 | { | ||
1051 | SourceLineNumber sourceLineNumbers = Preprocessor.GetSourceLineNumbers(node); | ||
1052 | |||
1053 | string key = null; | ||
1054 | string name = null; | ||
1055 | |||
1056 | Hashtable properties = new Hashtable(); | ||
1057 | |||
1058 | foreach (XAttribute attrib in node.Attributes()) | ||
1059 | { | ||
1060 | if (String.IsNullOrEmpty(attrib.Name.NamespaceName) || this.Namespace == attrib.Name.Namespace) | ||
1061 | { | ||
1062 | switch (attrib.Name.LocalName) | ||
1063 | { | ||
1064 | case "Id": | ||
1065 | key = this.Core.GetAttributeIdentifierValue(sourceLineNumbers, attrib); | ||
1066 | break; | ||
1067 | case "Application": | ||
1068 | if (null != applicationKey) | ||
1069 | { | ||
1070 | this.Core.OnMessage(WixErrors.IllegalAttributeWhenNested(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName, node.Parent.Name.LocalName)); | ||
1071 | } | ||
1072 | applicationKey = this.Core.GetAttributeValue(sourceLineNumbers, attrib); | ||
1073 | this.Core.CreateSimpleReference(sourceLineNumbers, "ComPlusApplication", applicationKey); | ||
1074 | break; | ||
1075 | case "Name": | ||
1076 | name = this.Core.GetAttributeValue(sourceLineNumbers, attrib); | ||
1077 | break; | ||
1078 | case "Description": | ||
1079 | if (null == componentKey) | ||
1080 | { | ||
1081 | this.Core.OnMessage(ComPlusErrors.IllegalAttributeWithoutComponent(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName)); | ||
1082 | } | ||
1083 | properties["Description"] = this.Core.GetAttributeValue(sourceLineNumbers, attrib); | ||
1084 | break; | ||
1085 | default: | ||
1086 | this.Core.UnexpectedAttribute(node, attrib); | ||
1087 | break; | ||
1088 | } | ||
1089 | } | ||
1090 | else | ||
1091 | { | ||
1092 | this.Core.ParseExtensionAttribute(node, attrib); | ||
1093 | } | ||
1094 | } | ||
1095 | |||
1096 | if (null == applicationKey) | ||
1097 | { | ||
1098 | this.Core.OnMessage(WixErrors.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Application")); | ||
1099 | } | ||
1100 | |||
1101 | foreach (XElement child in node.Elements()) | ||
1102 | { | ||
1103 | if (this.Namespace == child.Name.Namespace) | ||
1104 | { | ||
1105 | switch (child.Name.LocalName) | ||
1106 | { | ||
1107 | case "ComPlusUserInApplicationRole": | ||
1108 | this.ParseComPlusUserInApplicationRoleElement(child, componentKey, key); | ||
1109 | break; | ||
1110 | case "ComPlusGroupInApplicationRole": | ||
1111 | this.ParseComPlusGroupInApplicationRoleElement(child, componentKey, key); | ||
1112 | break; | ||
1113 | default: | ||
1114 | this.Core.UnexpectedElement(node, child); | ||
1115 | break; | ||
1116 | } | ||
1117 | } | ||
1118 | else | ||
1119 | { | ||
1120 | this.Core.ParseExtensionElement(node, child); | ||
1121 | } | ||
1122 | } | ||
1123 | |||
1124 | Row row = this.Core.CreateRow(sourceLineNumbers, "ComPlusApplicationRole"); | ||
1125 | row[0] = key; | ||
1126 | row[1] = applicationKey; | ||
1127 | row[2] = componentKey; | ||
1128 | row[3] = name; | ||
1129 | |||
1130 | IDictionaryEnumerator propertiesEnumerator = properties.GetEnumerator(); | ||
1131 | while (propertiesEnumerator.MoveNext()) | ||
1132 | { | ||
1133 | Row propertyRow = this.Core.CreateRow(sourceLineNumbers, "ComPlusApplicationRoleProperty"); | ||
1134 | propertyRow[0] = key; | ||
1135 | propertyRow[1] = (string)propertiesEnumerator.Key; | ||
1136 | propertyRow[2] = (string)propertiesEnumerator.Value; | ||
1137 | } | ||
1138 | } | ||
1139 | |||
1140 | /// <summary> | ||
1141 | /// Parses a COM+ application role user element. | ||
1142 | /// </summary> | ||
1143 | /// <param name="node">Element to parse.</param> | ||
1144 | /// <param name="componentKey">Identifier of parent component.</param> | ||
1145 | /// <param name="applicationKey">Optional identifier of parent application role.</param> | ||
1146 | private void ParseComPlusUserInApplicationRoleElement(XElement node, string componentKey, string applicationRoleKey) | ||
1147 | { | ||
1148 | SourceLineNumber sourceLineNumbers = Preprocessor.GetSourceLineNumbers(node); | ||
1149 | |||
1150 | string key = null; | ||
1151 | string user = null; | ||
1152 | |||
1153 | foreach (XAttribute attrib in node.Attributes()) | ||
1154 | { | ||
1155 | if (String.IsNullOrEmpty(attrib.Name.NamespaceName) || this.Namespace == attrib.Name.Namespace) | ||
1156 | { | ||
1157 | switch (attrib.Name.LocalName) | ||
1158 | { | ||
1159 | case "Id": | ||
1160 | key = this.Core.GetAttributeIdentifierValue(sourceLineNumbers, attrib); | ||
1161 | break; | ||
1162 | case "ApplicationRole": | ||
1163 | if (null != applicationRoleKey) | ||
1164 | { | ||
1165 | this.Core.OnMessage(WixErrors.IllegalAttributeWhenNested(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName, node.Parent.Name.LocalName)); | ||
1166 | } | ||
1167 | applicationRoleKey = this.Core.GetAttributeValue(sourceLineNumbers, attrib); | ||
1168 | this.Core.CreateSimpleReference(sourceLineNumbers, "ComPlusApplicationRole", applicationRoleKey); | ||
1169 | break; | ||
1170 | case "User": | ||
1171 | user = this.Core.GetAttributeValue(sourceLineNumbers, attrib); | ||
1172 | this.Core.CreateSimpleReference(sourceLineNumbers, "User", user); | ||
1173 | break; | ||
1174 | default: | ||
1175 | this.Core.UnexpectedAttribute(node, attrib); | ||
1176 | break; | ||
1177 | } | ||
1178 | } | ||
1179 | else | ||
1180 | { | ||
1181 | this.Core.ParseExtensionAttribute(node, attrib); | ||
1182 | } | ||
1183 | } | ||
1184 | |||
1185 | if (null == applicationRoleKey) | ||
1186 | { | ||
1187 | this.Core.OnMessage(WixErrors.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "ApplicationRole")); | ||
1188 | } | ||
1189 | |||
1190 | Row row = this.Core.CreateRow(sourceLineNumbers, "ComPlusUserInApplicationRole"); | ||
1191 | row[0] = key; | ||
1192 | row[1] = applicationRoleKey; | ||
1193 | row[2] = componentKey; | ||
1194 | row[3] = user; | ||
1195 | } | ||
1196 | |||
1197 | /// <summary> | ||
1198 | /// Parses a COM+ application role group element. | ||
1199 | /// </summary> | ||
1200 | /// <param name="node">Element to parse.</param> | ||
1201 | /// <param name="componentKey">Identifier of parent component.</param> | ||
1202 | /// <param name="applicationKey">Optional identifier of parent application role.</param> | ||
1203 | private void ParseComPlusGroupInApplicationRoleElement(XElement node, string componentKey, string applicationRoleKey) | ||
1204 | { | ||
1205 | SourceLineNumber sourceLineNumbers = Preprocessor.GetSourceLineNumbers(node); | ||
1206 | |||
1207 | string key = null; | ||
1208 | string group = null; | ||
1209 | |||
1210 | foreach (XAttribute attrib in node.Attributes()) | ||
1211 | { | ||
1212 | if (String.IsNullOrEmpty(attrib.Name.NamespaceName) || this.Namespace == attrib.Name.Namespace) | ||
1213 | { | ||
1214 | switch (attrib.Name.LocalName) | ||
1215 | { | ||
1216 | case "Id": | ||
1217 | key = this.Core.GetAttributeIdentifierValue(sourceLineNumbers, attrib); | ||
1218 | break; | ||
1219 | case "ApplicationRole": | ||
1220 | if (null != applicationRoleKey) | ||
1221 | { | ||
1222 | this.Core.OnMessage(WixErrors.IllegalAttributeWhenNested(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName, node.Parent.Name.LocalName)); | ||
1223 | } | ||
1224 | applicationRoleKey = this.Core.GetAttributeValue(sourceLineNumbers, attrib); | ||
1225 | this.Core.CreateSimpleReference(sourceLineNumbers, "ComPlusApplicationRole", applicationRoleKey); | ||
1226 | break; | ||
1227 | case "Group": | ||
1228 | group = this.Core.GetAttributeValue(sourceLineNumbers, attrib); | ||
1229 | this.Core.CreateSimpleReference(sourceLineNumbers, "Group", group); | ||
1230 | break; | ||
1231 | default: | ||
1232 | this.Core.UnexpectedAttribute(node, attrib); | ||
1233 | break; | ||
1234 | } | ||
1235 | } | ||
1236 | else | ||
1237 | { | ||
1238 | this.Core.ParseExtensionAttribute(node, attrib); | ||
1239 | } | ||
1240 | } | ||
1241 | |||
1242 | if (null == applicationRoleKey) | ||
1243 | { | ||
1244 | this.Core.OnMessage(WixErrors.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "ApplicationRole")); | ||
1245 | } | ||
1246 | |||
1247 | Row row = this.Core.CreateRow(sourceLineNumbers, "ComPlusGroupInApplicationRole"); | ||
1248 | row[0] = key; | ||
1249 | row[1] = applicationRoleKey; | ||
1250 | row[2] = componentKey; | ||
1251 | row[3] = group; | ||
1252 | } | ||
1253 | |||
1254 | /// <summary> | ||
1255 | /// Parses a COM+ assembly element. | ||
1256 | /// </summary> | ||
1257 | /// <param name="node">Element to parse.</param> | ||
1258 | /// <param name="componentKey">Identifier of parent component.</param> | ||
1259 | /// <param name="applicationKey">Optional identifier of parent application.</param> | ||
1260 | private void ParseComPlusAssemblyElement(XElement node, string componentKey, bool win64, string applicationKey) | ||
1261 | { | ||
1262 | SourceLineNumber sourceLineNumbers = Preprocessor.GetSourceLineNumbers(node); | ||
1263 | |||
1264 | string key = null; | ||
1265 | string assemblyName = null; | ||
1266 | string dllPath = null; | ||
1267 | string tlbPath = null; | ||
1268 | string psDllPath = null; | ||
1269 | int attributes = 0; | ||
1270 | |||
1271 | bool hasComponents = false; | ||
1272 | |||
1273 | foreach (XAttribute attrib in node.Attributes()) | ||
1274 | { | ||
1275 | if (String.IsNullOrEmpty(attrib.Name.NamespaceName) || this.Namespace == attrib.Name.Namespace) | ||
1276 | { | ||
1277 | switch (attrib.Name.LocalName) | ||
1278 | { | ||
1279 | case "Id": | ||
1280 | key = this.Core.GetAttributeIdentifierValue(sourceLineNumbers, attrib); | ||
1281 | break; | ||
1282 | case "Application": | ||
1283 | if (null != applicationKey) | ||
1284 | { | ||
1285 | this.Core.OnMessage(WixErrors.IllegalAttributeWhenNested(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName, node.Parent.Name.LocalName)); | ||
1286 | } | ||
1287 | applicationKey = this.Core.GetAttributeValue(sourceLineNumbers, attrib); | ||
1288 | this.Core.CreateSimpleReference(sourceLineNumbers, "ComPlusApplication", applicationKey); | ||
1289 | break; | ||
1290 | case "AssemblyName": | ||
1291 | assemblyName = this.Core.GetAttributeValue(sourceLineNumbers, attrib); | ||
1292 | break; | ||
1293 | case "DllPath": | ||
1294 | dllPath = this.Core.GetAttributeValue(sourceLineNumbers, attrib); | ||
1295 | break; | ||
1296 | case "TlbPath": | ||
1297 | tlbPath = this.Core.GetAttributeValue(sourceLineNumbers, attrib); | ||
1298 | break; | ||
1299 | case "PSDllPath": | ||
1300 | psDllPath = this.Core.GetAttributeValue(sourceLineNumbers, attrib); | ||
1301 | break; | ||
1302 | case "Type": | ||
1303 | string typeValue = this.Core.GetAttributeValue(sourceLineNumbers, attrib); | ||
1304 | switch (typeValue) | ||
1305 | { | ||
1306 | case ".net": | ||
1307 | attributes |= (int)CpiAssemblyAttributes.DotNetAssembly; | ||
1308 | break; | ||
1309 | case "native": | ||
1310 | attributes &= ~(int)CpiAssemblyAttributes.DotNetAssembly; | ||
1311 | break; | ||
1312 | default: | ||
1313 | this.Core.OnMessage(WixErrors.IllegalAttributeValue(sourceLineNumbers, "ComPlusAssembly", "Type", typeValue, ".net", "native")); | ||
1314 | break; | ||
1315 | } | ||
1316 | break; | ||
1317 | case "EventClass": | ||
1318 | if (YesNoType.Yes == this.Core.GetAttributeYesNoValue(sourceLineNumbers, attrib)) | ||
1319 | { | ||
1320 | attributes |= (int)CpiAssemblyAttributes.EventClass; | ||
1321 | } | ||
1322 | else | ||
1323 | { | ||
1324 | attributes &= ~(int)CpiAssemblyAttributes.EventClass; | ||
1325 | } | ||
1326 | break; | ||
1327 | case "DllPathFromGAC": | ||
1328 | if (YesNoType.Yes == this.Core.GetAttributeYesNoValue(sourceLineNumbers, attrib)) | ||
1329 | { | ||
1330 | attributes |= (int)CpiAssemblyAttributes.DllPathFromGAC; | ||
1331 | } | ||
1332 | else | ||
1333 | { | ||
1334 | attributes &= ~(int)CpiAssemblyAttributes.DllPathFromGAC; | ||
1335 | } | ||
1336 | break; | ||
1337 | case "RegisterInCommit": | ||
1338 | if (YesNoType.Yes == this.Core.GetAttributeYesNoValue(sourceLineNumbers, attrib)) | ||
1339 | { | ||
1340 | attributes |= (int)CpiAssemblyAttributes.RegisterInCommit; | ||
1341 | } | ||
1342 | else | ||
1343 | { | ||
1344 | attributes &= ~(int)CpiAssemblyAttributes.RegisterInCommit; | ||
1345 | } | ||
1346 | break; | ||
1347 | default: | ||
1348 | this.Core.UnexpectedAttribute(node, attrib); | ||
1349 | break; | ||
1350 | } | ||
1351 | } | ||
1352 | else | ||
1353 | { | ||
1354 | this.Core.ParseExtensionAttribute(node, attrib); | ||
1355 | } | ||
1356 | } | ||
1357 | |||
1358 | if (null == applicationKey && 0 == (attributes & (int)CpiAssemblyAttributes.DotNetAssembly)) | ||
1359 | { | ||
1360 | this.Core.OnMessage(WixErrors.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Application", "Type", "native")); | ||
1361 | } | ||
1362 | if (null != assemblyName && 0 == (attributes & (int)CpiAssemblyAttributes.DllPathFromGAC)) | ||
1363 | { | ||
1364 | this.Core.OnMessage(ComPlusErrors.UnexpectedAttributeWithoutOtherValue(sourceLineNumbers, node.Name.LocalName, "AssemblyName", "DllPathFromGAC", "no")); | ||
1365 | } | ||
1366 | if (null == tlbPath && 0 != (attributes & (int)CpiAssemblyAttributes.DotNetAssembly)) | ||
1367 | { | ||
1368 | this.Core.OnMessage(WixErrors.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "TlbPath", "Type", ".net")); | ||
1369 | } | ||
1370 | if (null != psDllPath && 0 != (attributes & (int)CpiAssemblyAttributes.DotNetAssembly)) | ||
1371 | { | ||
1372 | this.Core.OnMessage(ComPlusErrors.UnexpectedAttributeWithOtherValue(sourceLineNumbers, node.Name.LocalName, "PSDllPath", "Type", ".net")); | ||
1373 | } | ||
1374 | if (0 != (attributes & (int)CpiAssemblyAttributes.EventClass) && 0 != (attributes & (int)CpiAssemblyAttributes.DotNetAssembly)) | ||
1375 | { | ||
1376 | this.Core.OnMessage(ComPlusErrors.UnexpectedAttributeWithOtherValue(sourceLineNumbers, node.Name.LocalName, "EventClass", "yes", "Type", ".net")); | ||
1377 | } | ||
1378 | |||
1379 | foreach (XElement child in node.Elements()) | ||
1380 | { | ||
1381 | if (this.Namespace == child.Name.Namespace) | ||
1382 | { | ||
1383 | switch (child.Name.LocalName) | ||
1384 | { | ||
1385 | case "ComPlusAssemblyDependency": | ||
1386 | this.ParseComPlusAssemblyDependencyElement(child, key); | ||
1387 | break; | ||
1388 | case "ComPlusComponent": | ||
1389 | this.ParseComPlusComponentElement(child, componentKey, key); | ||
1390 | hasComponents = true; | ||
1391 | break; | ||
1392 | default: | ||
1393 | this.Core.UnexpectedElement(node, child); | ||
1394 | break; | ||
1395 | } | ||
1396 | } | ||
1397 | else | ||
1398 | { | ||
1399 | this.Core.ParseExtensionElement(node, child); | ||
1400 | } | ||
1401 | } | ||
1402 | |||
1403 | if (0 == (attributes & (int)CpiAssemblyAttributes.DotNetAssembly) && !hasComponents) | ||
1404 | { | ||
1405 | this.Core.OnMessage(ComPlusWarnings.MissingComponents(sourceLineNumbers)); | ||
1406 | } | ||
1407 | |||
1408 | Row row = this.Core.CreateRow(sourceLineNumbers, "ComPlusAssembly"); | ||
1409 | row[0] = key; | ||
1410 | row[1] = applicationKey; | ||
1411 | row[2] = componentKey; | ||
1412 | row[3] = assemblyName; | ||
1413 | row[4] = dllPath; | ||
1414 | row[5] = tlbPath; | ||
1415 | row[6] = psDllPath; | ||
1416 | row[7] = attributes; | ||
1417 | |||
1418 | if (win64) | ||
1419 | { | ||
1420 | if (this.Core.CurrentPlatform == Platform.IA64) | ||
1421 | { | ||
1422 | this.Core.OnMessage(WixErrors.UnsupportedPlatformForElement(sourceLineNumbers, "ia64", node.Name.LocalName)); | ||
1423 | } | ||
1424 | else | ||
1425 | { | ||
1426 | this.Core.CreateSimpleReference(sourceLineNumbers, "CustomAction", "ConfigureComPlusInstall_x64"); | ||
1427 | this.Core.CreateSimpleReference(sourceLineNumbers, "CustomAction", "ConfigureComPlusUninstall_x64"); | ||
1428 | } | ||
1429 | } | ||
1430 | else | ||
1431 | { | ||
1432 | this.Core.CreateSimpleReference(sourceLineNumbers, "CustomAction", "ConfigureComPlusInstall"); | ||
1433 | this.Core.CreateSimpleReference(sourceLineNumbers, "CustomAction", "ConfigureComPlusUninstall"); | ||
1434 | } | ||
1435 | } | ||
1436 | |||
1437 | /// <summary> | ||
1438 | /// Parses a COM+ assembly dependency element. | ||
1439 | /// </summary> | ||
1440 | /// <param name="node">Element to parse.</param> | ||
1441 | /// <param name="assemblyKey">Identifier of parent assembly.</param> | ||
1442 | private void ParseComPlusAssemblyDependencyElement(XElement node, string assemblyKey) | ||
1443 | { | ||
1444 | SourceLineNumber sourceLineNumbers = Preprocessor.GetSourceLineNumbers(node); | ||
1445 | |||
1446 | string requiredAssemblyKey = null; | ||
1447 | |||
1448 | foreach (XAttribute attrib in node.Attributes()) | ||
1449 | { | ||
1450 | if (String.IsNullOrEmpty(attrib.Name.NamespaceName) || this.Namespace == attrib.Name.Namespace) | ||
1451 | { | ||
1452 | switch (attrib.Name.LocalName) | ||
1453 | { | ||
1454 | case "RequiredAssembly": | ||
1455 | requiredAssemblyKey = this.Core.GetAttributeValue(sourceLineNumbers, attrib); | ||
1456 | break; | ||
1457 | default: | ||
1458 | this.Core.UnexpectedAttribute(node, attrib); | ||
1459 | break; | ||
1460 | } | ||
1461 | } | ||
1462 | else | ||
1463 | { | ||
1464 | this.Core.ParseExtensionAttribute(node, attrib); | ||
1465 | } | ||
1466 | } | ||
1467 | |||
1468 | Row row = this.Core.CreateRow(sourceLineNumbers, "ComPlusAssemblyDependency"); | ||
1469 | row[0] = assemblyKey; | ||
1470 | row[1] = requiredAssemblyKey; | ||
1471 | } | ||
1472 | |||
1473 | /// <summary> | ||
1474 | /// Parses a COM+ component element. | ||
1475 | /// </summary> | ||
1476 | /// <param name="node">Element to parse.</param> | ||
1477 | /// <param name="componentKey">Identifier of parent component.</param> | ||
1478 | /// <param name="assemblyKey">Identifier of parent assembly.</param> | ||
1479 | private void ParseComPlusComponentElement(XElement node, string componentKey, string assemblyKey) | ||
1480 | { | ||
1481 | SourceLineNumber sourceLineNumbers = Preprocessor.GetSourceLineNumbers(node); | ||
1482 | |||
1483 | string key = null; | ||
1484 | string clsid = null; | ||
1485 | |||
1486 | Hashtable properties = new Hashtable(); | ||
1487 | |||
1488 | foreach (XAttribute attrib in node.Attributes()) | ||
1489 | { | ||
1490 | if (String.IsNullOrEmpty(attrib.Name.NamespaceName) || this.Namespace == attrib.Name.Namespace) | ||
1491 | { | ||
1492 | switch (attrib.Name.LocalName) | ||
1493 | { | ||
1494 | case "Id": | ||
1495 | key = this.Core.GetAttributeIdentifierValue(sourceLineNumbers, attrib); | ||
1496 | break; | ||
1497 | case "CLSID": | ||
1498 | clsid = "{" + this.Core.GetAttributeValue(sourceLineNumbers, attrib) + "}"; | ||
1499 | break; | ||
1500 | case "AllowInprocSubscribers": | ||
1501 | properties["AllowInprocSubscribers"] = YesNoType.Yes == this.Core.GetAttributeYesNoValue(sourceLineNumbers, attrib) ? "1" : "0"; | ||
1502 | break; | ||
1503 | case "ComponentAccessChecksEnabled": | ||
1504 | properties["ComponentAccessChecksEnabled"] = YesNoType.Yes == this.Core.GetAttributeYesNoValue(sourceLineNumbers, attrib) ? "1" : "0"; | ||
1505 | break; | ||
1506 | case "ComponentTransactionTimeout": | ||
1507 | properties["ComponentTransactionTimeout"] = this.Core.GetAttributeIntegerValue(sourceLineNumbers, attrib, 0, 3600).ToString(); | ||
1508 | break; | ||
1509 | case "ComponentTransactionTimeoutEnabled": | ||
1510 | properties["ComponentTransactionTimeoutEnabled"] = YesNoType.Yes == this.Core.GetAttributeYesNoValue(sourceLineNumbers, attrib) ? "1" : "0"; | ||
1511 | break; | ||
1512 | case "COMTIIntrinsics": | ||
1513 | properties["COMTIIntrinsics"] = YesNoType.Yes == this.Core.GetAttributeYesNoValue(sourceLineNumbers, attrib) ? "1" : "0"; | ||
1514 | break; | ||
1515 | case "ConstructionEnabled": | ||
1516 | properties["ConstructionEnabled"] = YesNoType.Yes == this.Core.GetAttributeYesNoValue(sourceLineNumbers, attrib) ? "1" : "0"; | ||
1517 | break; | ||
1518 | case "ConstructorString": | ||
1519 | properties["ConstructorString"] = this.Core.GetAttributeValue(sourceLineNumbers, attrib); | ||
1520 | break; | ||
1521 | case "CreationTimeout": | ||
1522 | properties["CreationTimeout"] = this.Core.GetAttributeValue(sourceLineNumbers, attrib); | ||
1523 | break; | ||
1524 | case "Description": | ||
1525 | properties["Description"] = this.Core.GetAttributeValue(sourceLineNumbers, attrib); | ||
1526 | break; | ||
1527 | case "EventTrackingEnabled": | ||
1528 | properties["EventTrackingEnabled"] = YesNoType.Yes == this.Core.GetAttributeYesNoValue(sourceLineNumbers, attrib) ? "1" : "0"; | ||
1529 | break; | ||
1530 | case "ExceptionClass": | ||
1531 | properties["ExceptionClass"] = this.Core.GetAttributeValue(sourceLineNumbers, attrib); | ||
1532 | break; | ||
1533 | case "FireInParallel": | ||
1534 | properties["FireInParallel"] = YesNoType.Yes == this.Core.GetAttributeYesNoValue(sourceLineNumbers, attrib) ? "1" : "0"; | ||
1535 | break; | ||
1536 | case "IISIntrinsics": | ||
1537 | properties["IISIntrinsics"] = YesNoType.Yes == this.Core.GetAttributeYesNoValue(sourceLineNumbers, attrib) ? "1" : "0"; | ||
1538 | break; | ||
1539 | case "InitializesServerApplication": | ||
1540 | properties["InitializesServerApplication"] = YesNoType.Yes == this.Core.GetAttributeYesNoValue(sourceLineNumbers, attrib) ? "1" : "0"; | ||
1541 | break; | ||
1542 | case "IsEnabled": | ||
1543 | properties["IsEnabled"] = YesNoType.Yes == this.Core.GetAttributeYesNoValue(sourceLineNumbers, attrib) ? "1" : "0"; | ||
1544 | break; | ||
1545 | case "IsPrivateComponent": | ||
1546 | properties["IsPrivateComponent"] = YesNoType.Yes == this.Core.GetAttributeYesNoValue(sourceLineNumbers, attrib) ? "1" : "0"; | ||
1547 | break; | ||
1548 | case "JustInTimeActivation": | ||
1549 | properties["JustInTimeActivation"] = YesNoType.Yes == this.Core.GetAttributeYesNoValue(sourceLineNumbers, attrib) ? "1" : "0"; | ||
1550 | break; | ||
1551 | case "LoadBalancingSupported": | ||
1552 | properties["LoadBalancingSupported"] = YesNoType.Yes == this.Core.GetAttributeYesNoValue(sourceLineNumbers, attrib) ? "1" : "0"; | ||
1553 | break; | ||
1554 | case "MaxPoolSize": | ||
1555 | properties["MaxPoolSize"] = this.Core.GetAttributeValue(sourceLineNumbers, attrib); | ||
1556 | break; | ||
1557 | case "MinPoolSize": | ||
1558 | properties["MinPoolSize"] = this.Core.GetAttributeValue(sourceLineNumbers, attrib); | ||
1559 | break; | ||
1560 | case "MultiInterfacePublisherFilterCLSID": | ||
1561 | properties["MultiInterfacePublisherFilterCLSID"] = this.Core.GetAttributeValue(sourceLineNumbers, attrib); | ||
1562 | break; | ||
1563 | case "MustRunInClientContext": | ||
1564 | properties["MustRunInClientContext"] = YesNoType.Yes == this.Core.GetAttributeYesNoValue(sourceLineNumbers, attrib) ? "1" : "0"; | ||
1565 | break; | ||
1566 | case "MustRunInDefaultContext": | ||
1567 | properties["MustRunInDefaultContext"] = YesNoType.Yes == this.Core.GetAttributeYesNoValue(sourceLineNumbers, attrib) ? "1" : "0"; | ||
1568 | break; | ||
1569 | case "ObjectPoolingEnabled": | ||
1570 | properties["ObjectPoolingEnabled"] = YesNoType.Yes == this.Core.GetAttributeYesNoValue(sourceLineNumbers, attrib) ? "1" : "0"; | ||
1571 | break; | ||
1572 | case "PublisherID": | ||
1573 | properties["PublisherID"] = TryFormatGuidValue(this.Core.GetAttributeValue(sourceLineNumbers, attrib)); | ||
1574 | break; | ||
1575 | case "SoapAssemblyName": | ||
1576 | properties["SoapAssemblyName"] = this.Core.GetAttributeValue(sourceLineNumbers, attrib); | ||
1577 | break; | ||
1578 | case "SoapTypeName": | ||
1579 | properties["SoapTypeName"] = this.Core.GetAttributeValue(sourceLineNumbers, attrib); | ||
1580 | break; | ||
1581 | case "Synchronization": | ||
1582 | string synchronizationValue = this.Core.GetAttributeValue(sourceLineNumbers, attrib); | ||
1583 | switch (synchronizationValue) | ||
1584 | { | ||
1585 | case "ignored": | ||
1586 | properties["Synchronization"] = "0"; | ||
1587 | break; | ||
1588 | case "none": | ||
1589 | properties["Synchronization"] = "1"; | ||
1590 | break; | ||
1591 | case "supported": | ||
1592 | properties["Synchronization"] = "2"; | ||
1593 | break; | ||
1594 | case "required": | ||
1595 | properties["Synchronization"] = "3"; | ||
1596 | break; | ||
1597 | case "requiresNew": | ||
1598 | properties["Synchronization"] = "4"; | ||
1599 | break; | ||
1600 | default: | ||
1601 | this.Core.OnMessage(WixErrors.IllegalAttributeValue(sourceLineNumbers, "ComPlusComponent", "Synchronization", synchronizationValue, "ignored", "none", "supported", "required", "requiresNew")); | ||
1602 | break; | ||
1603 | } | ||
1604 | break; | ||
1605 | case "Transaction": | ||
1606 | string transactionValue = this.Core.GetAttributeValue(sourceLineNumbers, attrib); | ||
1607 | switch (transactionValue) | ||
1608 | { | ||
1609 | case "ignored": | ||
1610 | properties["Transaction"] = "0"; | ||
1611 | break; | ||
1612 | case "none": | ||
1613 | properties["Transaction"] = "1"; | ||
1614 | break; | ||
1615 | case "supported": | ||
1616 | properties["Transaction"] = "2"; | ||
1617 | break; | ||
1618 | case "required": | ||
1619 | properties["Transaction"] = "3"; | ||
1620 | break; | ||
1621 | case "requiresNew": | ||
1622 | properties["Transaction"] = "4"; | ||
1623 | break; | ||
1624 | default: | ||
1625 | this.Core.OnMessage(WixErrors.IllegalAttributeValue(sourceLineNumbers, "ComPlusComponent", "Transaction", transactionValue, "ignored", "none", "supported", "required", "requiresNew")); | ||
1626 | break; | ||
1627 | } | ||
1628 | break; | ||
1629 | case "TxIsolationLevel": | ||
1630 | string txIsolationLevelValue = this.Core.GetAttributeValue(sourceLineNumbers, attrib); | ||
1631 | switch (txIsolationLevelValue) | ||
1632 | { | ||
1633 | case "any": | ||
1634 | properties["TxIsolationLevel"] = "0"; | ||
1635 | break; | ||
1636 | case "readUnCommitted": | ||
1637 | properties["TxIsolationLevel"] = "1"; | ||
1638 | break; | ||
1639 | case "readCommitted": | ||
1640 | properties["TxIsolationLevel"] = "2"; | ||
1641 | break; | ||
1642 | case "repeatableRead": | ||
1643 | properties["TxIsolationLevel"] = "3"; | ||
1644 | break; | ||
1645 | case "serializable": | ||
1646 | properties["TxIsolationLevel"] = "4"; | ||
1647 | break; | ||
1648 | default: | ||
1649 | this.Core.OnMessage(WixErrors.IllegalAttributeValue(sourceLineNumbers, "ComPlusComponent", "TxIsolationLevel", txIsolationLevelValue, "any", "readUnCommitted", "readCommitted", "repeatableRead", "serializable")); | ||
1650 | break; | ||
1651 | } | ||
1652 | break; | ||
1653 | default: | ||
1654 | this.Core.UnexpectedAttribute(node, attrib); | ||
1655 | break; | ||
1656 | } | ||
1657 | } | ||
1658 | else | ||
1659 | { | ||
1660 | this.Core.ParseExtensionAttribute(node, attrib); | ||
1661 | } | ||
1662 | } | ||
1663 | |||
1664 | foreach (XElement child in node.Elements()) | ||
1665 | { | ||
1666 | if (this.Namespace == child.Name.Namespace) | ||
1667 | { | ||
1668 | switch (child.Name.LocalName) | ||
1669 | { | ||
1670 | case "ComPlusRoleForComponent": | ||
1671 | this.ParseComPlusRoleForComponentElement(child, componentKey, key); | ||
1672 | break; | ||
1673 | case "ComPlusInterface": | ||
1674 | this.ParseComPlusInterfaceElement(child, componentKey, key); | ||
1675 | break; | ||
1676 | case "ComPlusSubscription": | ||
1677 | this.ParseComPlusSubscriptionElement(child, componentKey, key); | ||
1678 | break; | ||
1679 | default: | ||
1680 | this.Core.UnexpectedElement(node, child); | ||
1681 | break; | ||
1682 | } | ||
1683 | } | ||
1684 | else | ||
1685 | { | ||
1686 | this.Core.ParseExtensionElement(node, child); | ||
1687 | } | ||
1688 | } | ||
1689 | |||
1690 | Row row = this.Core.CreateRow(sourceLineNumbers, "ComPlusComponent"); | ||
1691 | row[0] = key; | ||
1692 | row[1] = assemblyKey; | ||
1693 | row[2] = clsid; | ||
1694 | |||
1695 | IDictionaryEnumerator propertiesEnumerator = properties.GetEnumerator(); | ||
1696 | while (propertiesEnumerator.MoveNext()) | ||
1697 | { | ||
1698 | Row propertyRow = this.Core.CreateRow(sourceLineNumbers, "ComPlusComponentProperty"); | ||
1699 | propertyRow[0] = key; | ||
1700 | propertyRow[1] = (string)propertiesEnumerator.Key; | ||
1701 | propertyRow[2] = (string)propertiesEnumerator.Value; | ||
1702 | } | ||
1703 | } | ||
1704 | |||
1705 | /// <summary> | ||
1706 | /// Parses a COM+ application role for component element. | ||
1707 | /// </summary> | ||
1708 | /// <param name="node">Element to parse.</param> | ||
1709 | /// <param name="componentKey">Identifier of parent component.</param> | ||
1710 | /// <param name="cpcomponentKey">Identifier of parent COM+ component.</param> | ||
1711 | private void ParseComPlusRoleForComponentElement(XElement node, string componentKey, string cpcomponentKey) | ||
1712 | { | ||
1713 | SourceLineNumber sourceLineNumbers = Preprocessor.GetSourceLineNumbers(node); | ||
1714 | |||
1715 | string key = null; | ||
1716 | string applicationRoleKey = null; | ||
1717 | |||
1718 | foreach (XAttribute attrib in node.Attributes()) | ||
1719 | { | ||
1720 | if (String.IsNullOrEmpty(attrib.Name.NamespaceName) || this.Namespace == attrib.Name.Namespace) | ||
1721 | { | ||
1722 | switch (attrib.Name.LocalName) | ||
1723 | { | ||
1724 | case "Id": | ||
1725 | key = this.Core.GetAttributeIdentifierValue(sourceLineNumbers, attrib); | ||
1726 | break; | ||
1727 | case "Component": | ||
1728 | if (null != cpcomponentKey) | ||
1729 | { | ||
1730 | this.Core.OnMessage(WixErrors.IllegalAttributeWhenNested(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName, node.Parent.Name.LocalName)); | ||
1731 | } | ||
1732 | cpcomponentKey = this.Core.GetAttributeValue(sourceLineNumbers, attrib); | ||
1733 | this.Core.CreateSimpleReference(sourceLineNumbers, "ComPlusComponent", cpcomponentKey); | ||
1734 | break; | ||
1735 | case "ApplicationRole": | ||
1736 | applicationRoleKey = this.Core.GetAttributeValue(sourceLineNumbers, attrib); | ||
1737 | break; | ||
1738 | default: | ||
1739 | this.Core.UnexpectedAttribute(node, attrib); | ||
1740 | break; | ||
1741 | } | ||
1742 | } | ||
1743 | else | ||
1744 | { | ||
1745 | this.Core.ParseExtensionAttribute(node, attrib); | ||
1746 | } | ||
1747 | } | ||
1748 | |||
1749 | if (null == cpcomponentKey) | ||
1750 | { | ||
1751 | this.Core.OnMessage(WixErrors.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Component")); | ||
1752 | } | ||
1753 | |||
1754 | Row row = this.Core.CreateRow(sourceLineNumbers, "ComPlusRoleForComponent"); | ||
1755 | row[0] = key; | ||
1756 | row[1] = cpcomponentKey; | ||
1757 | row[2] = applicationRoleKey; | ||
1758 | row[3] = componentKey; | ||
1759 | } | ||
1760 | |||
1761 | /// <summary> | ||
1762 | /// Parses a COM+ interface element. | ||
1763 | /// </summary> | ||
1764 | /// <param name="node">Element to parse.</param> | ||
1765 | /// <param name="componentKey">Identifier of parent component.</param> | ||
1766 | /// <param name="cpcomponentKey">Identifier of parent COM+ component.</param> | ||
1767 | private void ParseComPlusInterfaceElement(XElement node, string componentKey, string cpcomponentKey) | ||
1768 | { | ||
1769 | SourceLineNumber sourceLineNumbers = Preprocessor.GetSourceLineNumbers(node); | ||
1770 | |||
1771 | // parse attributes | ||
1772 | string key = null; | ||
1773 | string iid = null; | ||
1774 | |||
1775 | Hashtable properties = new Hashtable(); | ||
1776 | |||
1777 | foreach (XAttribute attrib in node.Attributes()) | ||
1778 | { | ||
1779 | if (String.IsNullOrEmpty(attrib.Name.NamespaceName) || this.Namespace == attrib.Name.Namespace) | ||
1780 | { | ||
1781 | switch (attrib.Name.LocalName) | ||
1782 | { | ||
1783 | case "Id": | ||
1784 | key = this.Core.GetAttributeIdentifierValue(sourceLineNumbers, attrib); | ||
1785 | break; | ||
1786 | case "IID": | ||
1787 | iid = "{" + this.Core.GetAttributeValue(sourceLineNumbers, attrib) + "}"; | ||
1788 | break; | ||
1789 | case "Description": | ||
1790 | properties["Description"] = this.Core.GetAttributeValue(sourceLineNumbers, attrib); | ||
1791 | break; | ||
1792 | case "QueuingEnabled": | ||
1793 | properties["QueuingEnabled"] = YesNoType.Yes == this.Core.GetAttributeYesNoValue(sourceLineNumbers, attrib) ? "1" : "0"; | ||
1794 | break; | ||
1795 | default: | ||
1796 | this.Core.UnexpectedAttribute(node, attrib); | ||
1797 | break; | ||
1798 | } | ||
1799 | } | ||
1800 | else | ||
1801 | { | ||
1802 | this.Core.ParseExtensionAttribute(node, attrib); | ||
1803 | } | ||
1804 | } | ||
1805 | |||
1806 | foreach (XElement child in node.Elements()) | ||
1807 | { | ||
1808 | if (this.Namespace == child.Name.Namespace) | ||
1809 | { | ||
1810 | switch (child.Name.LocalName) | ||
1811 | { | ||
1812 | case "ComPlusRoleForInterface": | ||
1813 | this.ParseComPlusRoleForInterfaceElement(child, componentKey, key); | ||
1814 | break; | ||
1815 | case "ComPlusMethod": | ||
1816 | this.ParseComPlusMethodElement(child, componentKey, key); | ||
1817 | break; | ||
1818 | default: | ||
1819 | this.Core.UnexpectedElement(node, child); | ||
1820 | break; | ||
1821 | } | ||
1822 | } | ||
1823 | else | ||
1824 | { | ||
1825 | this.Core.ParseExtensionElement(node, child); | ||
1826 | } | ||
1827 | } | ||
1828 | |||
1829 | Row row = this.Core.CreateRow(sourceLineNumbers, "ComPlusInterface"); | ||
1830 | row[0] = key; | ||
1831 | row[1] = cpcomponentKey; | ||
1832 | row[2] = iid; | ||
1833 | |||
1834 | IDictionaryEnumerator propertiesEnumerator = properties.GetEnumerator(); | ||
1835 | while (propertiesEnumerator.MoveNext()) | ||
1836 | { | ||
1837 | Row propertyRow = this.Core.CreateRow(sourceLineNumbers, "ComPlusInterfaceProperty"); | ||
1838 | propertyRow[0] = key; | ||
1839 | propertyRow[1] = (string)propertiesEnumerator.Key; | ||
1840 | propertyRow[2] = (string)propertiesEnumerator.Value; | ||
1841 | } | ||
1842 | } | ||
1843 | |||
1844 | /// <summary> | ||
1845 | /// Parses a COM+ application role for interface element. | ||
1846 | /// </summary> | ||
1847 | /// <param name="node">Element to parse.</param> | ||
1848 | /// <param name="componentKey">Identifier of parent component.</param> | ||
1849 | /// <param name="interfaceKey">Identifier of parent interface.</param> | ||
1850 | private void ParseComPlusRoleForInterfaceElement(XElement node, string componentKey, string interfaceKey) | ||
1851 | { | ||
1852 | SourceLineNumber sourceLineNumbers = Preprocessor.GetSourceLineNumbers(node); | ||
1853 | |||
1854 | string key = null; | ||
1855 | string applicationRoleKey = null; | ||
1856 | |||
1857 | foreach (XAttribute attrib in node.Attributes()) | ||
1858 | { | ||
1859 | if (String.IsNullOrEmpty(attrib.Name.NamespaceName) || this.Namespace == attrib.Name.Namespace) | ||
1860 | { | ||
1861 | switch (attrib.Name.LocalName) | ||
1862 | { | ||
1863 | case "Id": | ||
1864 | key = this.Core.GetAttributeIdentifierValue(sourceLineNumbers, attrib); | ||
1865 | break; | ||
1866 | case "Interface": | ||
1867 | if (null != interfaceKey) | ||
1868 | { | ||
1869 | this.Core.OnMessage(WixErrors.IllegalAttributeWhenNested(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName, node.Parent.Name.LocalName)); | ||
1870 | } | ||
1871 | interfaceKey = this.Core.GetAttributeValue(sourceLineNumbers, attrib); | ||
1872 | this.Core.CreateSimpleReference(sourceLineNumbers, "ComPlusInterface", interfaceKey); | ||
1873 | break; | ||
1874 | case "ApplicationRole": | ||
1875 | applicationRoleKey = this.Core.GetAttributeValue(sourceLineNumbers, attrib); | ||
1876 | break; | ||
1877 | default: | ||
1878 | this.Core.UnexpectedAttribute(node, attrib); | ||
1879 | break; | ||
1880 | } | ||
1881 | } | ||
1882 | else | ||
1883 | { | ||
1884 | this.Core.ParseExtensionAttribute(node, attrib); | ||
1885 | } | ||
1886 | } | ||
1887 | |||
1888 | if (null == interfaceKey) | ||
1889 | { | ||
1890 | this.Core.OnMessage(WixErrors.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Interface")); | ||
1891 | } | ||
1892 | |||
1893 | Row row = this.Core.CreateRow(sourceLineNumbers, "ComPlusRoleForInterface"); | ||
1894 | row[0] = key; | ||
1895 | row[1] = interfaceKey; | ||
1896 | row[2] = applicationRoleKey; | ||
1897 | row[3] = componentKey; | ||
1898 | } | ||
1899 | |||
1900 | /// <summary> | ||
1901 | /// Parses a COM+ method element. | ||
1902 | /// </summary> | ||
1903 | /// <param name="node">Element to parse.</param> | ||
1904 | /// <param name="componentKey">Identifier of parent component.</param> | ||
1905 | /// <param name="interfaceKey">Identifier of parent interface.</param> | ||
1906 | private void ParseComPlusMethodElement(XElement node, string componentKey, string interfaceKey) | ||
1907 | { | ||
1908 | SourceLineNumber sourceLineNumbers = Preprocessor.GetSourceLineNumbers(node); | ||
1909 | |||
1910 | string key = null; | ||
1911 | int index = CompilerConstants.IntegerNotSet; | ||
1912 | string name = null; | ||
1913 | |||
1914 | Hashtable properties = new Hashtable(); | ||
1915 | |||
1916 | foreach (XAttribute attrib in node.Attributes()) | ||
1917 | { | ||
1918 | if (String.IsNullOrEmpty(attrib.Name.NamespaceName) || this.Namespace == attrib.Name.Namespace) | ||
1919 | { | ||
1920 | switch (attrib.Name.LocalName) | ||
1921 | { | ||
1922 | case "Id": | ||
1923 | key = this.Core.GetAttributeIdentifierValue(sourceLineNumbers, attrib); | ||
1924 | break; | ||
1925 | case "Index": | ||
1926 | index = this.Core.GetAttributeIntegerValue(sourceLineNumbers, attrib, 0, int.MaxValue); | ||
1927 | break; | ||
1928 | case "Name": | ||
1929 | name = this.Core.GetAttributeValue(sourceLineNumbers, attrib); | ||
1930 | break; | ||
1931 | case "AutoComplete": | ||
1932 | properties["AutoComplete"] = YesNoType.Yes == this.Core.GetAttributeYesNoValue(sourceLineNumbers, attrib) ? "1" : "0"; | ||
1933 | break; | ||
1934 | case "Description": | ||
1935 | properties["Description"] = this.Core.GetAttributeValue(sourceLineNumbers, attrib); | ||
1936 | break; | ||
1937 | default: | ||
1938 | this.Core.UnexpectedAttribute(node, attrib); | ||
1939 | break; | ||
1940 | } | ||
1941 | } | ||
1942 | else | ||
1943 | { | ||
1944 | this.Core.ParseExtensionAttribute(node, attrib); | ||
1945 | } | ||
1946 | } | ||
1947 | |||
1948 | foreach (XElement child in node.Elements()) | ||
1949 | { | ||
1950 | if (this.Namespace == child.Name.Namespace) | ||
1951 | { | ||
1952 | switch (child.Name.LocalName) | ||
1953 | { | ||
1954 | case "ComPlusRoleForMethod": | ||
1955 | this.ParseComPlusRoleForMethodElement(child, componentKey, key); | ||
1956 | break; | ||
1957 | default: | ||
1958 | this.Core.UnexpectedElement(node, child); | ||
1959 | break; | ||
1960 | } | ||
1961 | } | ||
1962 | else | ||
1963 | { | ||
1964 | this.Core.ParseExtensionElement(node, child); | ||
1965 | } | ||
1966 | } | ||
1967 | |||
1968 | if (CompilerConstants.IntegerNotSet == index && null == name) | ||
1969 | { | ||
1970 | this.Core.OnMessage(ComPlusErrors.RequiredAttribute(sourceLineNumbers, node.Name.LocalName, "Index", "Name")); | ||
1971 | } | ||
1972 | |||
1973 | Row row = this.Core.CreateRow(sourceLineNumbers, "ComPlusMethod"); | ||
1974 | row[0] = key; | ||
1975 | row[1] = interfaceKey; | ||
1976 | if (CompilerConstants.IntegerNotSet != index) | ||
1977 | { | ||
1978 | row[2] = index; | ||
1979 | } | ||
1980 | row[3] = name; | ||
1981 | |||
1982 | IDictionaryEnumerator propertiesEnumerator = properties.GetEnumerator(); | ||
1983 | while (propertiesEnumerator.MoveNext()) | ||
1984 | { | ||
1985 | Row propertyRow = this.Core.CreateRow(sourceLineNumbers, "ComPlusMethodProperty"); | ||
1986 | propertyRow[0] = key; | ||
1987 | propertyRow[1] = (string)propertiesEnumerator.Key; | ||
1988 | propertyRow[2] = (string)propertiesEnumerator.Value; | ||
1989 | } | ||
1990 | } | ||
1991 | |||
1992 | /// <summary> | ||
1993 | /// Parses a COM+ application role for method element. | ||
1994 | /// </summary> | ||
1995 | /// <param name="node">Element to parse.</param> | ||
1996 | /// <param name="componentKey">Identifier of parent component.</param> | ||
1997 | /// <param name="methodKey">Identifier of parent method.</param> | ||
1998 | private void ParseComPlusRoleForMethodElement(XElement node, string componentKey, string methodKey) | ||
1999 | { | ||
2000 | SourceLineNumber sourceLineNumbers = Preprocessor.GetSourceLineNumbers(node); | ||
2001 | |||
2002 | string key = null; | ||
2003 | string applicationRoleKey = null; | ||
2004 | |||
2005 | foreach (XAttribute attrib in node.Attributes()) | ||
2006 | { | ||
2007 | if (String.IsNullOrEmpty(attrib.Name.NamespaceName) || this.Namespace == attrib.Name.Namespace) | ||
2008 | { | ||
2009 | switch (attrib.Name.LocalName) | ||
2010 | { | ||
2011 | case "Id": | ||
2012 | key = this.Core.GetAttributeIdentifierValue(sourceLineNumbers, attrib); | ||
2013 | break; | ||
2014 | case "Method": | ||
2015 | if (null != methodKey) | ||
2016 | { | ||
2017 | this.Core.OnMessage(WixErrors.IllegalAttributeWhenNested(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName, node.Parent.Name.LocalName)); | ||
2018 | } | ||
2019 | methodKey = this.Core.GetAttributeValue(sourceLineNumbers, attrib); | ||
2020 | this.Core.CreateSimpleReference(sourceLineNumbers, "ComPlusMethod", methodKey); | ||
2021 | break; | ||
2022 | case "ApplicationRole": | ||
2023 | applicationRoleKey = this.Core.GetAttributeValue(sourceLineNumbers, attrib); | ||
2024 | break; | ||
2025 | default: | ||
2026 | this.Core.UnexpectedAttribute(node, attrib); | ||
2027 | break; | ||
2028 | } | ||
2029 | } | ||
2030 | else | ||
2031 | { | ||
2032 | this.Core.ParseExtensionAttribute(node, attrib); | ||
2033 | } | ||
2034 | } | ||
2035 | |||
2036 | if (null == methodKey) | ||
2037 | { | ||
2038 | this.Core.OnMessage(WixErrors.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Method")); | ||
2039 | } | ||
2040 | |||
2041 | Row row = this.Core.CreateRow(sourceLineNumbers, "ComPlusRoleForMethod"); | ||
2042 | row[0] = key; | ||
2043 | row[1] = methodKey; | ||
2044 | row[2] = applicationRoleKey; | ||
2045 | row[3] = componentKey; | ||
2046 | } | ||
2047 | |||
2048 | /// <summary> | ||
2049 | /// Parses a COM+ event subscription element. | ||
2050 | /// </summary> | ||
2051 | /// <param name="node">Element to parse.</param> | ||
2052 | /// <param name="componentKey">Identifier of parent component.</param> | ||
2053 | /// <param name="cpcomponentKey">Identifier of parent COM+ component.</param> | ||
2054 | private void ParseComPlusSubscriptionElement(XElement node, string componentKey, string cpcomponentKey) | ||
2055 | { | ||
2056 | SourceLineNumber sourceLineNumbers = Preprocessor.GetSourceLineNumbers(node); | ||
2057 | |||
2058 | string key = null; | ||
2059 | string id = null; | ||
2060 | string name = null; | ||
2061 | string eventCLSID = null; | ||
2062 | string publisherID = null; | ||
2063 | |||
2064 | Hashtable properties = new Hashtable(); | ||
2065 | |||
2066 | foreach (XAttribute attrib in node.Attributes()) | ||
2067 | { | ||
2068 | if (String.IsNullOrEmpty(attrib.Name.NamespaceName) || this.Namespace == attrib.Name.Namespace) | ||
2069 | { | ||
2070 | switch (attrib.Name.LocalName) | ||
2071 | { | ||
2072 | case "Id": | ||
2073 | key = this.Core.GetAttributeIdentifierValue(sourceLineNumbers, attrib); | ||
2074 | break; | ||
2075 | case "Component": | ||
2076 | if (null != cpcomponentKey) | ||
2077 | { | ||
2078 | this.Core.OnMessage(WixErrors.IllegalAttributeWhenNested(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName, node.Parent.Name.LocalName)); | ||
2079 | } | ||
2080 | cpcomponentKey = this.Core.GetAttributeValue(sourceLineNumbers, attrib); | ||
2081 | this.Core.CreateSimpleReference(sourceLineNumbers, "ComPlusComponent", cpcomponentKey); | ||
2082 | break; | ||
2083 | case "SubscriptionId": | ||
2084 | id = TryFormatGuidValue(this.Core.GetAttributeValue(sourceLineNumbers, attrib)); | ||
2085 | break; | ||
2086 | case "Name": | ||
2087 | name = this.Core.GetAttributeValue(sourceLineNumbers, attrib); | ||
2088 | break; | ||
2089 | case "EventCLSID": | ||
2090 | eventCLSID = this.Core.GetAttributeValue(sourceLineNumbers, attrib); | ||
2091 | break; | ||
2092 | case "PublisherID": | ||
2093 | publisherID = TryFormatGuidValue(this.Core.GetAttributeValue(sourceLineNumbers, attrib)); | ||
2094 | break; | ||
2095 | case "Description": | ||
2096 | properties["Description"] = this.Core.GetAttributeValue(sourceLineNumbers, attrib); | ||
2097 | break; | ||
2098 | case "Enabled": | ||
2099 | properties["Enabled"] = YesNoType.Yes == this.Core.GetAttributeYesNoValue(sourceLineNumbers, attrib) ? "1" : "0"; | ||
2100 | break; | ||
2101 | case "EventClassPartitionID": | ||
2102 | properties["EventClassPartitionID"] = this.Core.GetAttributeValue(sourceLineNumbers, attrib); | ||
2103 | break; | ||
2104 | case "FilterCriteria": | ||
2105 | properties["FilterCriteria"] = this.Core.GetAttributeValue(sourceLineNumbers, attrib); | ||
2106 | break; | ||
2107 | case "InterfaceID": | ||
2108 | properties["InterfaceID"] = this.Core.GetAttributeValue(sourceLineNumbers, attrib); | ||
2109 | break; | ||
2110 | case "MachineName": | ||
2111 | properties["MachineName"] = this.Core.GetAttributeValue(sourceLineNumbers, attrib); | ||
2112 | break; | ||
2113 | case "MethodName": | ||
2114 | properties["MethodName"] = this.Core.GetAttributeValue(sourceLineNumbers, attrib); | ||
2115 | break; | ||
2116 | case "PerUser": | ||
2117 | properties["PerUser"] = YesNoType.Yes == this.Core.GetAttributeYesNoValue(sourceLineNumbers, attrib) ? "1" : "0"; | ||
2118 | break; | ||
2119 | case "Queued": | ||
2120 | properties["Queued"] = YesNoType.Yes == this.Core.GetAttributeYesNoValue(sourceLineNumbers, attrib) ? "1" : "0"; | ||
2121 | break; | ||
2122 | case "SubscriberMoniker": | ||
2123 | properties["SubscriberMoniker"] = this.Core.GetAttributeValue(sourceLineNumbers, attrib); | ||
2124 | break; | ||
2125 | case "UserName": | ||
2126 | properties["UserName"] = this.Core.GetAttributeValue(sourceLineNumbers, attrib); | ||
2127 | break; | ||
2128 | default: | ||
2129 | this.Core.UnexpectedAttribute(node, attrib); | ||
2130 | break; | ||
2131 | } | ||
2132 | } | ||
2133 | else | ||
2134 | { | ||
2135 | this.Core.ParseExtensionAttribute(node, attrib); | ||
2136 | } | ||
2137 | } | ||
2138 | |||
2139 | if (null == cpcomponentKey) | ||
2140 | { | ||
2141 | this.Core.OnMessage(WixErrors.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Component")); | ||
2142 | } | ||
2143 | |||
2144 | this.Core.ParseForExtensionElements(node); | ||
2145 | |||
2146 | Row row = this.Core.CreateRow(sourceLineNumbers, "ComPlusSubscription"); | ||
2147 | row[0] = key; | ||
2148 | row[1] = cpcomponentKey; | ||
2149 | row[2] = componentKey; | ||
2150 | row[3] = id; | ||
2151 | row[4] = name; | ||
2152 | row[5] = eventCLSID; | ||
2153 | row[6] = publisherID; | ||
2154 | |||
2155 | IDictionaryEnumerator propertiesEnumerator = properties.GetEnumerator(); | ||
2156 | while (propertiesEnumerator.MoveNext()) | ||
2157 | { | ||
2158 | Row propertyRow = this.Core.CreateRow(sourceLineNumbers, "ComPlusSubscriptionProperty"); | ||
2159 | propertyRow[0] = key; | ||
2160 | propertyRow[1] = (string)propertiesEnumerator.Key; | ||
2161 | propertyRow[2] = (string)propertiesEnumerator.Value; | ||
2162 | } | ||
2163 | } | ||
2164 | |||
2165 | /// <summary> | ||
2166 | /// Attempts to parse the input value as a GUID, and in case the value is a valid | ||
2167 | /// GUID returnes it in the format "{XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX}". | ||
2168 | /// </summary> | ||
2169 | /// <param name="val"></param> | ||
2170 | /// <returns></returns> | ||
2171 | string TryFormatGuidValue(string val) | ||
2172 | { | ||
2173 | try | ||
2174 | { | ||
2175 | Guid guid = new Guid(val); | ||
2176 | return guid.ToString("B").ToUpper(); | ||
2177 | } | ||
2178 | catch (FormatException) | ||
2179 | { | ||
2180 | return val; | ||
2181 | } | ||
2182 | catch (OverflowException) | ||
2183 | { | ||
2184 | return val; | ||
2185 | } | ||
2186 | } | ||
2187 | } | ||
2188 | } | ||
diff --git a/src/wixext/ComPlusDecompiler.cs b/src/wixext/ComPlusDecompiler.cs new file mode 100644 index 00000000..27f1653e --- /dev/null +++ b/src/wixext/ComPlusDecompiler.cs | |||
@@ -0,0 +1,1843 @@ | |||
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 WixToolset.Extensions | ||
4 | { | ||
5 | using System; | ||
6 | using System.Collections; | ||
7 | using System.Globalization; | ||
8 | using WixToolset.Data; | ||
9 | using WixToolset.Extensibility; | ||
10 | using ComPlus = WixToolset.Extensions.Serialize.ComPlus; | ||
11 | using Wix = WixToolset.Data.Serialize; | ||
12 | |||
13 | /// <summary> | ||
14 | /// The decompiler for the WiX Toolset COM+ Extension. | ||
15 | /// </summary> | ||
16 | public sealed class ComPlusDecompiler : DecompilerExtension | ||
17 | { | ||
18 | /// <summary> | ||
19 | /// Creates a decompiler for ComPlus Extension. | ||
20 | /// </summary> | ||
21 | public ComPlusDecompiler() | ||
22 | { | ||
23 | this.TableDefinitions = ComPlusExtensionData.GetExtensionTableDefinitions(); | ||
24 | } | ||
25 | |||
26 | /// <summary> | ||
27 | /// Get the extensions library to be removed. | ||
28 | /// </summary> | ||
29 | /// <param name="tableDefinitions">Table definitions for library.</param> | ||
30 | /// <returns>Library to remove from decompiled output.</returns> | ||
31 | public override Library GetLibraryToRemove(TableDefinitionCollection tableDefinitions) | ||
32 | { | ||
33 | return ComPlusExtensionData.GetExtensionLibrary(tableDefinitions); | ||
34 | } | ||
35 | |||
36 | /// <summary> | ||
37 | /// Decompiles an extension table. | ||
38 | /// </summary> | ||
39 | /// <param name="table">The table to decompile.</param> | ||
40 | public override void DecompileTable(Table table) | ||
41 | { | ||
42 | switch (table.Name) | ||
43 | { | ||
44 | case "ComPlusPartition": | ||
45 | this.DecompileComPlusPartitionTable(table); | ||
46 | break; | ||
47 | case "ComPlusPartitionProperty": | ||
48 | this.DecompileComPlusPartitionPropertyTable(table); | ||
49 | break; | ||
50 | case "ComPlusPartitionRole": | ||
51 | this.DecompileComPlusPartitionRoleTable(table); | ||
52 | break; | ||
53 | case "ComPlusUserInPartitionRole": | ||
54 | this.DecompileComPlusUserInPartitionRoleTable(table); | ||
55 | break; | ||
56 | case "ComPlusGroupInPartitionRole": | ||
57 | this.DecompileComPlusGroupInPartitionRoleTable(table); | ||
58 | break; | ||
59 | case "ComPlusPartitionUser": | ||
60 | this.DecompileComPlusPartitionUserTable(table); | ||
61 | break; | ||
62 | case "ComPlusApplication": | ||
63 | this.DecompileComPlusApplicationTable(table); | ||
64 | break; | ||
65 | case "ComPlusApplicationProperty": | ||
66 | this.DecompileComPlusApplicationPropertyTable(table); | ||
67 | break; | ||
68 | case "ComPlusApplicationRole": | ||
69 | this.DecompileComPlusApplicationRoleTable(table); | ||
70 | break; | ||
71 | case "ComPlusApplicationRoleProperty": | ||
72 | this.DecompileComPlusApplicationRolePropertyTable(table); | ||
73 | break; | ||
74 | case "ComPlusUserInApplicationRole": | ||
75 | this.DecompileComPlusUserInApplicationRoleTable(table); | ||
76 | break; | ||
77 | case "ComPlusGroupInApplicationRole": | ||
78 | this.DecompileComPlusGroupInApplicationRoleTable(table); | ||
79 | break; | ||
80 | case "ComPlusAssembly": | ||
81 | this.DecompileComPlusAssemblyTable(table); | ||
82 | break; | ||
83 | case "ComPlusComponent": | ||
84 | this.DecompileComPlusComponentTable(table); | ||
85 | break; | ||
86 | case "ComPlusComponentProperty": | ||
87 | this.DecompileComPlusComponentPropertyTable(table); | ||
88 | break; | ||
89 | case "ComPlusRoleForComponent": | ||
90 | this.DecompileComPlusRoleForComponentTable(table); | ||
91 | break; | ||
92 | case "ComPlusInterface": | ||
93 | this.DecompileComPlusInterfaceTable(table); | ||
94 | break; | ||
95 | case "ComPlusInterfaceProperty": | ||
96 | this.DecompileComPlusInterfacePropertyTable(table); | ||
97 | break; | ||
98 | case "ComPlusRoleForInterface": | ||
99 | this.DecompileComPlusRoleForInterfaceTable(table); | ||
100 | break; | ||
101 | case "ComPlusMethod": | ||
102 | this.DecompileComPlusMethodTable(table); | ||
103 | break; | ||
104 | case "ComPlusMethodProperty": | ||
105 | this.DecompileComPlusMethodPropertyTable(table); | ||
106 | break; | ||
107 | case "ComPlusRoleForMethod": | ||
108 | this.DecompileComPlusRoleForMethodTable(table); | ||
109 | break; | ||
110 | case "ComPlusSubscription": | ||
111 | this.DecompileComPlusSubscriptionTable(table); | ||
112 | break; | ||
113 | case "ComPlusSubscriptionProperty": | ||
114 | this.DecompileComPlusSubscriptionPropertyTable(table); | ||
115 | break; | ||
116 | default: | ||
117 | base.DecompileTable(table); | ||
118 | break; | ||
119 | } | ||
120 | } | ||
121 | |||
122 | /// <summary> | ||
123 | /// Decompile the ComPlusPartition table. | ||
124 | /// </summary> | ||
125 | /// <param name="table">The table to decompile.</param> | ||
126 | private void DecompileComPlusPartitionTable(Table table) | ||
127 | { | ||
128 | foreach (Row row in table.Rows) | ||
129 | { | ||
130 | ComPlus.ComPlusPartition partition = new ComPlus.ComPlusPartition(); | ||
131 | |||
132 | partition.Id = (string)row[0]; | ||
133 | |||
134 | if (null != row[2]) | ||
135 | { | ||
136 | partition.PartitionId = (string)row[2]; | ||
137 | } | ||
138 | |||
139 | if (null != row[3]) | ||
140 | { | ||
141 | partition.Name = (string)row[3]; | ||
142 | } | ||
143 | |||
144 | if (null != row[1]) | ||
145 | { | ||
146 | Wix.Component component = (Wix.Component)this.Core.GetIndexedElement("Component", (string)row[1]); | ||
147 | if (null != component) | ||
148 | { | ||
149 | component.AddChild(partition); | ||
150 | } | ||
151 | else | ||
152 | { | ||
153 | this.Core.OnMessage(WixWarnings.ExpectedForeignRow(row.SourceLineNumbers, table.Name, row.GetPrimaryKey(DecompilerConstants.PrimaryKeyDelimiter), "Component_", (string)row[1], "Component")); | ||
154 | } | ||
155 | } | ||
156 | else | ||
157 | { | ||
158 | this.Core.RootElement.AddChild(partition); | ||
159 | } | ||
160 | this.Core.IndexElement(row, partition); | ||
161 | } | ||
162 | } | ||
163 | |||
164 | /// <summary> | ||
165 | /// Decompile the ComPlusPartitionProperty table. | ||
166 | /// </summary> | ||
167 | /// <param name="table">The table to decompile.</param> | ||
168 | private void DecompileComPlusPartitionPropertyTable(Table table) | ||
169 | { | ||
170 | foreach (Row row in table.Rows) | ||
171 | { | ||
172 | ComPlus.ComPlusPartition partition = (ComPlus.ComPlusPartition)this.Core.GetIndexedElement("ComPlusPartition", (string)row[0]); | ||
173 | if (null == partition) | ||
174 | { | ||
175 | this.Core.OnMessage(WixWarnings.ExpectedForeignRow(row.SourceLineNumbers, table.Name, row.GetPrimaryKey(DecompilerConstants.PrimaryKeyDelimiter), "Partition_", (string)row[0], "ComPlusPartition")); | ||
176 | } | ||
177 | |||
178 | switch ((string)row[1]) | ||
179 | { | ||
180 | case "Changeable": | ||
181 | switch ((string)row[2]) | ||
182 | { | ||
183 | case "1": | ||
184 | partition.Changeable = ComPlus.YesNoType.yes; | ||
185 | break; | ||
186 | case "0": | ||
187 | partition.Changeable = ComPlus.YesNoType.no; | ||
188 | break; | ||
189 | default: | ||
190 | // TODO: Warning | ||
191 | break; | ||
192 | } | ||
193 | break; | ||
194 | case "Deleteable": | ||
195 | switch ((string)row[2]) | ||
196 | { | ||
197 | case "1": | ||
198 | partition.Deleteable = ComPlus.YesNoType.yes; | ||
199 | break; | ||
200 | case "0": | ||
201 | partition.Deleteable = ComPlus.YesNoType.no; | ||
202 | break; | ||
203 | default: | ||
204 | // TODO: Warning | ||
205 | break; | ||
206 | } | ||
207 | break; | ||
208 | case "Description": | ||
209 | partition.Description = (string)row[2]; | ||
210 | break; | ||
211 | default: | ||
212 | // TODO: Warning | ||
213 | break; | ||
214 | } | ||
215 | } | ||
216 | } | ||
217 | |||
218 | /// <summary> | ||
219 | /// Decompile the ComPlusPartitionRole table. | ||
220 | /// </summary> | ||
221 | /// <param name="table">The table to decompile.</param> | ||
222 | private void DecompileComPlusPartitionRoleTable(Table table) | ||
223 | { | ||
224 | foreach (Row row in table.Rows) | ||
225 | { | ||
226 | ComPlus.ComPlusPartitionRole partitionRole = new ComPlus.ComPlusPartitionRole(); | ||
227 | |||
228 | partitionRole.Id = (string)row[0]; | ||
229 | partitionRole.Partition = (string)row[1]; | ||
230 | partitionRole.Name = (string)row[3]; | ||
231 | |||
232 | Wix.Component component = (Wix.Component)this.Core.GetIndexedElement("Component", (string)row[2]); | ||
233 | if (null != component) | ||
234 | { | ||
235 | component.AddChild(partitionRole); | ||
236 | } | ||
237 | else | ||
238 | { | ||
239 | this.Core.OnMessage(WixWarnings.ExpectedForeignRow(row.SourceLineNumbers, table.Name, row.GetPrimaryKey(DecompilerConstants.PrimaryKeyDelimiter), "Component_", (string)row[2], "Component")); | ||
240 | } | ||
241 | } | ||
242 | } | ||
243 | |||
244 | /// <summary> | ||
245 | /// Decompile the ComPlusUserInPartitionRole table. | ||
246 | /// </summary> | ||
247 | /// <param name="table">The table to decompile.</param> | ||
248 | private void DecompileComPlusUserInPartitionRoleTable(Table table) | ||
249 | { | ||
250 | foreach (Row row in table.Rows) | ||
251 | { | ||
252 | ComPlus.ComPlusUserInPartitionRole userInPartitionRole = new ComPlus.ComPlusUserInPartitionRole(); | ||
253 | |||
254 | userInPartitionRole.Id = (string)row[0]; | ||
255 | userInPartitionRole.PartitionRole = (string)row[1]; | ||
256 | userInPartitionRole.User = (string)row[3]; | ||
257 | |||
258 | Wix.Component component = (Wix.Component)this.Core.GetIndexedElement("Component", (string)row[2]); | ||
259 | if (null != component) | ||
260 | { | ||
261 | component.AddChild(userInPartitionRole); | ||
262 | } | ||
263 | else | ||
264 | { | ||
265 | this.Core.OnMessage(WixWarnings.ExpectedForeignRow(row.SourceLineNumbers, table.Name, row.GetPrimaryKey(DecompilerConstants.PrimaryKeyDelimiter), "Component_", (string)row[2], "Component")); | ||
266 | } | ||
267 | } | ||
268 | } | ||
269 | |||
270 | /// <summary> | ||
271 | /// Decompile the ComPlusGroupInPartitionRole table. | ||
272 | /// </summary> | ||
273 | /// <param name="table">The table to decompile.</param> | ||
274 | private void DecompileComPlusGroupInPartitionRoleTable(Table table) | ||
275 | { | ||
276 | foreach (Row row in table.Rows) | ||
277 | { | ||
278 | ComPlus.ComPlusGroupInPartitionRole groupInPartitionRole = new ComPlus.ComPlusGroupInPartitionRole(); | ||
279 | |||
280 | groupInPartitionRole.Id = (string)row[0]; | ||
281 | groupInPartitionRole.PartitionRole = (string)row[1]; | ||
282 | groupInPartitionRole.Group = (string)row[3]; | ||
283 | |||
284 | Wix.Component component = (Wix.Component)this.Core.GetIndexedElement("Component", (string)row[2]); | ||
285 | if (null != component) | ||
286 | { | ||
287 | component.AddChild(groupInPartitionRole); | ||
288 | } | ||
289 | else | ||
290 | { | ||
291 | this.Core.OnMessage(WixWarnings.ExpectedForeignRow(row.SourceLineNumbers, table.Name, row.GetPrimaryKey(DecompilerConstants.PrimaryKeyDelimiter), "Component_", (string)row[2], "Component")); | ||
292 | } | ||
293 | } | ||
294 | } | ||
295 | |||
296 | /// <summary> | ||
297 | /// Decompile the ComPlusPartitionUser table. | ||
298 | /// </summary> | ||
299 | /// <param name="table">The table to decompile.</param> | ||
300 | private void DecompileComPlusPartitionUserTable(Table table) | ||
301 | { | ||
302 | foreach (Row row in table.Rows) | ||
303 | { | ||
304 | ComPlus.ComPlusPartitionUser partitionUser = new ComPlus.ComPlusPartitionUser(); | ||
305 | |||
306 | partitionUser.Id = (string)row[0]; | ||
307 | partitionUser.Partition = (string)row[1]; | ||
308 | partitionUser.User = (string)row[3]; | ||
309 | |||
310 | Wix.Component component = (Wix.Component)this.Core.GetIndexedElement("Component", (string)row[2]); | ||
311 | if (null != component) | ||
312 | { | ||
313 | component.AddChild(partitionUser); | ||
314 | } | ||
315 | else | ||
316 | { | ||
317 | this.Core.OnMessage(WixWarnings.ExpectedForeignRow(row.SourceLineNumbers, table.Name, row.GetPrimaryKey(DecompilerConstants.PrimaryKeyDelimiter), "Component_", (string)row[2], "Component")); | ||
318 | } | ||
319 | } | ||
320 | } | ||
321 | |||
322 | /// <summary> | ||
323 | /// Decompile the ComPlusApplication table. | ||
324 | /// </summary> | ||
325 | /// <param name="table">The table to decompile.</param> | ||
326 | private void DecompileComPlusApplicationTable(Table table) | ||
327 | { | ||
328 | foreach (Row row in table.Rows) | ||
329 | { | ||
330 | ComPlus.ComPlusApplication application = new ComPlus.ComPlusApplication(); | ||
331 | |||
332 | application.Id = (string)row[0]; | ||
333 | application.Partition = (string)row[1]; | ||
334 | |||
335 | if (null != row[3]) | ||
336 | { | ||
337 | application.ApplicationId = (string)row[3]; | ||
338 | } | ||
339 | |||
340 | if (null != row[4]) | ||
341 | { | ||
342 | application.Name = (string)row[4]; | ||
343 | } | ||
344 | |||
345 | if (null != row[2]) | ||
346 | { | ||
347 | Wix.Component component = (Wix.Component)this.Core.GetIndexedElement("Component", (string)row[1]); | ||
348 | if (null != component) | ||
349 | { | ||
350 | component.AddChild(application); | ||
351 | } | ||
352 | else | ||
353 | { | ||
354 | this.Core.OnMessage(WixWarnings.ExpectedForeignRow(row.SourceLineNumbers, table.Name, row.GetPrimaryKey(DecompilerConstants.PrimaryKeyDelimiter), "Component_", (string)row[2], "Component")); | ||
355 | } | ||
356 | } | ||
357 | else | ||
358 | { | ||
359 | this.Core.RootElement.AddChild(application); | ||
360 | } | ||
361 | this.Core.IndexElement(row, application); | ||
362 | } | ||
363 | } | ||
364 | |||
365 | /// <summary> | ||
366 | /// Decompile the ComPlusApplicationProperty table. | ||
367 | /// </summary> | ||
368 | /// <param name="table">The table to decompile.</param> | ||
369 | private void DecompileComPlusApplicationPropertyTable(Table table) | ||
370 | { | ||
371 | foreach (Row row in table.Rows) | ||
372 | { | ||
373 | ComPlus.ComPlusApplication application = (ComPlus.ComPlusApplication)this.Core.GetIndexedElement("ComPlusApplication", (string)row[0]); | ||
374 | if (null == application) | ||
375 | { | ||
376 | this.Core.OnMessage(WixWarnings.ExpectedForeignRow(row.SourceLineNumbers, table.Name, row.GetPrimaryKey(DecompilerConstants.PrimaryKeyDelimiter), "Application_", (string)row[0], "ComPlusApplication")); | ||
377 | } | ||
378 | |||
379 | switch ((string)row[1]) | ||
380 | { | ||
381 | case "3GigSupportEnabled": | ||
382 | switch ((string)row[2]) | ||
383 | { | ||
384 | case "1": | ||
385 | application.ThreeGigSupportEnabled = ComPlus.YesNoType.yes; | ||
386 | break; | ||
387 | case "0": | ||
388 | application.ThreeGigSupportEnabled = ComPlus.YesNoType.no; | ||
389 | break; | ||
390 | default: | ||
391 | // TODO: Warning | ||
392 | break; | ||
393 | } | ||
394 | break; | ||
395 | case "AccessChecksLevel": | ||
396 | switch ((string)row[2]) | ||
397 | { | ||
398 | case "0": | ||
399 | application.AccessChecksLevel = ComPlus.ComPlusApplication.AccessChecksLevelType.applicationLevel; | ||
400 | break; | ||
401 | case "1": | ||
402 | application.AccessChecksLevel = ComPlus.ComPlusApplication.AccessChecksLevelType.applicationComponentLevel; | ||
403 | break; | ||
404 | default: | ||
405 | // TODO: Warning | ||
406 | break; | ||
407 | } | ||
408 | break; | ||
409 | case "Activation": | ||
410 | switch ((string)row[2]) | ||
411 | { | ||
412 | case "Inproc": | ||
413 | application.Activation = ComPlus.ComPlusApplication.ActivationType.inproc; | ||
414 | break; | ||
415 | case "Local": | ||
416 | application.Activation = ComPlus.ComPlusApplication.ActivationType.local; | ||
417 | break; | ||
418 | default: | ||
419 | // TODO: Warning | ||
420 | break; | ||
421 | } | ||
422 | break; | ||
423 | case "ApplicationAccessChecksEnabled": | ||
424 | switch ((string)row[2]) | ||
425 | { | ||
426 | case "1": | ||
427 | application.ApplicationAccessChecksEnabled = ComPlus.YesNoType.yes; | ||
428 | break; | ||
429 | case "0": | ||
430 | application.ApplicationAccessChecksEnabled = ComPlus.YesNoType.no; | ||
431 | break; | ||
432 | default: | ||
433 | // TODO: Warning | ||
434 | break; | ||
435 | } | ||
436 | break; | ||
437 | case "ApplicationDirectory": | ||
438 | application.ApplicationDirectory = (string)row[2]; | ||
439 | break; | ||
440 | case "Authentication": | ||
441 | switch ((string)row[2]) | ||
442 | { | ||
443 | case "0": | ||
444 | application.Authentication = ComPlus.ComPlusApplication.AuthenticationType.@default; | ||
445 | break; | ||
446 | case "1": | ||
447 | application.Authentication = ComPlus.ComPlusApplication.AuthenticationType.none; | ||
448 | break; | ||
449 | case "2": | ||
450 | application.Authentication = ComPlus.ComPlusApplication.AuthenticationType.connect; | ||
451 | break; | ||
452 | case "3": | ||
453 | application.Authentication = ComPlus.ComPlusApplication.AuthenticationType.call; | ||
454 | break; | ||
455 | case "4": | ||
456 | application.Authentication = ComPlus.ComPlusApplication.AuthenticationType.packet; | ||
457 | break; | ||
458 | case "5": | ||
459 | application.Authentication = ComPlus.ComPlusApplication.AuthenticationType.integrity; | ||
460 | break; | ||
461 | case "6": | ||
462 | application.Authentication = ComPlus.ComPlusApplication.AuthenticationType.privacy; | ||
463 | break; | ||
464 | default: | ||
465 | // TODO: Warning | ||
466 | break; | ||
467 | } | ||
468 | break; | ||
469 | case "AuthenticationCapability": | ||
470 | switch ((string)row[2]) | ||
471 | { | ||
472 | case "0": | ||
473 | application.AuthenticationCapability = ComPlus.ComPlusApplication.AuthenticationCapabilityType.none; | ||
474 | break; | ||
475 | case "2": | ||
476 | application.AuthenticationCapability = ComPlus.ComPlusApplication.AuthenticationCapabilityType.secureReference; | ||
477 | break; | ||
478 | case "32": | ||
479 | application.AuthenticationCapability = ComPlus.ComPlusApplication.AuthenticationCapabilityType.staticCloaking; | ||
480 | break; | ||
481 | case "64": | ||
482 | application.AuthenticationCapability = ComPlus.ComPlusApplication.AuthenticationCapabilityType.dynamicCloaking; | ||
483 | break; | ||
484 | default: | ||
485 | // TODO: Warning | ||
486 | break; | ||
487 | } | ||
488 | break; | ||
489 | case "Changeable": | ||
490 | switch ((string)row[2]) | ||
491 | { | ||
492 | case "1": | ||
493 | application.Changeable = ComPlus.YesNoType.yes; | ||
494 | break; | ||
495 | case "0": | ||
496 | application.Changeable = ComPlus.YesNoType.no; | ||
497 | break; | ||
498 | default: | ||
499 | // TODO: Warning | ||
500 | break; | ||
501 | } | ||
502 | break; | ||
503 | case "CommandLine": | ||
504 | application.CommandLine = (string)row[2]; | ||
505 | break; | ||
506 | case "ConcurrentApps": | ||
507 | int concurrentApps; | ||
508 | if (Int32.TryParse((string)row[2], out concurrentApps)) | ||
509 | { | ||
510 | application.ConcurrentApps = concurrentApps; | ||
511 | } | ||
512 | else | ||
513 | { | ||
514 | // TODO: Warning | ||
515 | } | ||
516 | break; | ||
517 | case "CreatedBy": | ||
518 | application.CreatedBy = (string)row[2]; | ||
519 | break; | ||
520 | case "CRMEnabled": | ||
521 | switch ((string)row[2]) | ||
522 | { | ||
523 | case "1": | ||
524 | application.CRMEnabled = ComPlus.YesNoType.yes; | ||
525 | break; | ||
526 | case "0": | ||
527 | application.CRMEnabled = ComPlus.YesNoType.no; | ||
528 | break; | ||
529 | default: | ||
530 | // TODO: Warning | ||
531 | break; | ||
532 | } | ||
533 | break; | ||
534 | case "CRMLogFile": | ||
535 | application.CRMLogFile = (string)row[2]; | ||
536 | break; | ||
537 | case "Deleteable": | ||
538 | switch ((string)row[2]) | ||
539 | { | ||
540 | case "1": | ||
541 | application.Deleteable = ComPlus.YesNoType.yes; | ||
542 | break; | ||
543 | case "0": | ||
544 | application.Deleteable = ComPlus.YesNoType.no; | ||
545 | break; | ||
546 | default: | ||
547 | // TODO: Warning | ||
548 | break; | ||
549 | } | ||
550 | break; | ||
551 | case "Description": | ||
552 | application.Description = (string)row[2]; | ||
553 | break; | ||
554 | case "DumpEnabled": | ||
555 | switch ((string)row[2]) | ||
556 | { | ||
557 | case "1": | ||
558 | application.DumpEnabled = ComPlus.YesNoType.yes; | ||
559 | break; | ||
560 | case "0": | ||
561 | application.DumpEnabled = ComPlus.YesNoType.no; | ||
562 | break; | ||
563 | default: | ||
564 | // TODO: Warning | ||
565 | break; | ||
566 | } | ||
567 | break; | ||
568 | case "DumpOnException": | ||
569 | switch ((string)row[2]) | ||
570 | { | ||
571 | case "1": | ||
572 | application.DumpOnException = ComPlus.YesNoType.yes; | ||
573 | break; | ||
574 | case "0": | ||
575 | application.DumpOnException = ComPlus.YesNoType.no; | ||
576 | break; | ||
577 | default: | ||
578 | // TODO: Warning | ||
579 | break; | ||
580 | } | ||
581 | break; | ||
582 | case "DumpOnFailfast": | ||
583 | switch ((string)row[2]) | ||
584 | { | ||
585 | case "1": | ||
586 | application.DumpOnFailfast = ComPlus.YesNoType.yes; | ||
587 | break; | ||
588 | case "0": | ||
589 | application.DumpOnFailfast = ComPlus.YesNoType.no; | ||
590 | break; | ||
591 | default: | ||
592 | // TODO: Warning | ||
593 | break; | ||
594 | } | ||
595 | break; | ||
596 | case "DumpPath": | ||
597 | application.DumpPath = (string)row[2]; | ||
598 | break; | ||
599 | case "EventsEnabled": | ||
600 | switch ((string)row[2]) | ||
601 | { | ||
602 | case "1": | ||
603 | application.EventsEnabled = ComPlus.YesNoType.yes; | ||
604 | break; | ||
605 | case "0": | ||
606 | application.EventsEnabled = ComPlus.YesNoType.no; | ||
607 | break; | ||
608 | default: | ||
609 | // TODO: Warning | ||
610 | break; | ||
611 | } | ||
612 | break; | ||
613 | case "Identity": | ||
614 | application.Identity = (string)row[2]; | ||
615 | break; | ||
616 | case "ImpersonationLevel": | ||
617 | switch ((string)row[2]) | ||
618 | { | ||
619 | case "1": | ||
620 | application.ImpersonationLevel = ComPlus.ComPlusApplication.ImpersonationLevelType.anonymous; | ||
621 | break; | ||
622 | case "2": | ||
623 | application.ImpersonationLevel = ComPlus.ComPlusApplication.ImpersonationLevelType.identify; | ||
624 | break; | ||
625 | case "3": | ||
626 | application.ImpersonationLevel = ComPlus.ComPlusApplication.ImpersonationLevelType.impersonate; | ||
627 | break; | ||
628 | case "4": | ||
629 | application.ImpersonationLevel = ComPlus.ComPlusApplication.ImpersonationLevelType.@delegate; | ||
630 | break; | ||
631 | default: | ||
632 | // TODO: Warning | ||
633 | break; | ||
634 | } | ||
635 | break; | ||
636 | case "IsEnabled": | ||
637 | switch ((string)row[2]) | ||
638 | { | ||
639 | case "1": | ||
640 | application.IsEnabled = ComPlus.YesNoType.yes; | ||
641 | break; | ||
642 | case "0": | ||
643 | application.IsEnabled = ComPlus.YesNoType.no; | ||
644 | break; | ||
645 | default: | ||
646 | // TODO: Warning | ||
647 | break; | ||
648 | } | ||
649 | break; | ||
650 | case "MaxDumpCount": | ||
651 | int maxDumpCount; | ||
652 | if (Int32.TryParse((string)row[2], out maxDumpCount)) | ||
653 | { | ||
654 | application.MaxDumpCount = maxDumpCount; | ||
655 | } | ||
656 | else | ||
657 | { | ||
658 | // TODO: Warning | ||
659 | } | ||
660 | break; | ||
661 | case "Password": | ||
662 | application.Password = (string)row[2]; | ||
663 | break; | ||
664 | case "QCAuthenticateMsgs": | ||
665 | switch ((string)row[2]) | ||
666 | { | ||
667 | case "0": | ||
668 | application.QCAuthenticateMsgs = ComPlus.ComPlusApplication.QCAuthenticateMsgsType.secureApps; | ||
669 | break; | ||
670 | case "1": | ||
671 | application.QCAuthenticateMsgs = ComPlus.ComPlusApplication.QCAuthenticateMsgsType.off; | ||
672 | break; | ||
673 | case "2": | ||
674 | application.QCAuthenticateMsgs = ComPlus.ComPlusApplication.QCAuthenticateMsgsType.on; | ||
675 | break; | ||
676 | default: | ||
677 | // TODO: Warning | ||
678 | break; | ||
679 | } | ||
680 | break; | ||
681 | case "QCListenerMaxThreads": | ||
682 | int qcListenerMaxThreads; | ||
683 | if (Int32.TryParse((string)row[2], out qcListenerMaxThreads)) | ||
684 | { | ||
685 | application.QCListenerMaxThreads = qcListenerMaxThreads; | ||
686 | } | ||
687 | else | ||
688 | { | ||
689 | // TODO: Warning | ||
690 | } | ||
691 | break; | ||
692 | case "QueueListenerEnabled": | ||
693 | switch ((string)row[2]) | ||
694 | { | ||
695 | case "1": | ||
696 | application.QueueListenerEnabled = ComPlus.YesNoType.yes; | ||
697 | break; | ||
698 | case "0": | ||
699 | application.QueueListenerEnabled = ComPlus.YesNoType.no; | ||
700 | break; | ||
701 | default: | ||
702 | // TODO: Warning | ||
703 | break; | ||
704 | } | ||
705 | break; | ||
706 | case "QueuingEnabled": | ||
707 | switch ((string)row[2]) | ||
708 | { | ||
709 | case "1": | ||
710 | application.QueuingEnabled = ComPlus.YesNoType.yes; | ||
711 | break; | ||
712 | case "0": | ||
713 | application.QueuingEnabled = ComPlus.YesNoType.no; | ||
714 | break; | ||
715 | default: | ||
716 | // TODO: Warning | ||
717 | break; | ||
718 | } | ||
719 | break; | ||
720 | case "RecycleActivationLimit": | ||
721 | int recycleActivationLimit; | ||
722 | if (Int32.TryParse((string)row[2], out recycleActivationLimit)) | ||
723 | { | ||
724 | application.RecycleActivationLimit = recycleActivationLimit; | ||
725 | } | ||
726 | else | ||
727 | { | ||
728 | // TODO: Warning | ||
729 | } | ||
730 | break; | ||
731 | case "RecycleCallLimit": | ||
732 | int recycleCallLimit; | ||
733 | if (Int32.TryParse((string)row[2], out recycleCallLimit)) | ||
734 | { | ||
735 | application.RecycleCallLimit = recycleCallLimit; | ||
736 | } | ||
737 | else | ||
738 | { | ||
739 | // TODO: Warning | ||
740 | } | ||
741 | break; | ||
742 | case "RecycleExpirationTimeout": | ||
743 | int recycleExpirationTimeout; | ||
744 | if (Int32.TryParse((string)row[2], out recycleExpirationTimeout)) | ||
745 | { | ||
746 | application.RecycleExpirationTimeout = recycleExpirationTimeout; | ||
747 | } | ||
748 | else | ||
749 | { | ||
750 | // TODO: Warning | ||
751 | } | ||
752 | break; | ||
753 | case "RecycleLifetimeLimit": | ||
754 | int recycleLifetimeLimit; | ||
755 | if (Int32.TryParse((string)row[2], out recycleLifetimeLimit)) | ||
756 | { | ||
757 | application.RecycleLifetimeLimit = recycleLifetimeLimit; | ||
758 | } | ||
759 | else | ||
760 | { | ||
761 | // TODO: Warning | ||
762 | } | ||
763 | break; | ||
764 | case "RecycleMemoryLimit": | ||
765 | int recycleMemoryLimit; | ||
766 | if (Int32.TryParse((string)row[2], out recycleMemoryLimit)) | ||
767 | { | ||
768 | application.RecycleMemoryLimit = recycleMemoryLimit; | ||
769 | } | ||
770 | else | ||
771 | { | ||
772 | // TODO: Warning | ||
773 | } | ||
774 | break; | ||
775 | case "Replicable": | ||
776 | switch ((string)row[2]) | ||
777 | { | ||
778 | case "1": | ||
779 | application.Replicable = ComPlus.YesNoType.yes; | ||
780 | break; | ||
781 | case "0": | ||
782 | application.Replicable = ComPlus.YesNoType.no; | ||
783 | break; | ||
784 | default: | ||
785 | // TODO: Warning | ||
786 | break; | ||
787 | } | ||
788 | break; | ||
789 | case "RunForever": | ||
790 | switch ((string)row[2]) | ||
791 | { | ||
792 | case "1": | ||
793 | application.RunForever = ComPlus.YesNoType.yes; | ||
794 | break; | ||
795 | case "0": | ||
796 | application.RunForever = ComPlus.YesNoType.no; | ||
797 | break; | ||
798 | default: | ||
799 | // TODO: Warning | ||
800 | break; | ||
801 | } | ||
802 | break; | ||
803 | case "ShutdownAfter": | ||
804 | int shutdownAfter; | ||
805 | if (Int32.TryParse((string)row[2], out shutdownAfter)) | ||
806 | { | ||
807 | application.ShutdownAfter = shutdownAfter; | ||
808 | } | ||
809 | else | ||
810 | { | ||
811 | // TODO: Warning | ||
812 | } | ||
813 | break; | ||
814 | case "SoapActivated": | ||
815 | switch ((string)row[2]) | ||
816 | { | ||
817 | case "1": | ||
818 | application.SoapActivated = ComPlus.YesNoType.yes; | ||
819 | break; | ||
820 | case "0": | ||
821 | application.SoapActivated = ComPlus.YesNoType.no; | ||
822 | break; | ||
823 | default: | ||
824 | // TODO: Warning | ||
825 | break; | ||
826 | } | ||
827 | break; | ||
828 | case "SoapBaseUrl": | ||
829 | application.SoapBaseUrl = (string)row[2]; | ||
830 | break; | ||
831 | case "SoapMailTo": | ||
832 | application.SoapMailTo = (string)row[2]; | ||
833 | break; | ||
834 | case "SoapVRoot": | ||
835 | application.SoapVRoot = (string)row[2]; | ||
836 | break; | ||
837 | case "SRPEnabled": | ||
838 | switch ((string)row[2]) | ||
839 | { | ||
840 | case "1": | ||
841 | application.SRPEnabled = ComPlus.YesNoType.yes; | ||
842 | break; | ||
843 | case "0": | ||
844 | application.SRPEnabled = ComPlus.YesNoType.no; | ||
845 | break; | ||
846 | default: | ||
847 | // TODO: Warning | ||
848 | break; | ||
849 | } | ||
850 | break; | ||
851 | case "SRPTrustLevel": | ||
852 | switch ((string)row[2]) | ||
853 | { | ||
854 | case "0": | ||
855 | application.SRPTrustLevel = ComPlus.ComPlusApplication.SRPTrustLevelType.disallowed; | ||
856 | break; | ||
857 | case "262144": | ||
858 | application.SRPTrustLevel = ComPlus.ComPlusApplication.SRPTrustLevelType.fullyTrusted; | ||
859 | break; | ||
860 | default: | ||
861 | // TODO: Warning | ||
862 | break; | ||
863 | } | ||
864 | break; | ||
865 | default: | ||
866 | // TODO: Warning | ||
867 | break; | ||
868 | } | ||
869 | } | ||
870 | } | ||
871 | |||
872 | /// <summary> | ||
873 | /// Decompile the ComPlusApplicationRole table. | ||
874 | /// </summary> | ||
875 | /// <param name="table">The table to decompile.</param> | ||
876 | private void DecompileComPlusApplicationRoleTable(Table table) | ||
877 | { | ||
878 | foreach (Row row in table.Rows) | ||
879 | { | ||
880 | ComPlus.ComPlusApplicationRole applicationRole = new ComPlus.ComPlusApplicationRole(); | ||
881 | |||
882 | applicationRole.Id = (string)row[0]; | ||
883 | applicationRole.Application = (string)row[1]; | ||
884 | |||
885 | if (null != row[3]) | ||
886 | { | ||
887 | applicationRole.Name = (string)row[3]; | ||
888 | } | ||
889 | |||
890 | if (null != row[2]) | ||
891 | { | ||
892 | Wix.Component component = (Wix.Component)this.Core.GetIndexedElement("Component", (string)row[2]); | ||
893 | if (null != component) | ||
894 | { | ||
895 | component.AddChild(applicationRole); | ||
896 | } | ||
897 | else | ||
898 | { | ||
899 | this.Core.OnMessage(WixWarnings.ExpectedForeignRow(row.SourceLineNumbers, table.Name, row.GetPrimaryKey(DecompilerConstants.PrimaryKeyDelimiter), "Component_", (string)row[2], "Component")); | ||
900 | } | ||
901 | } | ||
902 | else | ||
903 | { | ||
904 | this.Core.RootElement.AddChild(applicationRole); | ||
905 | } | ||
906 | this.Core.IndexElement(row, applicationRole); | ||
907 | } | ||
908 | } | ||
909 | |||
910 | /// <summary> | ||
911 | /// Decompile the ComPlusApplicationRoleProperty table. | ||
912 | /// </summary> | ||
913 | /// <param name="table">The table to decompile.</param> | ||
914 | private void DecompileComPlusApplicationRolePropertyTable(Table table) | ||
915 | { | ||
916 | foreach (Row row in table.Rows) | ||
917 | { | ||
918 | ComPlus.ComPlusApplicationRole applicationRole = (ComPlus.ComPlusApplicationRole)this.Core.GetIndexedElement("ComPlusApplicationRole", (string)row[0]); | ||
919 | if (null == applicationRole) | ||
920 | { | ||
921 | this.Core.OnMessage(WixWarnings.ExpectedForeignRow(row.SourceLineNumbers, table.Name, row.GetPrimaryKey(DecompilerConstants.PrimaryKeyDelimiter), "ApplicationRole_", (string)row[0], "ComPlusApplicationRole")); | ||
922 | } | ||
923 | |||
924 | switch ((string)row[1]) | ||
925 | { | ||
926 | case "Description": | ||
927 | applicationRole.Description = (string)row[2]; | ||
928 | break; | ||
929 | default: | ||
930 | // TODO: Warning | ||
931 | break; | ||
932 | } | ||
933 | } | ||
934 | } | ||
935 | |||
936 | /// <summary> | ||
937 | /// Decompile the ComPlusUserInApplicationRole table. | ||
938 | /// </summary> | ||
939 | /// <param name="table">The table to decompile.</param> | ||
940 | private void DecompileComPlusUserInApplicationRoleTable(Table table) | ||
941 | { | ||
942 | foreach (Row row in table.Rows) | ||
943 | { | ||
944 | ComPlus.ComPlusUserInApplicationRole userInApplicationRole = new ComPlus.ComPlusUserInApplicationRole(); | ||
945 | |||
946 | userInApplicationRole.Id = (string)row[0]; | ||
947 | userInApplicationRole.ApplicationRole = (string)row[1]; | ||
948 | userInApplicationRole.User = (string)row[3]; | ||
949 | |||
950 | Wix.Component component = (Wix.Component)this.Core.GetIndexedElement("Component", (string)row[2]); | ||
951 | if (null != component) | ||
952 | { | ||
953 | component.AddChild(userInApplicationRole); | ||
954 | } | ||
955 | else | ||
956 | { | ||
957 | this.Core.OnMessage(WixWarnings.ExpectedForeignRow(row.SourceLineNumbers, table.Name, row.GetPrimaryKey(DecompilerConstants.PrimaryKeyDelimiter), "Component_", (string)row[2], "Component")); | ||
958 | } | ||
959 | } | ||
960 | } | ||
961 | |||
962 | /// <summary> | ||
963 | /// Decompile the ComPlusGroupInApplicationRole table. | ||
964 | /// </summary> | ||
965 | /// <param name="table">The table to decompile.</param> | ||
966 | private void DecompileComPlusGroupInApplicationRoleTable(Table table) | ||
967 | { | ||
968 | foreach (Row row in table.Rows) | ||
969 | { | ||
970 | ComPlus.ComPlusGroupInApplicationRole groupInApplicationRole = new ComPlus.ComPlusGroupInApplicationRole(); | ||
971 | |||
972 | groupInApplicationRole.Id = (string)row[0]; | ||
973 | groupInApplicationRole.ApplicationRole = (string)row[1]; | ||
974 | groupInApplicationRole.Group = (string)row[3]; | ||
975 | |||
976 | Wix.Component component = (Wix.Component)this.Core.GetIndexedElement("Component", (string)row[2]); | ||
977 | if (null != component) | ||
978 | { | ||
979 | component.AddChild(groupInApplicationRole); | ||
980 | } | ||
981 | else | ||
982 | { | ||
983 | this.Core.OnMessage(WixWarnings.ExpectedForeignRow(row.SourceLineNumbers, table.Name, row.GetPrimaryKey(DecompilerConstants.PrimaryKeyDelimiter), "Component_", (string)row[2], "Component")); | ||
984 | } | ||
985 | } | ||
986 | } | ||
987 | |||
988 | /// <summary> | ||
989 | /// Decompile the ComPlusAssembly table. | ||
990 | /// </summary> | ||
991 | /// <param name="table">The table to decompile.</param> | ||
992 | private void DecompileComPlusAssemblyTable(Table table) | ||
993 | { | ||
994 | foreach (Row row in table.Rows) | ||
995 | { | ||
996 | ComPlus.ComPlusAssembly assembly = new ComPlus.ComPlusAssembly(); | ||
997 | |||
998 | assembly.Id = (string)row[0]; | ||
999 | assembly.Application = (string)row[1]; | ||
1000 | |||
1001 | if (null != row[3]) | ||
1002 | { | ||
1003 | assembly.AssemblyName = (string)row[3]; | ||
1004 | } | ||
1005 | |||
1006 | if (null != row[4]) | ||
1007 | { | ||
1008 | assembly.DllPath = (string)row[4]; | ||
1009 | } | ||
1010 | |||
1011 | if (null != row[5]) | ||
1012 | { | ||
1013 | assembly.TlbPath = (string)row[5]; | ||
1014 | } | ||
1015 | |||
1016 | if (null != row[6]) | ||
1017 | { | ||
1018 | assembly.PSDllPath = (string)row[6]; | ||
1019 | } | ||
1020 | |||
1021 | int attributes = (int)row[7]; | ||
1022 | |||
1023 | if (0 != (attributes & (int)ComPlusCompiler.CpiAssemblyAttributes.EventClass)) | ||
1024 | { | ||
1025 | assembly.EventClass = ComPlus.YesNoType.yes; | ||
1026 | } | ||
1027 | |||
1028 | if (0 != (attributes & (int)ComPlusCompiler.CpiAssemblyAttributes.DotNetAssembly)) | ||
1029 | { | ||
1030 | assembly.Type = ComPlus.ComPlusAssembly.TypeType.net; | ||
1031 | } | ||
1032 | |||
1033 | if (0 != (attributes & (int)ComPlusCompiler.CpiAssemblyAttributes.DllPathFromGAC)) | ||
1034 | { | ||
1035 | assembly.DllPathFromGAC = ComPlus.YesNoType.yes; | ||
1036 | } | ||
1037 | |||
1038 | if (0 != (attributes & (int)ComPlusCompiler.CpiAssemblyAttributes.RegisterInCommit)) | ||
1039 | { | ||
1040 | assembly.RegisterInCommit = ComPlus.YesNoType.yes; | ||
1041 | } | ||
1042 | |||
1043 | Wix.Component component = (Wix.Component)this.Core.GetIndexedElement("Component", (string)row[2]); | ||
1044 | if (null != component) | ||
1045 | { | ||
1046 | component.AddChild(assembly); | ||
1047 | } | ||
1048 | else | ||
1049 | { | ||
1050 | this.Core.OnMessage(WixWarnings.ExpectedForeignRow(row.SourceLineNumbers, table.Name, row.GetPrimaryKey(DecompilerConstants.PrimaryKeyDelimiter), "Component_", (string)row[2], "Component")); | ||
1051 | } | ||
1052 | this.Core.IndexElement(row, assembly); | ||
1053 | } | ||
1054 | } | ||
1055 | |||
1056 | /// <summary> | ||
1057 | /// Decompile the ComPlusAssemblyDependency table. | ||
1058 | /// </summary> | ||
1059 | /// <param name="table">The table to decompile.</param> | ||
1060 | private void DecompileComPlusAssemblyDependencyTable(Table table) | ||
1061 | { | ||
1062 | foreach (Row row in table.Rows) | ||
1063 | { | ||
1064 | ComPlus.ComPlusAssemblyDependency assemblyDependency = new ComPlus.ComPlusAssemblyDependency(); | ||
1065 | |||
1066 | assemblyDependency.RequiredAssembly = (string)row[1]; | ||
1067 | |||
1068 | ComPlus.ComPlusAssembly assembly = (ComPlus.ComPlusAssembly)this.Core.GetIndexedElement("ComPlusAssembly", (string)row[0]); | ||
1069 | if (null != assembly) | ||
1070 | { | ||
1071 | assembly.AddChild(assemblyDependency); | ||
1072 | } | ||
1073 | else | ||
1074 | { | ||
1075 | this.Core.OnMessage(WixWarnings.ExpectedForeignRow(row.SourceLineNumbers, table.Name, row.GetPrimaryKey(DecompilerConstants.PrimaryKeyDelimiter), "Assembly_", (string)row[0], "ComPlusAssembly")); | ||
1076 | } | ||
1077 | } | ||
1078 | } | ||
1079 | |||
1080 | /// <summary> | ||
1081 | /// Decompile the ComPlusComponent table. | ||
1082 | /// </summary> | ||
1083 | /// <param name="table">The table to decompile.</param> | ||
1084 | private void DecompileComPlusComponentTable(Table table) | ||
1085 | { | ||
1086 | foreach (Row row in table.Rows) | ||
1087 | { | ||
1088 | ComPlus.ComPlusComponent comPlusComponent = new ComPlus.ComPlusComponent(); | ||
1089 | |||
1090 | comPlusComponent.Id = (string)row[0]; | ||
1091 | |||
1092 | try | ||
1093 | { | ||
1094 | Guid clsid = new Guid((string)row[2]); | ||
1095 | comPlusComponent.CLSID = clsid.ToString().ToUpper(); | ||
1096 | } | ||
1097 | catch | ||
1098 | { | ||
1099 | // TODO: Warning | ||
1100 | } | ||
1101 | |||
1102 | ComPlus.ComPlusAssembly assembly = (ComPlus.ComPlusAssembly)this.Core.GetIndexedElement("ComPlusAssembly", (string)row[1]); | ||
1103 | if (null != assembly) | ||
1104 | { | ||
1105 | assembly.AddChild(comPlusComponent); | ||
1106 | } | ||
1107 | else | ||
1108 | { | ||
1109 | this.Core.OnMessage(WixWarnings.ExpectedForeignRow(row.SourceLineNumbers, table.Name, row.GetPrimaryKey(DecompilerConstants.PrimaryKeyDelimiter), "Assembly_", (string)row[1], "ComPlusAssembly")); | ||
1110 | } | ||
1111 | this.Core.IndexElement(row, comPlusComponent); | ||
1112 | } | ||
1113 | } | ||
1114 | |||
1115 | /// <summary> | ||
1116 | /// Decompile the ComPlusComponentProperty table. | ||
1117 | /// </summary> | ||
1118 | /// <param name="table">The table to decompile.</param> | ||
1119 | private void DecompileComPlusComponentPropertyTable(Table table) | ||
1120 | { | ||
1121 | foreach (Row row in table.Rows) | ||
1122 | { | ||
1123 | ComPlus.ComPlusComponent comPlusComponent = (ComPlus.ComPlusComponent)this.Core.GetIndexedElement("ComPlusComponent", (string)row[0]); | ||
1124 | if (null == comPlusComponent) | ||
1125 | { | ||
1126 | this.Core.OnMessage(WixWarnings.ExpectedForeignRow(row.SourceLineNumbers, table.Name, row.GetPrimaryKey(DecompilerConstants.PrimaryKeyDelimiter), "ComPlusComponent_", (string)row[0], "ComPlusComponent")); | ||
1127 | } | ||
1128 | |||
1129 | switch ((string)row[1]) | ||
1130 | { | ||
1131 | case "AllowInprocSubscribers": | ||
1132 | switch ((string)row[2]) | ||
1133 | { | ||
1134 | case "1": | ||
1135 | comPlusComponent.AllowInprocSubscribers = ComPlus.YesNoType.yes; | ||
1136 | break; | ||
1137 | case "0": | ||
1138 | comPlusComponent.AllowInprocSubscribers = ComPlus.YesNoType.no; | ||
1139 | break; | ||
1140 | default: | ||
1141 | // TODO: Warning | ||
1142 | break; | ||
1143 | } | ||
1144 | break; | ||
1145 | case "ComponentAccessChecksEnabled": | ||
1146 | switch ((string)row[2]) | ||
1147 | { | ||
1148 | case "1": | ||
1149 | comPlusComponent.ComponentAccessChecksEnabled = ComPlus.YesNoType.yes; | ||
1150 | break; | ||
1151 | case "0": | ||
1152 | comPlusComponent.ComponentAccessChecksEnabled = ComPlus.YesNoType.no; | ||
1153 | break; | ||
1154 | default: | ||
1155 | // TODO: Warning | ||
1156 | break; | ||
1157 | } | ||
1158 | break; | ||
1159 | case "ComponentTransactionTimeout": | ||
1160 | int componentTransactionTimeout; | ||
1161 | if (Int32.TryParse((string)row[2], out componentTransactionTimeout)) | ||
1162 | { | ||
1163 | comPlusComponent.ComponentTransactionTimeout = componentTransactionTimeout; | ||
1164 | } | ||
1165 | else | ||
1166 | { | ||
1167 | // TODO: Warning | ||
1168 | } | ||
1169 | break; | ||
1170 | case "ComponentTransactionTimeoutEnabled": | ||
1171 | switch ((string)row[2]) | ||
1172 | { | ||
1173 | case "1": | ||
1174 | comPlusComponent.ComponentTransactionTimeoutEnabled = ComPlus.YesNoType.yes; | ||
1175 | break; | ||
1176 | case "0": | ||
1177 | comPlusComponent.ComponentTransactionTimeoutEnabled = ComPlus.YesNoType.no; | ||
1178 | break; | ||
1179 | default: | ||
1180 | // TODO: Warning | ||
1181 | break; | ||
1182 | } | ||
1183 | break; | ||
1184 | case "COMTIIntrinsics": | ||
1185 | switch ((string)row[2]) | ||
1186 | { | ||
1187 | case "1": | ||
1188 | comPlusComponent.COMTIIntrinsics = ComPlus.YesNoType.yes; | ||
1189 | break; | ||
1190 | case "0": | ||
1191 | comPlusComponent.COMTIIntrinsics = ComPlus.YesNoType.no; | ||
1192 | break; | ||
1193 | default: | ||
1194 | // TODO: Warning | ||
1195 | break; | ||
1196 | } | ||
1197 | break; | ||
1198 | case "ConstructionEnabled": | ||
1199 | switch ((string)row[2]) | ||
1200 | { | ||
1201 | case "1": | ||
1202 | comPlusComponent.ConstructionEnabled = ComPlus.YesNoType.yes; | ||
1203 | break; | ||
1204 | case "0": | ||
1205 | comPlusComponent.ConstructionEnabled = ComPlus.YesNoType.no; | ||
1206 | break; | ||
1207 | default: | ||
1208 | // TODO: Warning | ||
1209 | break; | ||
1210 | } | ||
1211 | break; | ||
1212 | case "ConstructorString": | ||
1213 | comPlusComponent.ConstructorString = (string)row[2]; | ||
1214 | break; | ||
1215 | case "CreationTimeout": | ||
1216 | int creationTimeout; | ||
1217 | if (Int32.TryParse((string)row[2], out creationTimeout)) | ||
1218 | { | ||
1219 | comPlusComponent.CreationTimeout = creationTimeout; | ||
1220 | } | ||
1221 | else | ||
1222 | { | ||
1223 | // TODO: Warning | ||
1224 | } | ||
1225 | break; | ||
1226 | case "Description": | ||
1227 | comPlusComponent.Description = (string)row[2]; | ||
1228 | break; | ||
1229 | case "EventTrackingEnabled": | ||
1230 | switch ((string)row[2]) | ||
1231 | { | ||
1232 | case "1": | ||
1233 | comPlusComponent.EventTrackingEnabled = ComPlus.YesNoType.yes; | ||
1234 | break; | ||
1235 | case "0": | ||
1236 | comPlusComponent.EventTrackingEnabled = ComPlus.YesNoType.no; | ||
1237 | break; | ||
1238 | default: | ||
1239 | // TODO: Warning | ||
1240 | break; | ||
1241 | } | ||
1242 | break; | ||
1243 | case "ExceptionClass": | ||
1244 | comPlusComponent.ExceptionClass = (string)row[2]; | ||
1245 | break; | ||
1246 | case "FireInParallel": | ||
1247 | switch ((string)row[2]) | ||
1248 | { | ||
1249 | case "1": | ||
1250 | comPlusComponent.FireInParallel = ComPlus.YesNoType.yes; | ||
1251 | break; | ||
1252 | case "0": | ||
1253 | comPlusComponent.FireInParallel = ComPlus.YesNoType.no; | ||
1254 | break; | ||
1255 | default: | ||
1256 | // TODO: Warning | ||
1257 | break; | ||
1258 | } | ||
1259 | break; | ||
1260 | case "IISIntrinsics": | ||
1261 | switch ((string)row[2]) | ||
1262 | { | ||
1263 | case "1": | ||
1264 | comPlusComponent.IISIntrinsics = ComPlus.YesNoType.yes; | ||
1265 | break; | ||
1266 | case "0": | ||
1267 | comPlusComponent.IISIntrinsics = ComPlus.YesNoType.no; | ||
1268 | break; | ||
1269 | default: | ||
1270 | // TODO: Warning | ||
1271 | break; | ||
1272 | } | ||
1273 | break; | ||
1274 | case "InitializesServerApplication": | ||
1275 | switch ((string)row[2]) | ||
1276 | { | ||
1277 | case "1": | ||
1278 | comPlusComponent.InitializesServerApplication = ComPlus.YesNoType.yes; | ||
1279 | break; | ||
1280 | case "0": | ||
1281 | comPlusComponent.InitializesServerApplication = ComPlus.YesNoType.no; | ||
1282 | break; | ||
1283 | default: | ||
1284 | // TODO: Warning | ||
1285 | break; | ||
1286 | } | ||
1287 | break; | ||
1288 | case "IsEnabled": | ||
1289 | switch ((string)row[2]) | ||
1290 | { | ||
1291 | case "1": | ||
1292 | comPlusComponent.IsEnabled = ComPlus.YesNoType.yes; | ||
1293 | break; | ||
1294 | case "0": | ||
1295 | comPlusComponent.IsEnabled = ComPlus.YesNoType.no; | ||
1296 | break; | ||
1297 | default: | ||
1298 | // TODO: Warning | ||
1299 | break; | ||
1300 | } | ||
1301 | break; | ||
1302 | case "IsPrivateComponent": | ||
1303 | switch ((string)row[2]) | ||
1304 | { | ||
1305 | case "1": | ||
1306 | comPlusComponent.IsPrivateComponent = ComPlus.YesNoType.yes; | ||
1307 | break; | ||
1308 | case "0": | ||
1309 | comPlusComponent.IsPrivateComponent = ComPlus.YesNoType.no; | ||
1310 | break; | ||
1311 | default: | ||
1312 | // TODO: Warning | ||
1313 | break; | ||
1314 | } | ||
1315 | break; | ||
1316 | case "JustInTimeActivation": | ||
1317 | switch ((string)row[2]) | ||
1318 | { | ||
1319 | case "1": | ||
1320 | comPlusComponent.JustInTimeActivation = ComPlus.YesNoType.yes; | ||
1321 | break; | ||
1322 | case "0": | ||
1323 | comPlusComponent.JustInTimeActivation = ComPlus.YesNoType.no; | ||
1324 | break; | ||
1325 | default: | ||
1326 | // TODO: Warning | ||
1327 | break; | ||
1328 | } | ||
1329 | break; | ||
1330 | case "LoadBalancingSupported": | ||
1331 | switch ((string)row[2]) | ||
1332 | { | ||
1333 | case "1": | ||
1334 | comPlusComponent.LoadBalancingSupported = ComPlus.YesNoType.yes; | ||
1335 | break; | ||
1336 | case "0": | ||
1337 | comPlusComponent.LoadBalancingSupported = ComPlus.YesNoType.no; | ||
1338 | break; | ||
1339 | default: | ||
1340 | // TODO: Warning | ||
1341 | break; | ||
1342 | } | ||
1343 | break; | ||
1344 | case "MaxPoolSize": | ||
1345 | int maxPoolSize; | ||
1346 | if (Int32.TryParse((string)row[2], out maxPoolSize)) | ||
1347 | { | ||
1348 | comPlusComponent.MaxPoolSize = maxPoolSize; | ||
1349 | } | ||
1350 | else | ||
1351 | { | ||
1352 | // TODO: Warning | ||
1353 | } | ||
1354 | break; | ||
1355 | case "MinPoolSize": | ||
1356 | int minPoolSize; | ||
1357 | if (Int32.TryParse((string)row[2], out minPoolSize)) | ||
1358 | { | ||
1359 | comPlusComponent.MinPoolSize = minPoolSize; | ||
1360 | } | ||
1361 | else | ||
1362 | { | ||
1363 | // TODO: Warning | ||
1364 | } | ||
1365 | break; | ||
1366 | case "MultiInterfacePublisherFilterCLSID": | ||
1367 | comPlusComponent.MultiInterfacePublisherFilterCLSID = (string)row[2]; | ||
1368 | break; | ||
1369 | case "MustRunInClientContext": | ||
1370 | switch ((string)row[2]) | ||
1371 | { | ||
1372 | case "1": | ||
1373 | comPlusComponent.MustRunInClientContext = ComPlus.YesNoType.yes; | ||
1374 | break; | ||
1375 | case "0": | ||
1376 | comPlusComponent.MustRunInClientContext = ComPlus.YesNoType.no; | ||
1377 | break; | ||
1378 | default: | ||
1379 | // TODO: Warning | ||
1380 | break; | ||
1381 | } | ||
1382 | break; | ||
1383 | case "MustRunInDefaultContext": | ||
1384 | switch ((string)row[2]) | ||
1385 | { | ||
1386 | case "1": | ||
1387 | comPlusComponent.MustRunInDefaultContext = ComPlus.YesNoType.yes; | ||
1388 | break; | ||
1389 | case "0": | ||
1390 | comPlusComponent.MustRunInDefaultContext = ComPlus.YesNoType.no; | ||
1391 | break; | ||
1392 | default: | ||
1393 | // TODO: Warning | ||
1394 | break; | ||
1395 | } | ||
1396 | break; | ||
1397 | case "ObjectPoolingEnabled": | ||
1398 | switch ((string)row[2]) | ||
1399 | { | ||
1400 | case "1": | ||
1401 | comPlusComponent.ObjectPoolingEnabled = ComPlus.YesNoType.yes; | ||
1402 | break; | ||
1403 | case "0": | ||
1404 | comPlusComponent.ObjectPoolingEnabled = ComPlus.YesNoType.no; | ||
1405 | break; | ||
1406 | default: | ||
1407 | // TODO: Warning | ||
1408 | break; | ||
1409 | } | ||
1410 | break; | ||
1411 | case "PublisherID": | ||
1412 | comPlusComponent.PublisherID = (string)row[2]; | ||
1413 | break; | ||
1414 | case "SoapAssemblyName": | ||
1415 | comPlusComponent.SoapAssemblyName = (string)row[2]; | ||
1416 | break; | ||
1417 | case "SoapTypeName": | ||
1418 | comPlusComponent.SoapTypeName = (string)row[2]; | ||
1419 | break; | ||
1420 | case "Synchronization": | ||
1421 | switch ((string)row[2]) | ||
1422 | { | ||
1423 | case "0": | ||
1424 | comPlusComponent.Synchronization = ComPlus.ComPlusComponent.SynchronizationType.ignored; | ||
1425 | break; | ||
1426 | case "1": | ||
1427 | comPlusComponent.Synchronization = ComPlus.ComPlusComponent.SynchronizationType.none; | ||
1428 | break; | ||
1429 | case "2": | ||
1430 | comPlusComponent.Synchronization = ComPlus.ComPlusComponent.SynchronizationType.supported; | ||
1431 | break; | ||
1432 | case "3": | ||
1433 | comPlusComponent.Synchronization = ComPlus.ComPlusComponent.SynchronizationType.required; | ||
1434 | break; | ||
1435 | case "4": | ||
1436 | comPlusComponent.Synchronization = ComPlus.ComPlusComponent.SynchronizationType.requiresNew; | ||
1437 | break; | ||
1438 | default: | ||
1439 | // TODO: Warning | ||
1440 | break; | ||
1441 | } | ||
1442 | break; | ||
1443 | case "Transaction": | ||
1444 | switch ((string)row[2]) | ||
1445 | { | ||
1446 | case "0": | ||
1447 | comPlusComponent.Transaction = ComPlus.ComPlusComponent.TransactionType.ignored; | ||
1448 | break; | ||
1449 | case "1": | ||
1450 | comPlusComponent.Transaction = ComPlus.ComPlusComponent.TransactionType.none; | ||
1451 | break; | ||
1452 | case "2": | ||
1453 | comPlusComponent.Transaction = ComPlus.ComPlusComponent.TransactionType.supported; | ||
1454 | break; | ||
1455 | case "3": | ||
1456 | comPlusComponent.Transaction = ComPlus.ComPlusComponent.TransactionType.required; | ||
1457 | break; | ||
1458 | case "4": | ||
1459 | comPlusComponent.Transaction = ComPlus.ComPlusComponent.TransactionType.requiresNew; | ||
1460 | break; | ||
1461 | default: | ||
1462 | // TODO: Warning | ||
1463 | break; | ||
1464 | } | ||
1465 | break; | ||
1466 | case "TxIsolationLevel": | ||
1467 | switch ((string)row[2]) | ||
1468 | { | ||
1469 | case "0": | ||
1470 | comPlusComponent.TxIsolationLevel = ComPlus.ComPlusComponent.TxIsolationLevelType.any; | ||
1471 | break; | ||
1472 | case "1": | ||
1473 | comPlusComponent.TxIsolationLevel = ComPlus.ComPlusComponent.TxIsolationLevelType.readUnCommitted; | ||
1474 | break; | ||
1475 | case "2": | ||
1476 | comPlusComponent.TxIsolationLevel = ComPlus.ComPlusComponent.TxIsolationLevelType.readCommitted; | ||
1477 | break; | ||
1478 | case "3": | ||
1479 | comPlusComponent.TxIsolationLevel = ComPlus.ComPlusComponent.TxIsolationLevelType.repeatableRead; | ||
1480 | break; | ||
1481 | case "4": | ||
1482 | comPlusComponent.TxIsolationLevel = ComPlus.ComPlusComponent.TxIsolationLevelType.serializable; | ||
1483 | break; | ||
1484 | default: | ||
1485 | // TODO: Warning | ||
1486 | break; | ||
1487 | } | ||
1488 | break; | ||
1489 | default: | ||
1490 | // TODO: Warning | ||
1491 | break; | ||
1492 | } | ||
1493 | } | ||
1494 | } | ||
1495 | |||
1496 | /// <summary> | ||
1497 | /// Decompile the ComPlusRoleForComponent table. | ||
1498 | /// </summary> | ||
1499 | /// <param name="table">The table to decompile.</param> | ||
1500 | private void DecompileComPlusRoleForComponentTable(Table table) | ||
1501 | { | ||
1502 | foreach (Row row in table.Rows) | ||
1503 | { | ||
1504 | ComPlus.ComPlusRoleForComponent roleForComponent = new ComPlus.ComPlusRoleForComponent(); | ||
1505 | |||
1506 | roleForComponent.Id = (string)row[0]; | ||
1507 | roleForComponent.Component = (string)row[1]; | ||
1508 | roleForComponent.ApplicationRole = (string)row[2]; | ||
1509 | |||
1510 | Wix.Component component = (Wix.Component)this.Core.GetIndexedElement("Component", (string)row[3]); | ||
1511 | if (null != component) | ||
1512 | { | ||
1513 | component.AddChild(roleForComponent); | ||
1514 | } | ||
1515 | else | ||
1516 | { | ||
1517 | this.Core.OnMessage(WixWarnings.ExpectedForeignRow(row.SourceLineNumbers, table.Name, row.GetPrimaryKey(DecompilerConstants.PrimaryKeyDelimiter), "Component_", (string)row[3], "Component")); | ||
1518 | } | ||
1519 | } | ||
1520 | } | ||
1521 | |||
1522 | /// <summary> | ||
1523 | /// Decompile the ComPlusInterface table. | ||
1524 | /// </summary> | ||
1525 | /// <param name="table">The table to decompile.</param> | ||
1526 | private void DecompileComPlusInterfaceTable(Table table) | ||
1527 | { | ||
1528 | foreach (Row row in table.Rows) | ||
1529 | { | ||
1530 | ComPlus.ComPlusInterface comPlusInterface = new ComPlus.ComPlusInterface(); | ||
1531 | |||
1532 | comPlusInterface.Id = (string)row[0]; | ||
1533 | |||
1534 | try | ||
1535 | { | ||
1536 | Guid iid = new Guid((string)row[2]); | ||
1537 | comPlusInterface.IID = iid.ToString().ToUpper(); | ||
1538 | } | ||
1539 | catch | ||
1540 | { | ||
1541 | // TODO: Warning | ||
1542 | } | ||
1543 | |||
1544 | ComPlus.ComPlusComponent comPlusComponent = (ComPlus.ComPlusComponent)this.Core.GetIndexedElement("ComPlusComponent", (string)row[1]); | ||
1545 | if (null != comPlusComponent) | ||
1546 | { | ||
1547 | comPlusComponent.AddChild(comPlusInterface); | ||
1548 | } | ||
1549 | else | ||
1550 | { | ||
1551 | this.Core.OnMessage(WixWarnings.ExpectedForeignRow(row.SourceLineNumbers, table.Name, row.GetPrimaryKey(DecompilerConstants.PrimaryKeyDelimiter), "ComPlusComponent_", (string)row[1], "ComPlusComponent")); | ||
1552 | } | ||
1553 | this.Core.IndexElement(row, comPlusInterface); | ||
1554 | } | ||
1555 | } | ||
1556 | |||
1557 | /// <summary> | ||
1558 | /// Decompile the ComPlusInterfaceProperty table. | ||
1559 | /// </summary> | ||
1560 | /// <param name="table">The table to decompile.</param> | ||
1561 | private void DecompileComPlusInterfacePropertyTable(Table table) | ||
1562 | { | ||
1563 | foreach (Row row in table.Rows) | ||
1564 | { | ||
1565 | ComPlus.ComPlusInterface comPlusInterface = (ComPlus.ComPlusInterface)this.Core.GetIndexedElement("ComPlusInterface", (string)row[0]); | ||
1566 | if (null == comPlusInterface) | ||
1567 | { | ||
1568 | this.Core.OnMessage(WixWarnings.ExpectedForeignRow(row.SourceLineNumbers, table.Name, row.GetPrimaryKey(DecompilerConstants.PrimaryKeyDelimiter), "Interface_", (string)row[0], "ComPlusInterface")); | ||
1569 | } | ||
1570 | |||
1571 | switch ((string)row[1]) | ||
1572 | { | ||
1573 | case "Description": | ||
1574 | comPlusInterface.Description = (string)row[2]; | ||
1575 | break; | ||
1576 | case "QueuingEnabled": | ||
1577 | switch ((string)row[2]) | ||
1578 | { | ||
1579 | case "1": | ||
1580 | comPlusInterface.QueuingEnabled = ComPlus.YesNoType.yes; | ||
1581 | break; | ||
1582 | case "0": | ||
1583 | comPlusInterface.QueuingEnabled = ComPlus.YesNoType.no; | ||
1584 | break; | ||
1585 | default: | ||
1586 | // TODO: Warning | ||
1587 | break; | ||
1588 | } | ||
1589 | break; | ||
1590 | default: | ||
1591 | // TODO: Warning | ||
1592 | break; | ||
1593 | } | ||
1594 | } | ||
1595 | } | ||
1596 | |||
1597 | /// <summary> | ||
1598 | /// Decompile the ComPlusRoleForInterface table. | ||
1599 | /// </summary> | ||
1600 | /// <param name="table">The table to decompile.</param> | ||
1601 | private void DecompileComPlusRoleForInterfaceTable(Table table) | ||
1602 | { | ||
1603 | foreach (Row row in table.Rows) | ||
1604 | { | ||
1605 | ComPlus.ComPlusRoleForInterface roleForInterface = new ComPlus.ComPlusRoleForInterface(); | ||
1606 | |||
1607 | roleForInterface.Id = (string)row[0]; | ||
1608 | roleForInterface.Interface = (string)row[1]; | ||
1609 | roleForInterface.ApplicationRole = (string)row[2]; | ||
1610 | |||
1611 | Wix.Component component = (Wix.Component)this.Core.GetIndexedElement("Component", (string)row[3]); | ||
1612 | if (null != component) | ||
1613 | { | ||
1614 | component.AddChild(roleForInterface); | ||
1615 | } | ||
1616 | else | ||
1617 | { | ||
1618 | this.Core.OnMessage(WixWarnings.ExpectedForeignRow(row.SourceLineNumbers, table.Name, row.GetPrimaryKey(DecompilerConstants.PrimaryKeyDelimiter), "Component_", (string)row[3], "Component")); | ||
1619 | } | ||
1620 | } | ||
1621 | } | ||
1622 | |||
1623 | /// <summary> | ||
1624 | /// Decompile the ComPlusMethod table. | ||
1625 | /// </summary> | ||
1626 | /// <param name="table">The table to decompile.</param> | ||
1627 | private void DecompileComPlusMethodTable(Table table) | ||
1628 | { | ||
1629 | foreach (Row row in table.Rows) | ||
1630 | { | ||
1631 | ComPlus.ComPlusMethod comPlusMethod = new ComPlus.ComPlusMethod(); | ||
1632 | |||
1633 | comPlusMethod.Id = (string)row[0]; | ||
1634 | |||
1635 | if (null != row[2]) | ||
1636 | { | ||
1637 | comPlusMethod.Index = (int)row[2]; | ||
1638 | } | ||
1639 | |||
1640 | if (null != row[3]) | ||
1641 | { | ||
1642 | comPlusMethod.Name = (string)row[3]; | ||
1643 | } | ||
1644 | |||
1645 | ComPlus.ComPlusInterface comPlusInterface = (ComPlus.ComPlusInterface)this.Core.GetIndexedElement("ComPlusInterface", (string)row[1]); | ||
1646 | if (null != comPlusInterface) | ||
1647 | { | ||
1648 | comPlusInterface.AddChild(comPlusMethod); | ||
1649 | } | ||
1650 | else | ||
1651 | { | ||
1652 | this.Core.OnMessage(WixWarnings.ExpectedForeignRow(row.SourceLineNumbers, table.Name, row.GetPrimaryKey(DecompilerConstants.PrimaryKeyDelimiter), "Interface_", (string)row[1], "ComPlusInterface")); | ||
1653 | } | ||
1654 | this.Core.IndexElement(row, comPlusMethod); | ||
1655 | } | ||
1656 | } | ||
1657 | |||
1658 | /// <summary> | ||
1659 | /// Decompile the ComPlusMethodProperty table. | ||
1660 | /// </summary> | ||
1661 | /// <param name="table">The table to decompile.</param> | ||
1662 | private void DecompileComPlusMethodPropertyTable(Table table) | ||
1663 | { | ||
1664 | foreach (Row row in table.Rows) | ||
1665 | { | ||
1666 | ComPlus.ComPlusMethod comPlusMethod = (ComPlus.ComPlusMethod)this.Core.GetIndexedElement("ComPlusMethod", (string)row[0]); | ||
1667 | if (null == comPlusMethod) | ||
1668 | { | ||
1669 | this.Core.OnMessage(WixWarnings.ExpectedForeignRow(row.SourceLineNumbers, table.Name, row.GetPrimaryKey(DecompilerConstants.PrimaryKeyDelimiter), "Method_", (string)row[0], "ComPlusMethod")); | ||
1670 | } | ||
1671 | |||
1672 | switch ((string)row[1]) | ||
1673 | { | ||
1674 | case "AutoComplete": | ||
1675 | switch ((string)row[2]) | ||
1676 | { | ||
1677 | case "1": | ||
1678 | comPlusMethod.AutoComplete = ComPlus.YesNoType.yes; | ||
1679 | break; | ||
1680 | case "0": | ||
1681 | comPlusMethod.AutoComplete = ComPlus.YesNoType.no; | ||
1682 | break; | ||
1683 | default: | ||
1684 | // TODO: Warning | ||
1685 | break; | ||
1686 | } | ||
1687 | break; | ||
1688 | case "Description": | ||
1689 | comPlusMethod.Description = (string)row[2]; | ||
1690 | break; | ||
1691 | default: | ||
1692 | // TODO: Warning | ||
1693 | break; | ||
1694 | } | ||
1695 | } | ||
1696 | } | ||
1697 | |||
1698 | /// <summary> | ||
1699 | /// Decompile the ComPlusRoleForMethod table. | ||
1700 | /// </summary> | ||
1701 | /// <param name="table">The table to decompile.</param> | ||
1702 | private void DecompileComPlusRoleForMethodTable(Table table) | ||
1703 | { | ||
1704 | foreach (Row row in table.Rows) | ||
1705 | { | ||
1706 | ComPlus.ComPlusRoleForMethod roleForMethod = new ComPlus.ComPlusRoleForMethod(); | ||
1707 | |||
1708 | roleForMethod.Id = (string)row[0]; | ||
1709 | roleForMethod.Method = (string)row[1]; | ||
1710 | roleForMethod.ApplicationRole = (string)row[2]; | ||
1711 | |||
1712 | Wix.Component component = (Wix.Component)this.Core.GetIndexedElement("Component", (string)row[3]); | ||
1713 | if (null != component) | ||
1714 | { | ||
1715 | component.AddChild(roleForMethod); | ||
1716 | } | ||
1717 | else | ||
1718 | { | ||
1719 | this.Core.OnMessage(WixWarnings.ExpectedForeignRow(row.SourceLineNumbers, table.Name, row.GetPrimaryKey(DecompilerConstants.PrimaryKeyDelimiter), "Component_", (string)row[3], "Component")); | ||
1720 | } | ||
1721 | } | ||
1722 | } | ||
1723 | |||
1724 | /// <summary> | ||
1725 | /// Decompile the ComPlusSubscription table. | ||
1726 | /// </summary> | ||
1727 | /// <param name="table">The table to decompile.</param> | ||
1728 | private void DecompileComPlusSubscriptionTable(Table table) | ||
1729 | { | ||
1730 | foreach (Row row in table.Rows) | ||
1731 | { | ||
1732 | ComPlus.ComPlusSubscription subscription = new ComPlus.ComPlusSubscription(); | ||
1733 | |||
1734 | subscription.Id = (string)row[0]; | ||
1735 | subscription.Component = (string)row[1]; | ||
1736 | subscription.SubscriptionId = (string)row[3]; | ||
1737 | subscription.Name = (string)row[4]; | ||
1738 | subscription.EventCLSID = (string)row[5]; | ||
1739 | subscription.PublisherID = (string)row[6]; | ||
1740 | |||
1741 | Wix.Component component = (Wix.Component)this.Core.GetIndexedElement("Component", (string)row[2]); | ||
1742 | if (null != component) | ||
1743 | { | ||
1744 | component.AddChild(subscription); | ||
1745 | } | ||
1746 | else | ||
1747 | { | ||
1748 | this.Core.OnMessage(WixWarnings.ExpectedForeignRow(row.SourceLineNumbers, table.Name, row.GetPrimaryKey(DecompilerConstants.PrimaryKeyDelimiter), "Component_", (string)row[2], "Component")); | ||
1749 | } | ||
1750 | this.Core.IndexElement(row, subscription); | ||
1751 | } | ||
1752 | } | ||
1753 | |||
1754 | /// <summary> | ||
1755 | /// Decompile the ComPlusSubscriptionProperty table. | ||
1756 | /// </summary> | ||
1757 | /// <param name="table">The table to decompile.</param> | ||
1758 | private void DecompileComPlusSubscriptionPropertyTable(Table table) | ||
1759 | { | ||
1760 | foreach (Row row in table.Rows) | ||
1761 | { | ||
1762 | ComPlus.ComPlusSubscription subscription = (ComPlus.ComPlusSubscription)this.Core.GetIndexedElement("ComPlusSubscription", (string)row[0]); | ||
1763 | if (null == subscription) | ||
1764 | { | ||
1765 | this.Core.OnMessage(WixWarnings.ExpectedForeignRow(row.SourceLineNumbers, table.Name, row.GetPrimaryKey(DecompilerConstants.PrimaryKeyDelimiter), "Subscription_", (string)row[0], "ComPlusSubscription")); | ||
1766 | } | ||
1767 | |||
1768 | switch ((string)row[1]) | ||
1769 | { | ||
1770 | case "Description": | ||
1771 | subscription.Description = (string)row[2]; | ||
1772 | break; | ||
1773 | case "Enabled": | ||
1774 | switch ((string)row[2]) | ||
1775 | { | ||
1776 | case "1": | ||
1777 | subscription.Enabled = ComPlus.YesNoType.yes; | ||
1778 | break; | ||
1779 | case "0": | ||
1780 | subscription.Enabled = ComPlus.YesNoType.no; | ||
1781 | break; | ||
1782 | default: | ||
1783 | // TODO: Warning | ||
1784 | break; | ||
1785 | } | ||
1786 | break; | ||
1787 | case "EventClassPartitionID": | ||
1788 | subscription.EventClassPartitionID = (string)row[2]; | ||
1789 | break; | ||
1790 | case "FilterCriteria": | ||
1791 | subscription.FilterCriteria = (string)row[2]; | ||
1792 | break; | ||
1793 | case "InterfaceID": | ||
1794 | subscription.InterfaceID = (string)row[2]; | ||
1795 | break; | ||
1796 | case "MachineName": | ||
1797 | subscription.MachineName = (string)row[2]; | ||
1798 | break; | ||
1799 | case "MethodName": | ||
1800 | subscription.MethodName = (string)row[2]; | ||
1801 | break; | ||
1802 | case "PerUser": | ||
1803 | switch ((string)row[2]) | ||
1804 | { | ||
1805 | case "1": | ||
1806 | subscription.PerUser = ComPlus.YesNoType.yes; | ||
1807 | break; | ||
1808 | case "0": | ||
1809 | subscription.PerUser = ComPlus.YesNoType.no; | ||
1810 | break; | ||
1811 | default: | ||
1812 | // TODO: Warning | ||
1813 | break; | ||
1814 | } | ||
1815 | break; | ||
1816 | case "Queued": | ||
1817 | switch ((string)row[2]) | ||
1818 | { | ||
1819 | case "1": | ||
1820 | subscription.Queued = ComPlus.YesNoType.yes; | ||
1821 | break; | ||
1822 | case "0": | ||
1823 | subscription.Queued = ComPlus.YesNoType.no; | ||
1824 | break; | ||
1825 | default: | ||
1826 | // TODO: Warning | ||
1827 | break; | ||
1828 | } | ||
1829 | break; | ||
1830 | case "SubscriberMoniker": | ||
1831 | subscription.SubscriberMoniker = (string)row[2]; | ||
1832 | break; | ||
1833 | case "UserName": | ||
1834 | subscription.UserName = (string)row[2]; | ||
1835 | break; | ||
1836 | default: | ||
1837 | // TODO: Warning | ||
1838 | break; | ||
1839 | } | ||
1840 | } | ||
1841 | } | ||
1842 | } | ||
1843 | } | ||
diff --git a/src/wixext/ComPlusExtensionData.cs b/src/wixext/ComPlusExtensionData.cs new file mode 100644 index 00000000..cedc2474 --- /dev/null +++ b/src/wixext/ComPlusExtensionData.cs | |||
@@ -0,0 +1,64 @@ | |||
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 WixToolset.Extensions | ||
4 | { | ||
5 | using System; | ||
6 | using System.Reflection; | ||
7 | using WixToolset.Data; | ||
8 | using WixToolset.Extensibility; | ||
9 | |||
10 | /// <summary> | ||
11 | /// The WiX Toolset COM+ Extension. | ||
12 | /// </summary> | ||
13 | public sealed class ComPlusExtensionData : ExtensionData | ||
14 | { | ||
15 | /// <summary> | ||
16 | /// Gets the default culture. | ||
17 | /// </summary> | ||
18 | /// <value>The default culture.</value> | ||
19 | public override string DefaultCulture | ||
20 | { | ||
21 | get { return "en-us"; } | ||
22 | } | ||
23 | |||
24 | /// <summary> | ||
25 | /// Gets the optional table definitions for this extension. | ||
26 | /// </summary> | ||
27 | /// <value>The optional table definitions for this extension.</value> | ||
28 | public override TableDefinitionCollection TableDefinitions | ||
29 | { | ||
30 | get | ||
31 | { | ||
32 | return ComPlusExtensionData.GetExtensionTableDefinitions(); | ||
33 | } | ||
34 | } | ||
35 | |||
36 | /// <summary> | ||
37 | /// Gets the library associated with this extension. | ||
38 | /// </summary> | ||
39 | /// <param name="tableDefinitions">The table definitions to use while loading the library.</param> | ||
40 | /// <returns>The loaded library.</returns> | ||
41 | public override Library GetLibrary(TableDefinitionCollection tableDefinitions) | ||
42 | { | ||
43 | return ComPlusExtensionData.GetExtensionLibrary(tableDefinitions); | ||
44 | } | ||
45 | |||
46 | /// <summary> | ||
47 | /// Internal mechanism to access the extension's table definitions. | ||
48 | /// </summary> | ||
49 | /// <returns>Extension's table definitions.</returns> | ||
50 | internal static TableDefinitionCollection GetExtensionTableDefinitions() | ||
51 | { | ||
52 | return ExtensionData.LoadTableDefinitionHelper(Assembly.GetExecutingAssembly(), "WixToolset.Extensions.Data.tables.xml"); | ||
53 | } | ||
54 | |||
55 | /// <summary> | ||
56 | /// Internal mechanism to access the extension's library. | ||
57 | /// </summary> | ||
58 | /// <returns>Extension's library.</returns> | ||
59 | internal static Library GetExtensionLibrary(TableDefinitionCollection tableDefinitions) | ||
60 | { | ||
61 | return ExtensionData.LoadLibraryHelper(Assembly.GetExecutingAssembly(), "WixToolset.Extensions.Data.complus.wixlib", tableDefinitions); | ||
62 | } | ||
63 | } | ||
64 | } | ||
diff --git a/src/wixext/WixComPlusExtension.csproj b/src/wixext/WixComPlusExtension.csproj new file mode 100644 index 00000000..92cbacae --- /dev/null +++ b/src/wixext/WixComPlusExtension.csproj | |||
@@ -0,0 +1,50 @@ | |||
1 | <?xml version="1.0" encoding="utf-8"?> | ||
2 | <!-- 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. --> | ||
3 | |||
4 | |||
5 | <Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="4.0"> | ||
6 | <PropertyGroup> | ||
7 | <ProjectGuid>{1497B777-330B-4CFE-927A-22850CD24D64}</ProjectGuid> | ||
8 | <AssemblyName>WixComPlusExtension</AssemblyName> | ||
9 | <OutputType>Library</OutputType> | ||
10 | <RootNamespace>WixToolset.Extensions</RootNamespace> | ||
11 | </PropertyGroup> | ||
12 | <ItemGroup> | ||
13 | <Compile Include="AssemblyInfo.cs" /> | ||
14 | <Compile Include="ComPlusCompiler.cs" /> | ||
15 | <Compile Include="ComPlusDecompiler.cs" /> | ||
16 | <Compile Include="ComPlusExtensionData.cs" /> | ||
17 | <MsgGenSource Include="Data\messages.xml"> | ||
18 | <ResourcesLogicalName>$(RootNamespace).Data.Messages.resources</ResourcesLogicalName> | ||
19 | </MsgGenSource> | ||
20 | <EmbeddedFlattenedResource Include="Data\tables.xml"> | ||
21 | <LogicalName>$(RootNamespace).Data.tables.xml</LogicalName> | ||
22 | </EmbeddedFlattenedResource> | ||
23 | <EmbeddedFlattenedResource Include="Xsd\complus.xsd"> | ||
24 | <LogicalName>$(RootNamespace).Xsd.complus.xsd</LogicalName> | ||
25 | </EmbeddedFlattenedResource> | ||
26 | <XsdGenSource Include="Xsd\complus.xsd"> | ||
27 | <CommonNamespace>WixToolset.Data.Serialize</CommonNamespace> | ||
28 | <Namespace>WixToolset.Extensions.Serialize.ComPlus</Namespace> | ||
29 | </XsdGenSource> | ||
30 | <None Include="Xsd\complus.xsd"> | ||
31 | <Link>complus.xsd</Link> | ||
32 | <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> | ||
33 | </None> | ||
34 | <EmbeddedResource Include="$(OutputPath)\complus.wixlib"> | ||
35 | <Link>Data\complus.wixlib</Link> | ||
36 | </EmbeddedResource> | ||
37 | </ItemGroup> | ||
38 | <ItemGroup> | ||
39 | <Reference Include="System" /> | ||
40 | <Reference Include="System.Xml" /> | ||
41 | <Reference Include="System.Xml.Linq" /> | ||
42 | <ProjectReference Include="..\..\..\libs\WixToolset.Data\WixToolset.Data.csproj" /> | ||
43 | <ProjectReference Include="..\..\..\libs\WixToolset.Extensibility\WixToolset.Extensibility.csproj" /> | ||
44 | <ProjectReference Include="..\..\..\tools\wix\Wix.csproj" /> | ||
45 | <ProjectReference Include="..\wixlib\ComPlusExtension.wixproj"> | ||
46 | <ReferenceOutputAssembly>false</ReferenceOutputAssembly> | ||
47 | </ProjectReference> | ||
48 | </ItemGroup> | ||
49 | <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildProjectDirectory), wix.proj))\tools\WixBuild.targets" /> | ||
50 | </Project> | ||
diff --git a/src/wixext/complus.xsd b/src/wixext/complus.xsd new file mode 100644 index 00000000..f7ddacc6 --- /dev/null +++ b/src/wixext/complus.xsd | |||
@@ -0,0 +1,944 @@ | |||
1 | <?xml version="1.0" encoding="utf-8"?> | ||
2 | <!-- 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. --> | ||
3 | |||
4 | |||
5 | <xs:schema xmlns:html="http://www.w3.org/1999/xhtml" | ||
6 | xmlns:wix="http://wixtoolset.org/schemas/v4/wxs" | ||
7 | xmlns:xs="http://www.w3.org/2001/XMLSchema" | ||
8 | xmlns:xse=" http://wixtoolset.org/schemas/XmlSchemaExtension" | ||
9 | targetNamespace="http://wixtoolset.org/schemas/v4/wxs/complus" | ||
10 | xmlns="http://wixtoolset.org/schemas/v4/wxs/complus"> | ||
11 | <xs:annotation> | ||
12 | <xs:documentation> | ||
13 | The source code schema for the WiX Toolset COM+ Extension. | ||
14 | </xs:documentation> | ||
15 | </xs:annotation> | ||
16 | |||
17 | <xs:import namespace="http://wixtoolset.org/schemas/v4/wxs" /> | ||
18 | |||
19 | <xs:element name="ComPlusPartition"> | ||
20 | <xs:annotation> | ||
21 | <xs:appinfo> | ||
22 | <xse:parent namespace="http://wixtoolset.org/schemas/v4/wxs" ref="Component" /> | ||
23 | <xse:parent namespace="http://wixtoolset.org/schemas/v4/wxs" ref="Fragment" /> | ||
24 | <xse:parent namespace="http://wixtoolset.org/schemas/v4/wxs" ref="Module" /> | ||
25 | <xse:parent namespace="http://wixtoolset.org/schemas/v4/wxs" ref="Product" /> | ||
26 | </xs:appinfo> | ||
27 | <xs:documentation> | ||
28 | Defines a COM+ partition. If this element is a child of a | ||
29 | Component element, the partition will be created in association with this | ||
30 | component. If the element is a child of any of the Fragment, Module or Product | ||
31 | elements it is considered to be a locater, referencing an existing partition. | ||
32 | </xs:documentation> | ||
33 | </xs:annotation> | ||
34 | <xs:complexType> | ||
35 | <xs:sequence> | ||
36 | <xs:choice minOccurs="0" maxOccurs="unbounded"> | ||
37 | <xs:element ref="ComPlusPartitionRole" /> | ||
38 | <xs:element ref="ComPlusPartitionUser" /> | ||
39 | <xs:element ref="ComPlusApplication" /> | ||
40 | </xs:choice> | ||
41 | </xs:sequence> | ||
42 | <xs:attribute name="Id" use="required" type="xs:string"> | ||
43 | <xs:annotation><xs:documentation> | ||
44 | Identifier for the element. | ||
45 | </xs:documentation></xs:annotation> | ||
46 | </xs:attribute> | ||
47 | <xs:attribute name="PartitionId" use="optional" type="xs:string"> | ||
48 | <xs:annotation><xs:documentation> | ||
49 | Id for the partition. This attribute can be omitted, in | ||
50 | which case an id will be generated on install. If the element is a locater, | ||
51 | this attribute can be omitted if a value is provided for the Name attribute. | ||
52 | </xs:documentation></xs:annotation> | ||
53 | </xs:attribute> | ||
54 | <xs:attribute name="Name" use="optional" type="xs:string"> | ||
55 | <xs:annotation><xs:documentation> | ||
56 | Name of the partition. This attribute can be omitted if | ||
57 | the element is a locater, and a value is provided for the PartitionId | ||
58 | attribute. | ||
59 | </xs:documentation></xs:annotation> | ||
60 | </xs:attribute> | ||
61 | <xs:attribute name="Changeable" use="optional" type="YesNoType" /> | ||
62 | <xs:attribute name="Deleteable" use="optional" type="YesNoType" /> | ||
63 | <xs:attribute name="Description" use="optional" type="xs:string" /> | ||
64 | </xs:complexType> | ||
65 | </xs:element> | ||
66 | |||
67 | <xs:element name="ComPlusPartitionRole"> | ||
68 | <xs:annotation> | ||
69 | <xs:appinfo> | ||
70 | <xse:parent namespace="http://wixtoolset.org/schemas/v4/wxs" ref="Component" /> | ||
71 | <xse:parent namespace="http://wixtoolset.org/schemas/v4/wxs" ref="Fragment" /> | ||
72 | <xse:parent namespace="http://wixtoolset.org/schemas/v4/wxs" ref="Module" /> | ||
73 | <xse:parent namespace="http://wixtoolset.org/schemas/v4/wxs" ref="Product" /> | ||
74 | </xs:appinfo> | ||
75 | <xs:documentation> | ||
76 | Defines a COM+ partition role. Partition roles can not be | ||
77 | created; this element can only be used as a locater to reference an existing | ||
78 | role. | ||
79 | </xs:documentation> | ||
80 | </xs:annotation> | ||
81 | <xs:complexType> | ||
82 | <xs:sequence> | ||
83 | <xs:choice minOccurs="0" maxOccurs="unbounded"> | ||
84 | <xs:element ref="ComPlusUserInPartitionRole" /> | ||
85 | <xs:element ref="ComPlusGroupInPartitionRole" /> | ||
86 | </xs:choice> | ||
87 | </xs:sequence> | ||
88 | <xs:attribute name="Id" use="required" type="xs:string"> | ||
89 | <xs:annotation><xs:documentation> | ||
90 | Identifier for the element. | ||
91 | </xs:documentation></xs:annotation> | ||
92 | </xs:attribute> | ||
93 | <xs:attribute name="Partition" use="optional" type="xs:string"> | ||
94 | <xs:annotation><xs:documentation> | ||
95 | The id of a ComPlusPartition element representing the partition | ||
96 | the role belongs to. | ||
97 | </xs:documentation></xs:annotation> | ||
98 | </xs:attribute> | ||
99 | <xs:attribute name="Name" use="required" type="xs:string"> | ||
100 | <xs:annotation><xs:documentation> | ||
101 | Name of the partition role. | ||
102 | </xs:documentation></xs:annotation> | ||
103 | </xs:attribute> | ||
104 | </xs:complexType> | ||
105 | </xs:element> | ||
106 | |||
107 | <xs:element name="ComPlusUserInPartitionRole"> | ||
108 | <xs:annotation> | ||
109 | <xs:appinfo> | ||
110 | <xse:parent namespace="http://wixtoolset.org/schemas/v4/wxs" ref="Component" /> | ||
111 | </xs:appinfo> | ||
112 | <xs:documentation> | ||
113 | This element represents a user membership in a partition | ||
114 | role. When the parent component of this element is installed, the user will be | ||
115 | added to the associated partition role. | ||
116 | </xs:documentation> | ||
117 | </xs:annotation> | ||
118 | <xs:complexType> | ||
119 | <xs:attribute name="Id" use="required" type="xs:string"> | ||
120 | <xs:annotation><xs:documentation> | ||
121 | Identifier for the element. | ||
122 | </xs:documentation></xs:annotation> | ||
123 | </xs:attribute> | ||
124 | <xs:attribute name="PartitionRole" use="optional" type="xs:string"> | ||
125 | <xs:annotation><xs:documentation> | ||
126 | The id of a ComPlusPartitionRole element representing the | ||
127 | partition the user should be added to. | ||
128 | </xs:documentation></xs:annotation> | ||
129 | </xs:attribute> | ||
130 | <xs:attribute name="User" use="required" type="xs:string"> | ||
131 | <xs:annotation><xs:documentation> | ||
132 | Foreign key into the User table. | ||
133 | </xs:documentation></xs:annotation> | ||
134 | </xs:attribute> | ||
135 | </xs:complexType> | ||
136 | </xs:element> | ||
137 | |||
138 | <xs:element name="ComPlusGroupInPartitionRole"> | ||
139 | <xs:annotation> | ||
140 | <xs:appinfo> | ||
141 | <xse:parent namespace="http://wixtoolset.org/schemas/v4/wxs" ref="Component" /> | ||
142 | </xs:appinfo> | ||
143 | <xs:documentation> | ||
144 | This element represents a security group membership in a | ||
145 | partition role. When the parent component of this element is installed, the | ||
146 | security group will be added to the associated partition role. | ||
147 | </xs:documentation> | ||
148 | </xs:annotation> | ||
149 | <xs:complexType> | ||
150 | <xs:attribute name="Id" use="required" type="xs:string"> | ||
151 | <xs:annotation><xs:documentation> | ||
152 | Identifier for the element. | ||
153 | </xs:documentation></xs:annotation> | ||
154 | </xs:attribute> | ||
155 | <xs:attribute name="PartitionRole" use="optional" type="xs:string"> | ||
156 | <xs:annotation><xs:documentation> | ||
157 | The id of a ComPlusPartitionRole element representing the | ||
158 | partition the user should be added to. | ||
159 | </xs:documentation></xs:annotation> | ||
160 | </xs:attribute> | ||
161 | <xs:attribute name="Group" use="required" type="xs:string"> | ||
162 | <xs:annotation><xs:documentation> | ||
163 | Foreign key into the Group table. | ||
164 | </xs:documentation></xs:annotation> | ||
165 | </xs:attribute> | ||
166 | </xs:complexType> | ||
167 | </xs:element> | ||
168 | |||
169 | <xs:element name="ComPlusPartitionUser"> | ||
170 | <xs:annotation> | ||
171 | <xs:appinfo> | ||
172 | <xse:parent namespace="http://wixtoolset.org/schemas/v4/wxs" ref="Component" /> | ||
173 | </xs:appinfo> | ||
174 | <xs:documentation> | ||
175 | Represents a default partition definition for a user. When | ||
176 | the parent component of this element is installed, the default partition of the | ||
177 | user will be set to the referenced partition. | ||
178 | </xs:documentation> | ||
179 | </xs:annotation> | ||
180 | <xs:complexType> | ||
181 | <xs:attribute name="Id" use="required" type="xs:string"> | ||
182 | <xs:annotation><xs:documentation> | ||
183 | Identifier for the element. | ||
184 | </xs:documentation></xs:annotation> | ||
185 | </xs:attribute> | ||
186 | <xs:attribute name="Partition" use="optional" type="xs:string"> | ||
187 | <xs:annotation><xs:documentation> | ||
188 | The id of a ComPlusPartition element representing the | ||
189 | partition that will be the default partition for the user. | ||
190 | </xs:documentation></xs:annotation> | ||
191 | </xs:attribute> | ||
192 | <xs:attribute name="User" use="required" type="xs:string"> | ||
193 | <xs:annotation><xs:documentation> | ||
194 | Foreign key into the User table. | ||
195 | </xs:documentation></xs:annotation> | ||
196 | </xs:attribute> | ||
197 | </xs:complexType> | ||
198 | </xs:element> | ||
199 | |||
200 | <xs:element name="ComPlusApplication"> | ||
201 | <xs:annotation> | ||
202 | <xs:appinfo> | ||
203 | <xse:parent namespace="http://wixtoolset.org/schemas/v4/wxs" ref="Component" /> | ||
204 | <xse:parent namespace="http://wixtoolset.org/schemas/v4/wxs" ref="Fragment" /> | ||
205 | <xse:parent namespace="http://wixtoolset.org/schemas/v4/wxs" ref="Module" /> | ||
206 | <xse:parent namespace="http://wixtoolset.org/schemas/v4/wxs" ref="Product" /> | ||
207 | </xs:appinfo> | ||
208 | <xs:documentation> | ||
209 | Defines a COM+ application. If this element is a descendent | ||
210 | of a Component element, the application will be created in association with | ||
211 | this component. If the element is a child of any of the Fragment, Module or | ||
212 | Product elements it is considered to be a locater, referencing an existing | ||
213 | application. | ||
214 | |||
215 | If the element is a child of a ComPlusPartition element, | ||
216 | or have its Partition attribute set, the application will be installed under | ||
217 | the referenced partition. | ||
218 | </xs:documentation> | ||
219 | </xs:annotation> | ||
220 | <xs:complexType> | ||
221 | <xs:sequence> | ||
222 | <xs:choice minOccurs="0" maxOccurs="unbounded"> | ||
223 | <xs:element ref="ComPlusApplicationRole" /> | ||
224 | <xs:element ref="ComPlusAssembly" /> | ||
225 | </xs:choice> | ||
226 | </xs:sequence> | ||
227 | <xs:attribute name="Id" use="required" type="xs:string"> | ||
228 | <xs:annotation><xs:documentation> | ||
229 | Identifier for the element. | ||
230 | </xs:documentation></xs:annotation> | ||
231 | </xs:attribute> | ||
232 | <xs:attribute name="Partition" use="optional" type="xs:string"> | ||
233 | <xs:annotation><xs:documentation> | ||
234 | If the element is not a child of a ComPlusPartition | ||
235 | element, this attribute can be provided with the id of a ComPlusPartition | ||
236 | element representing the partition the application belongs to. | ||
237 | </xs:documentation></xs:annotation> | ||
238 | </xs:attribute> | ||
239 | <xs:attribute name="ApplicationId" use="optional" type="xs:string"> | ||
240 | <xs:annotation><xs:documentation> | ||
241 | Id for the application. This attribute can be omitted, in | ||
242 | which case an id will be generated on install. If the element is a locater, | ||
243 | this attribute can be omitted if a value is provided for the Name attribute. | ||
244 | </xs:documentation></xs:annotation> | ||
245 | </xs:attribute> | ||
246 | <xs:attribute name="Name" use="optional" type="xs:string"> | ||
247 | <xs:annotation><xs:documentation> | ||
248 | Name of the application. This attribute can be omitted if | ||
249 | the element is a locater, and a value is provided for the PartitionId | ||
250 | attribute. | ||
251 | </xs:documentation></xs:annotation> | ||
252 | </xs:attribute> | ||
253 | <xs:attribute name="ThreeGigSupportEnabled" use="optional" type="YesNoType" /> | ||
254 | <xs:attribute name="AccessChecksLevel" use="optional"> | ||
255 | <xs:simpleType> | ||
256 | <xs:restriction base="xs:NMTOKEN"> | ||
257 | <xs:enumeration value="applicationLevel" /> | ||
258 | <xs:enumeration value="applicationComponentLevel" /> | ||
259 | </xs:restriction> | ||
260 | </xs:simpleType> | ||
261 | </xs:attribute> | ||
262 | <xs:attribute name="Activation" use="optional"> | ||
263 | <xs:simpleType> | ||
264 | <xs:restriction base="xs:NMTOKEN"> | ||
265 | <xs:enumeration value="inproc" /> | ||
266 | <xs:enumeration value="local" /> | ||
267 | </xs:restriction> | ||
268 | </xs:simpleType> | ||
269 | </xs:attribute> | ||
270 | <xs:attribute name="ApplicationAccessChecksEnabled" use="optional" type="YesNoType" /> | ||
271 | <xs:attribute name="ApplicationDirectory" use="optional" type="xs:string" /> | ||
272 | <xs:attribute name="Authentication" use="optional"> | ||
273 | <xs:simpleType> | ||
274 | <xs:restriction base="xs:NMTOKEN"> | ||
275 | <xs:enumeration value="default" /> | ||
276 | <xs:enumeration value="none" /> | ||
277 | <xs:enumeration value="connect" /> | ||
278 | <xs:enumeration value="call" /> | ||
279 | <xs:enumeration value="packet" /> | ||
280 | <xs:enumeration value="integrity" /> | ||
281 | <xs:enumeration value="privacy" /> | ||
282 | </xs:restriction> | ||
283 | </xs:simpleType> | ||
284 | </xs:attribute> | ||
285 | <xs:attribute name="AuthenticationCapability" use="optional"> | ||
286 | <xs:simpleType> | ||
287 | <xs:restriction base="xs:NMTOKEN"> | ||
288 | <xs:enumeration value="none" /> | ||
289 | <xs:enumeration value="secureReference" /> | ||
290 | <xs:enumeration value="staticCloaking" /> | ||
291 | <xs:enumeration value="dynamicCloaking" /> | ||
292 | </xs:restriction> | ||
293 | </xs:simpleType> | ||
294 | </xs:attribute> | ||
295 | <xs:attribute name="Changeable" use="optional" type="YesNoType" /> | ||
296 | <xs:attribute name="CommandLine" use="optional" type="xs:string" /> | ||
297 | <xs:attribute name="ConcurrentApps" use="optional" type="xs:int" /> | ||
298 | <xs:attribute name="CreatedBy" use="optional" type="xs:string" /> | ||
299 | <xs:attribute name="CRMEnabled" use="optional" type="YesNoType" /> | ||
300 | <xs:attribute name="CRMLogFile" use="optional" type="xs:string" /> | ||
301 | <xs:attribute name="Deleteable" use="optional" type="YesNoType" /> | ||
302 | <xs:attribute name="Description" use="optional" type="xs:string" /> | ||
303 | <xs:attribute name="DumpEnabled" use="optional" type="YesNoType" /> | ||
304 | <xs:attribute name="DumpOnException" use="optional" type="YesNoType" /> | ||
305 | <xs:attribute name="DumpOnFailfast" use="optional" type="YesNoType" /> | ||
306 | <xs:attribute name="DumpPath" use="optional" type="xs:string" /> | ||
307 | <xs:attribute name="EventsEnabled" use="optional" type="YesNoType" /> | ||
308 | <xs:attribute name="Identity" use="optional" type="xs:string" /> | ||
309 | <xs:attribute name="ImpersonationLevel" use="optional"> | ||
310 | <xs:simpleType> | ||
311 | <xs:restriction base="xs:NMTOKEN"> | ||
312 | <xs:enumeration value="anonymous" /> | ||
313 | <xs:enumeration value="identify" /> | ||
314 | <xs:enumeration value="impersonate" /> | ||
315 | <xs:enumeration value="delegate" /> | ||
316 | </xs:restriction> | ||
317 | </xs:simpleType> | ||
318 | </xs:attribute> | ||
319 | <xs:attribute name="IsEnabled" use="optional" type="YesNoType" /> | ||
320 | <xs:attribute name="MaxDumpCount" use="optional" type="xs:int" /> | ||
321 | <xs:attribute name="Password" use="optional" type="xs:string" /> | ||
322 | <xs:attribute name="QCAuthenticateMsgs" use="optional"> | ||
323 | <xs:simpleType> | ||
324 | <xs:restriction base="xs:NMTOKEN"> | ||
325 | <xs:enumeration value="secureApps" /> | ||
326 | <xs:enumeration value="off" /> | ||
327 | <xs:enumeration value="on" /> | ||
328 | </xs:restriction> | ||
329 | </xs:simpleType> | ||
330 | </xs:attribute> | ||
331 | <xs:attribute name="QCListenerMaxThreads" use="optional" type="xs:int" /> | ||
332 | <xs:attribute name="QueueListenerEnabled" use="optional" type="YesNoType" /> | ||
333 | <xs:attribute name="QueuingEnabled" use="optional" type="YesNoType" /> | ||
334 | <xs:attribute name="RecycleActivationLimit" use="optional" type="xs:int" /> | ||
335 | <xs:attribute name="RecycleCallLimit" use="optional" type="xs:int" /> | ||
336 | <xs:attribute name="RecycleExpirationTimeout" use="optional" type="xs:int" /> | ||
337 | <xs:attribute name="RecycleLifetimeLimit" use="optional" type="xs:int" /> | ||
338 | <xs:attribute name="RecycleMemoryLimit" use="optional" type="xs:int" /> | ||
339 | <xs:attribute name="Replicable" use="optional" type="YesNoType" /> | ||
340 | <xs:attribute name="RunForever" use="optional" type="YesNoType" /> | ||
341 | <xs:attribute name="ShutdownAfter" use="optional" type="xs:int" /> | ||
342 | <xs:attribute name="SoapActivated" use="optional" type="YesNoType" /> | ||
343 | <xs:attribute name="SoapBaseUrl" use="optional" type="xs:string" /> | ||
344 | <xs:attribute name="SoapMailTo" use="optional" type="xs:string" /> | ||
345 | <xs:attribute name="SoapVRoot" use="optional" type="xs:string" /> | ||
346 | <xs:attribute name="SRPEnabled" use="optional" type="YesNoType" /> | ||
347 | <xs:attribute name="SRPTrustLevel" use="optional"> | ||
348 | <xs:simpleType> | ||
349 | <xs:restriction base="xs:NMTOKEN"> | ||
350 | <xs:enumeration value="disallowed" /> | ||
351 | <xs:enumeration value="fullyTrusted" /> | ||
352 | </xs:restriction> | ||
353 | </xs:simpleType> | ||
354 | </xs:attribute> | ||
355 | </xs:complexType> | ||
356 | </xs:element> | ||
357 | |||
358 | <xs:element name="ComPlusApplicationRole"> | ||
359 | <xs:annotation> | ||
360 | <xs:appinfo> | ||
361 | <xse:parent namespace="http://wixtoolset.org/schemas/v4/wxs" ref="Component" /> | ||
362 | <xse:parent namespace="http://wixtoolset.org/schemas/v4/wxs" ref="Fragment" /> | ||
363 | <xse:parent namespace="http://wixtoolset.org/schemas/v4/wxs" ref="Module" /> | ||
364 | <xse:parent namespace="http://wixtoolset.org/schemas/v4/wxs" ref="Product" /> | ||
365 | </xs:appinfo> | ||
366 | <xs:documentation> | ||
367 | Defines an application role. If this element is a descendent | ||
368 | of a Component element, the application role will be created in association | ||
369 | with this component. If the element is a child of any of the Fragment, Module | ||
370 | or Product elements it is considered to be a locater, referencing an existing | ||
371 | application role. | ||
372 | </xs:documentation> | ||
373 | </xs:annotation> | ||
374 | <xs:complexType> | ||
375 | <xs:sequence> | ||
376 | <xs:choice minOccurs="0" maxOccurs="unbounded"> | ||
377 | <xs:element ref="ComPlusUserInApplicationRole" /> | ||
378 | <xs:element ref="ComPlusGroupInApplicationRole" /> | ||
379 | </xs:choice> | ||
380 | </xs:sequence> | ||
381 | <xs:attribute name="Id" use="required" type="xs:string"> | ||
382 | <xs:annotation><xs:documentation> | ||
383 | Identifier for the element. | ||
384 | </xs:documentation></xs:annotation> | ||
385 | </xs:attribute> | ||
386 | <xs:attribute name="Application" use="optional" type="xs:string"> | ||
387 | <xs:annotation><xs:documentation> | ||
388 | If the element is not a child of a ComPlusApplication | ||
389 | element, this attribute should be provided with the id of a | ||
390 | ComPlusApplication element representing the application the role belongs to. | ||
391 | </xs:documentation></xs:annotation> | ||
392 | </xs:attribute> | ||
393 | <xs:attribute name="Name" use="required" type="xs:string"> | ||
394 | <xs:annotation><xs:documentation> | ||
395 | Name of the application role. | ||
396 | </xs:documentation></xs:annotation> | ||
397 | </xs:attribute> | ||
398 | <xs:attribute name="Description" use="optional" type="xs:string" /> | ||
399 | </xs:complexType> | ||
400 | </xs:element> | ||
401 | |||
402 | <xs:element name="ComPlusUserInApplicationRole"> | ||
403 | <xs:annotation> | ||
404 | <xs:appinfo> | ||
405 | <xse:parent namespace="http://wixtoolset.org/schemas/v4/wxs" ref="Component" /> | ||
406 | </xs:appinfo> | ||
407 | <xs:documentation> | ||
408 | This element represents a user membership in an | ||
409 | application role. When the parent component of this element is installed, the | ||
410 | user will be added to the associated application role. This element must be a descendent | ||
411 | of a Component element; it can not be a child of a ComPlusApplicationRole | ||
412 | locater element. To reference a locater element use the ApplicationRole | ||
413 | attribute. | ||
414 | </xs:documentation> | ||
415 | </xs:annotation> | ||
416 | <xs:complexType> | ||
417 | <xs:attribute name="Id" use="required" type="xs:string"> | ||
418 | <xs:annotation><xs:documentation> | ||
419 | Identifier for the element. | ||
420 | </xs:documentation></xs:annotation> | ||
421 | </xs:attribute> | ||
422 | <xs:attribute name="ApplicationRole" use="optional" type="xs:string"> | ||
423 | <xs:annotation><xs:documentation> | ||
424 | If the element is not a child of a ComPlusApplicationRole | ||
425 | element, this attribute should be provided with the id of a | ||
426 | ComPlusApplicationRole element representing the application role the user is | ||
427 | to be added to. | ||
428 | </xs:documentation></xs:annotation> | ||
429 | </xs:attribute> | ||
430 | <xs:attribute name="User" use="required" type="xs:string"> | ||
431 | <xs:annotation><xs:documentation> | ||
432 | Foreign key into the User table. | ||
433 | </xs:documentation></xs:annotation> | ||
434 | </xs:attribute> | ||
435 | </xs:complexType> | ||
436 | </xs:element> | ||
437 | |||
438 | <xs:element name="ComPlusGroupInApplicationRole"> | ||
439 | <xs:annotation> | ||
440 | <xs:appinfo> | ||
441 | <xse:parent namespace="http://wixtoolset.org/schemas/v4/wxs" ref="Component" /> | ||
442 | </xs:appinfo> | ||
443 | <xs:documentation> | ||
444 | This element represents a security group membership in an | ||
445 | application role. When the parent component of this element is installed, the | ||
446 | user will be added to the associated application role. This element must be a | ||
447 | descendent of a Component element; it can not be a child of a | ||
448 | ComPlusApplicationRole locater element. To reference a locater element use the | ||
449 | ApplicationRole attribute. | ||
450 | </xs:documentation> | ||
451 | </xs:annotation> | ||
452 | <xs:complexType> | ||
453 | <xs:attribute name="Id" use="required" type="xs:string"> | ||
454 | <xs:annotation><xs:documentation> | ||
455 | Identifier for the element. | ||
456 | </xs:documentation></xs:annotation> | ||
457 | </xs:attribute> | ||
458 | <xs:attribute name="ApplicationRole" use="optional" type="xs:string"> | ||
459 | <xs:annotation><xs:documentation> | ||
460 | If the element is not a child of a ComPlusApplicationRole | ||
461 | element, this attribute should be provided with the id of a | ||
462 | ComPlusApplicationRole element representing the application role the user is | ||
463 | to be added to. | ||
464 | </xs:documentation></xs:annotation> | ||
465 | </xs:attribute> | ||
466 | <xs:attribute name="Group" use="required" type="xs:string"> | ||
467 | <xs:annotation><xs:documentation> | ||
468 | Foreign key into the Group table. | ||
469 | </xs:documentation></xs:annotation> | ||
470 | </xs:attribute> | ||
471 | </xs:complexType> | ||
472 | </xs:element> | ||
473 | |||
474 | <xs:element name="ComPlusAssembly"> | ||
475 | <xs:annotation> | ||
476 | <xs:documentation> | ||
477 | Represents a DLL or assembly to be registered with COM+. If | ||
478 | this element is a child of a ComPlusApplication element, the assembly will be | ||
479 | registered in this application. Other ways the Application attribute must be | ||
480 | set to an application. The element must be a descendent of a Component element, | ||
481 | it can not be a child of a ComPlusApplication locator element. | ||
482 | </xs:documentation> | ||
483 | <xs:appinfo> | ||
484 | <xse:parent namespace="http://wixtoolset.org/schemas/v4/wxs" ref="Component" /> | ||
485 | <xse:remarks> | ||
486 | <html:p> | ||
487 | When installing a native assembly, all components | ||
488 | contained in the assembly must be represented as ComPlusComponent elements | ||
489 | under this element. Any component not listed will not be removed during | ||
490 | uninstall. | ||
491 | </html:p> | ||
492 | |||
493 | <html:p> | ||
494 | The fields DllPath, TlbPath and PSDllPath are formatted | ||
495 | fields that should contain file paths to there respective file types. A typical | ||
496 | value for DllPath for example, should be something like “[#MyAssembly_dll]”, | ||
497 | where “MyAssembly_dll” is the key of the dll file in the File table. | ||
498 | </html:p> | ||
499 | |||
500 | <html:p> | ||
501 | <html:b>Warning</html:b>: The assembly name provided in the AssemblyName | ||
502 | attribute must be a fully specified assembly name, if a partial name is | ||
503 | provided a random assembly matching the partial name will be selected. | ||
504 | </html:p> | ||
505 | </xse:remarks> | ||
506 | </xs:appinfo> | ||
507 | </xs:annotation> | ||
508 | <xs:complexType> | ||
509 | <xs:sequence> | ||
510 | <xs:choice minOccurs="0" maxOccurs="unbounded"> | ||
511 | <xs:element ref="ComPlusAssemblyDependency" /> | ||
512 | <xs:element ref="ComPlusComponent" /> | ||
513 | </xs:choice> | ||
514 | </xs:sequence> | ||
515 | <xs:attribute name="Id" use="required" type="xs:string"> | ||
516 | <xs:annotation><xs:documentation> | ||
517 | Identifier for the element. | ||
518 | </xs:documentation></xs:annotation> | ||
519 | </xs:attribute> | ||
520 | <xs:attribute name="Application" use="optional" type="xs:string"> | ||
521 | <xs:annotation><xs:documentation> | ||
522 | If the element is not a child of a ComPlusApplication | ||
523 | element, this attribute should be provided with the id of a ComPlusApplication | ||
524 | element representing the application the assembly is to be registered in. | ||
525 | This attribute can be omitted for a .NET assembly even if the application is | ||
526 | not a child of a ComPlusApplication element. | ||
527 | </xs:documentation></xs:annotation> | ||
528 | </xs:attribute> | ||
529 | <xs:attribute name="AssemblyName" use="optional" type="xs:string"> | ||
530 | <xs:annotation><xs:documentation> | ||
531 | The name of the assembly used to identify the assembly in | ||
532 | the GAC. This attribute can be provided only if DllPathFromGAC is set to | ||
533 | “yes”. | ||
534 | </xs:documentation></xs:annotation> | ||
535 | </xs:attribute> | ||
536 | <xs:attribute name="DllPath" use="optional" type="xs:string"> | ||
537 | <xs:annotation><xs:documentation> | ||
538 | The path to locate the assembly DLL during registration. | ||
539 | This attribute should be provided if DllPathFromGAC is not set to “yes”. | ||
540 | </xs:documentation></xs:annotation> | ||
541 | </xs:attribute> | ||
542 | <xs:attribute name="TlbPath" use="optional" type="xs:string"> | ||
543 | <xs:annotation><xs:documentation> | ||
544 | An optional path to an external type lib for the assembly. | ||
545 | This attribute must be provided if the Type attribute is set to “.net”. | ||
546 | </xs:documentation></xs:annotation> | ||
547 | </xs:attribute> | ||
548 | <xs:attribute name="PSDllPath" use="optional" type="xs:string"> | ||
549 | <xs:annotation><xs:documentation> | ||
550 | An optional path to an external proxy/stub DLL for the assembly. | ||
551 | </xs:documentation></xs:annotation> | ||
552 | </xs:attribute> | ||
553 | <xs:attribute name="Type" use="required"> | ||
554 | <xs:annotation><xs:documentation> | ||
555 | </xs:documentation></xs:annotation> | ||
556 | <xs:simpleType> | ||
557 | <xs:restriction base="xs:NMTOKEN"> | ||
558 | <xs:enumeration value="native" /> | ||
559 | <xs:enumeration value=".net" /> | ||
560 | </xs:restriction> | ||
561 | </xs:simpleType> | ||
562 | </xs:attribute> | ||
563 | <xs:attribute name="EventClass" use="optional" type="YesNoType"> | ||
564 | <xs:annotation><xs:documentation> | ||
565 | Indicates that the assembly is to be installed as an event | ||
566 | class DLL. This attribute is only valid for native assemblies. The assembly | ||
567 | will be installed with the COM+ catalog’s InstallEventClass() function. | ||
568 | </xs:documentation></xs:annotation> | ||
569 | </xs:attribute> | ||
570 | <xs:attribute name="DllPathFromGAC" use="optional" type="YesNoType"> | ||
571 | <xs:annotation><xs:documentation> | ||
572 | Indicates that the DLL path should be extracted from the | ||
573 | GAC instead for being provided in the DllPath attribute. If this attribute is | ||
574 | set to “yes”, the name of the assembly can be provided using the AssemblyName | ||
575 | attribute. Or, if this AssemblyName attribute is missing, the name will be | ||
576 | extracted from the MsiAssemblyName table using the id of the parent Component | ||
577 | element. | ||
578 | </xs:documentation></xs:annotation> | ||
579 | </xs:attribute> | ||
580 | <xs:attribute name="RegisterInCommit" use="optional" type="YesNoType"> | ||
581 | <xs:annotation><xs:documentation> | ||
582 | Indicates that the assembly should be installed in the | ||
583 | commit custom action instead of the normal deferred custom action. This is | ||
584 | necessary when installing .NET assemblies to the GAC in the same | ||
585 | installation, as the assemblies are not visible in the GAC until after the | ||
586 | InstallFinalize action has run. | ||
587 | </xs:documentation></xs:annotation> | ||
588 | </xs:attribute> | ||
589 | </xs:complexType> | ||
590 | </xs:element> | ||
591 | |||
592 | <xs:element name="ComPlusAssemblyDependency"> | ||
593 | <xs:annotation> | ||
594 | <xs:documentation> | ||
595 | Defines a dependency between two assemblies. This element | ||
596 | affects the order in which assembles are registered. Any assemblies referenced | ||
597 | by this element are guarantied to be registered before, and unregistered after, | ||
598 | the assembly referenced by the parent ComPlusAssembly element. | ||
599 | </xs:documentation> | ||
600 | <xs:appinfo> | ||
601 | <xse:remarks> | ||
602 | It is only necessary to explicitly specify dependencies between | ||
603 | assemblies contained in the same package (MSI or MSM). Assemblies merged in to a | ||
604 | package from a merge module will always be installed before any assemblies | ||
605 | specified in the base package. Assemblies merged in from different merge | ||
606 | modules are sequenced using the ModuleDependency MSI table. It is not possible | ||
607 | to have cross dependencies between merge modules or have an assembly in a merge | ||
608 | module depend on an assembly in the base package. | ||
609 | </xse:remarks> | ||
610 | </xs:appinfo> | ||
611 | </xs:annotation> | ||
612 | <xs:complexType> | ||
613 | <xs:attribute name="RequiredAssembly" use="required" type="xs:string"> | ||
614 | <xs:annotation><xs:documentation> | ||
615 | Reference to the id of the assembly required by the parent | ||
616 | ComPlusAssembly element. | ||
617 | </xs:documentation></xs:annotation> | ||
618 | </xs:attribute> | ||
619 | </xs:complexType> | ||
620 | </xs:element> | ||
621 | |||
622 | <xs:element name="ComPlusComponent"> | ||
623 | <xs:annotation><xs:documentation> | ||
624 | Represents a COM+ component in an assembly. | ||
625 | </xs:documentation></xs:annotation> | ||
626 | <xs:complexType> | ||
627 | <xs:sequence> | ||
628 | <xs:choice minOccurs="0" maxOccurs="unbounded"> | ||
629 | <xs:element ref="ComPlusRoleForComponent" /> | ||
630 | <xs:element ref="ComPlusInterface" /> | ||
631 | <xs:element ref="ComPlusSubscription" /> | ||
632 | </xs:choice> | ||
633 | </xs:sequence> | ||
634 | <xs:attribute name="Id" use="required" type="xs:string"> | ||
635 | <xs:annotation><xs:documentation> | ||
636 | Identifier for the element. | ||
637 | </xs:documentation></xs:annotation> | ||
638 | </xs:attribute> | ||
639 | <xs:attribute name="CLSID" use="required" type="uuid"> | ||
640 | <xs:annotation><xs:documentation> | ||
641 | CLSID of the component. | ||
642 | </xs:documentation></xs:annotation> | ||
643 | </xs:attribute> | ||
644 | <xs:attribute name="AllowInprocSubscribers" use="optional" type="YesNoType" /> | ||
645 | <xs:attribute name="ComponentAccessChecksEnabled" use="optional" type="YesNoType" /> | ||
646 | <xs:attribute name="ComponentTransactionTimeout" use="optional" type="xs:int" /> | ||
647 | <xs:attribute name="ComponentTransactionTimeoutEnabled" use="optional" type="YesNoType" /> | ||
648 | <xs:attribute name="COMTIIntrinsics" use="optional" type="YesNoType" /> | ||
649 | <xs:attribute name="ConstructionEnabled" use="optional" type="YesNoType" /> | ||
650 | <xs:attribute name="ConstructorString" use="optional" type="xs:string" /> | ||
651 | <xs:attribute name="CreationTimeout" use="optional" type="xs:int" /> | ||
652 | <xs:attribute name="Description" use="optional" type="xs:string" /> | ||
653 | <xs:attribute name="EventTrackingEnabled" use="optional" type="YesNoType" /> | ||
654 | <xs:attribute name="ExceptionClass" use="optional" type="xs:string" /> | ||
655 | <xs:attribute name="FireInParallel" use="optional" type="YesNoType" /> | ||
656 | <xs:attribute name="IISIntrinsics" use="optional" type="YesNoType" /> | ||
657 | <xs:attribute name="InitializesServerApplication" use="optional" type="YesNoType" /> | ||
658 | <xs:attribute name="IsEnabled" use="optional" type="YesNoType" /> | ||
659 | <xs:attribute name="IsPrivateComponent" use="optional" type="YesNoType" /> | ||
660 | <xs:attribute name="JustInTimeActivation" use="optional" type="YesNoType" /> | ||
661 | <xs:attribute name="LoadBalancingSupported" use="optional" type="YesNoType" /> | ||
662 | <xs:attribute name="MaxPoolSize" use="optional" type="xs:int" /> | ||
663 | <xs:attribute name="MinPoolSize" use="optional" type="xs:int" /> | ||
664 | <xs:attribute name="MultiInterfacePublisherFilterCLSID" use="optional" type="xs:string" /> | ||
665 | <xs:attribute name="MustRunInClientContext" use="optional" type="YesNoType" /> | ||
666 | <xs:attribute name="MustRunInDefaultContext" use="optional" type="YesNoType" /> | ||
667 | <xs:attribute name="ObjectPoolingEnabled" use="optional" type="YesNoType" /> | ||
668 | <xs:attribute name="PublisherID" use="optional" type="xs:string" /> | ||
669 | <xs:attribute name="SoapAssemblyName" use="optional" type="xs:string" /> | ||
670 | <xs:attribute name="SoapTypeName" use="optional" type="xs:string" /> | ||
671 | <xs:attribute name="Synchronization" use="optional"> | ||
672 | <xs:simpleType> | ||
673 | <xs:restriction base="xs:NMTOKEN"> | ||
674 | <xs:enumeration value="ignored" /> | ||
675 | <xs:enumeration value="none" /> | ||
676 | <xs:enumeration value="supported" /> | ||
677 | <xs:enumeration value="required" /> | ||
678 | <xs:enumeration value="requiresNew" /> | ||
679 | </xs:restriction> | ||
680 | </xs:simpleType> | ||
681 | </xs:attribute> | ||
682 | <xs:attribute name="Transaction" use="optional"> | ||
683 | <xs:simpleType> | ||
684 | <xs:restriction base="xs:NMTOKEN"> | ||
685 | <xs:enumeration value="ignored" /> | ||
686 | <xs:enumeration value="none" /> | ||
687 | <xs:enumeration value="supported" /> | ||
688 | <xs:enumeration value="required" /> | ||
689 | <xs:enumeration value="requiresNew" /> | ||
690 | </xs:restriction> | ||
691 | </xs:simpleType> | ||
692 | </xs:attribute> | ||
693 | <xs:attribute name="TxIsolationLevel" use="optional"> | ||
694 | <xs:simpleType> | ||
695 | <xs:restriction base="xs:NMTOKEN"> | ||
696 | <xs:enumeration value="any" /> | ||
697 | <xs:enumeration value="readUnCommitted" /> | ||
698 | <xs:enumeration value="readCommitted" /> | ||
699 | <xs:enumeration value="repeatableRead" /> | ||
700 | <xs:enumeration value="serializable" /> | ||
701 | </xs:restriction> | ||
702 | </xs:simpleType> | ||
703 | </xs:attribute> | ||
704 | </xs:complexType> | ||
705 | </xs:element> | ||
706 | |||
707 | <xs:element name="ComPlusRoleForComponent"> | ||
708 | <xs:annotation> | ||
709 | <xs:appinfo> | ||
710 | <xse:parent namespace="http://wixtoolset.org/schemas/v4/wxs" ref="Component" /> | ||
711 | </xs:appinfo> | ||
712 | <xs:documentation> | ||
713 | Represents a role assignment to a COM+ component. | ||
714 | </xs:documentation> | ||
715 | </xs:annotation> | ||
716 | <xs:complexType> | ||
717 | <xs:attribute name="Id" use="required" type="xs:string"> | ||
718 | <xs:annotation><xs:documentation> | ||
719 | Identifier for the element. | ||
720 | </xs:documentation></xs:annotation> | ||
721 | </xs:attribute> | ||
722 | <xs:attribute name="Component" use="optional" type="xs:string"> | ||
723 | <xs:annotation><xs:documentation> | ||
724 | If the element is not a child of a ComPlusComponent | ||
725 | element, this attribute should be provided with the id of a ComPlusComponent | ||
726 | element representing the component the role is to be added to. | ||
727 | </xs:documentation></xs:annotation> | ||
728 | </xs:attribute> | ||
729 | <xs:attribute name="ApplicationRole" use="required" type="xs:string"> | ||
730 | <xs:annotation><xs:documentation> | ||
731 | Id of the ComPlusApplicationRole element representing the | ||
732 | role that shall be granted access to the component. | ||
733 | </xs:documentation></xs:annotation> | ||
734 | </xs:attribute> | ||
735 | </xs:complexType> | ||
736 | </xs:element> | ||
737 | |||
738 | <xs:element name="ComPlusInterface"> | ||
739 | <xs:annotation><xs:documentation> | ||
740 | Represents an interface for a COM+ component. | ||
741 | </xs:documentation></xs:annotation> | ||
742 | <xs:complexType> | ||
743 | <xs:sequence> | ||
744 | <xs:choice minOccurs="0" maxOccurs="unbounded"> | ||
745 | <xs:element ref="ComPlusRoleForInterface" /> | ||
746 | <xs:element ref="ComPlusMethod" /> | ||
747 | </xs:choice> | ||
748 | </xs:sequence> | ||
749 | <xs:attribute name="Id" use="required" type="xs:string"> | ||
750 | <xs:annotation><xs:documentation> | ||
751 | Identifier for the element. | ||
752 | </xs:documentation></xs:annotation> | ||
753 | </xs:attribute> | ||
754 | <xs:attribute name="IID" use="required" type="uuid"> | ||
755 | <xs:annotation><xs:documentation> | ||
756 | IID of the interface. | ||
757 | </xs:documentation></xs:annotation> | ||
758 | </xs:attribute> | ||
759 | <xs:attribute name="Description" use="optional" type="xs:string" /> | ||
760 | <xs:attribute name="QueuingEnabled" use="optional" type="YesNoType" /> | ||
761 | </xs:complexType> | ||
762 | </xs:element> | ||
763 | |||
764 | <xs:element name="ComPlusRoleForInterface"> | ||
765 | <xs:annotation> | ||
766 | <xs:appinfo> | ||
767 | <xse:parent namespace="http://wixtoolset.org/schemas/v4/wxs" ref="Component" /> | ||
768 | </xs:appinfo> | ||
769 | <xs:documentation> | ||
770 | Represents a role assignment to an interface. | ||
771 | </xs:documentation> | ||
772 | </xs:annotation> | ||
773 | <xs:complexType> | ||
774 | <xs:attribute name="Id" use="required" type="xs:string"> | ||
775 | <xs:annotation><xs:documentation> | ||
776 | Identifier for the element. | ||
777 | </xs:documentation></xs:annotation> | ||
778 | </xs:attribute> | ||
779 | <xs:attribute name="Interface" use="optional" type="xs:string"> | ||
780 | <xs:annotation><xs:documentation> | ||
781 | If the element is not a child of a ComPlusInterface | ||
782 | element, this attribute should be provided with the id of a ComPlusInterface | ||
783 | element representing the interface the role is to be added to. | ||
784 | </xs:documentation></xs:annotation> | ||
785 | </xs:attribute> | ||
786 | <xs:attribute name="ApplicationRole" use="required" type="xs:string"> | ||
787 | <xs:annotation><xs:documentation> | ||
788 | Id of the ComPlusApplicationRole element representing the | ||
789 | role that shall be granted access to the interface. | ||
790 | </xs:documentation></xs:annotation> | ||
791 | </xs:attribute> | ||
792 | </xs:complexType> | ||
793 | </xs:element> | ||
794 | |||
795 | <xs:element name="ComPlusMethod"> | ||
796 | <xs:annotation> | ||
797 | <xs:documentation> | ||
798 | Represents a method for an interface. | ||
799 | </xs:documentation> | ||
800 | </xs:annotation> | ||
801 | <xs:complexType> | ||
802 | <xs:sequence> | ||
803 | <xs:element ref="ComPlusRoleForMethod" minOccurs="0" maxOccurs="unbounded" /> | ||
804 | </xs:sequence> | ||
805 | <xs:attribute name="Id" use="required" type="xs:string"> | ||
806 | <xs:annotation> | ||
807 | <xs:documentation> | ||
808 | Identifier for the element. | ||
809 | </xs:documentation> | ||
810 | </xs:annotation> | ||
811 | </xs:attribute> | ||
812 | <xs:attribute name="Index" use="optional" type="xs:int"> | ||
813 | <xs:annotation> | ||
814 | <xs:documentation> | ||
815 | Dispatch id of the method. If this attribute is not set a | ||
816 | value must be provided for the Name attribute. | ||
817 | </xs:documentation> | ||
818 | </xs:annotation> | ||
819 | </xs:attribute> | ||
820 | <xs:attribute name="Name" use="optional" type="xs:string"> | ||
821 | <xs:annotation> | ||
822 | <xs:documentation> | ||
823 | Name of the method. If this attribute is not set a value | ||
824 | must be provided for the Index attribute. | ||
825 | </xs:documentation> | ||
826 | </xs:annotation> | ||
827 | </xs:attribute> | ||
828 | <xs:attribute name="AutoComplete" use="optional" type="YesNoType" /> | ||
829 | <xs:attribute name="Description" use="optional" type="xs:string" /> | ||
830 | </xs:complexType> | ||
831 | </xs:element> | ||
832 | |||
833 | <xs:element name="ComPlusRoleForMethod"> | ||
834 | <xs:annotation> | ||
835 | <xs:appinfo> | ||
836 | <xse:parent namespace="http://wixtoolset.org/schemas/v4/wxs" ref="Component" /> | ||
837 | </xs:appinfo> | ||
838 | <xs:documentation> | ||
839 | Represents a role assignment to a COM+ method. | ||
840 | </xs:documentation> | ||
841 | </xs:annotation> | ||
842 | <xs:complexType> | ||
843 | <xs:attribute name="Id" use="required" type="xs:string"> | ||
844 | <xs:annotation><xs:documentation> | ||
845 | Identifier for the element. | ||
846 | </xs:documentation></xs:annotation> | ||
847 | </xs:attribute> | ||
848 | <xs:attribute name="Method" use="optional" type="xs:string"> | ||
849 | <xs:annotation><xs:documentation> | ||
850 | If the element is not a child of a ComPlusMethod element, | ||
851 | this attribute should be provided with the id of a ComPlusMethod element | ||
852 | representing the method the role is to be added to. | ||
853 | </xs:documentation></xs:annotation> | ||
854 | </xs:attribute> | ||
855 | <xs:attribute name="ApplicationRole" use="required" type="xs:string"> | ||
856 | <xs:annotation><xs:documentation> | ||
857 | Id of the ComPlusApplicationRole element representing the | ||
858 | role that shall be granted access to the method. | ||
859 | </xs:documentation></xs:annotation> | ||
860 | </xs:attribute> | ||
861 | </xs:complexType> | ||
862 | </xs:element> | ||
863 | |||
864 | <xs:element name="ComPlusSubscription"> | ||
865 | <xs:annotation> | ||
866 | <xs:appinfo> | ||
867 | <xse:parent namespace="http://wixtoolset.org/schemas/v4/wxs" ref="Component" /> | ||
868 | </xs:appinfo> | ||
869 | <xs:documentation> | ||
870 | Defines an event subscription for a COM+ component. | ||
871 | </xs:documentation> | ||
872 | </xs:annotation> | ||
873 | <xs:complexType> | ||
874 | <xs:attribute name="Id" use="required" type="xs:string"> | ||
875 | <xs:annotation><xs:documentation> | ||
876 | Identifier for the element. | ||
877 | </xs:documentation></xs:annotation> | ||
878 | </xs:attribute> | ||
879 | <xs:attribute name="Component" use="optional" type="xs:string"> | ||
880 | <xs:annotation><xs:documentation> | ||
881 | If the element is not a child of a ComPlusComponent | ||
882 | element, this attribute should be provided with the id of a ComPlusComponent | ||
883 | element representing the component the subscription is to be created for. | ||
884 | </xs:documentation></xs:annotation> | ||
885 | </xs:attribute> | ||
886 | <xs:attribute name="SubscriptionId" use="optional" type="xs:string"> | ||
887 | <xs:annotation><xs:documentation> | ||
888 | Id of the subscription. If a value is not provided for | ||
889 | this attribute, an id will be generated during installation. | ||
890 | </xs:documentation></xs:annotation> | ||
891 | </xs:attribute> | ||
892 | <xs:attribute name="Name" use="required" type="xs:string"> | ||
893 | <xs:annotation><xs:documentation> | ||
894 | Name of the subscription. | ||
895 | </xs:documentation></xs:annotation> | ||
896 | </xs:attribute> | ||
897 | <xs:attribute name="EventCLSID" use="optional" type="xs:string"> | ||
898 | <xs:annotation><xs:documentation> | ||
899 | CLSID of the event class for the subscription. If a value | ||
900 | for this attribute is not provided, a value for the PublisherID attribute | ||
901 | must be provided. | ||
902 | </xs:documentation></xs:annotation> | ||
903 | </xs:attribute> | ||
904 | <xs:attribute name="PublisherID" use="optional" type="xs:string"> | ||
905 | <xs:annotation><xs:documentation> | ||
906 | Publisher id for the subscription. If a value for this | ||
907 | attribute is not provided, a value for the EventCLSID attribute must be | ||
908 | provided. | ||
909 | </xs:documentation></xs:annotation> | ||
910 | </xs:attribute> | ||
911 | <xs:attribute name="Description" use="optional" type="xs:string" /> | ||
912 | <xs:attribute name="Enabled" use="optional" type="YesNoType" /> | ||
913 | <xs:attribute name="EventClassPartitionID" use="optional" type="xs:string" /> | ||
914 | <xs:attribute name="FilterCriteria" use="optional" type="xs:string" /> | ||
915 | <xs:attribute name="InterfaceID" use="optional" type="xs:string" /> | ||
916 | <xs:attribute name="MachineName" use="optional" type="xs:string" /> | ||
917 | <xs:attribute name="MethodName" use="optional" type="xs:string" /> | ||
918 | <xs:attribute name="PerUser" use="optional" type="YesNoType" /> | ||
919 | <xs:attribute name="Queued" use="optional" type="YesNoType" /> | ||
920 | <xs:attribute name="SubscriberMoniker" use="optional" type="xs:string" /> | ||
921 | <xs:attribute name="UserName" use="optional" type="xs:string" /> | ||
922 | </xs:complexType> | ||
923 | </xs:element> | ||
924 | |||
925 | <xs:simpleType name="YesNoType"> | ||
926 | <xs:annotation> | ||
927 | <xs:documentation>Values of this type will either be "yes" or "no".</xs:documentation> | ||
928 | </xs:annotation> | ||
929 | <xs:restriction base="xs:NMTOKEN"> | ||
930 | <xs:enumeration value="no" /> | ||
931 | <xs:enumeration value="yes" /> | ||
932 | </xs:restriction> | ||
933 | </xs:simpleType> | ||
934 | |||
935 | <xs:simpleType name="uuid"> | ||
936 | <xs:annotation> | ||
937 | <xs:documentation>Values of this type will look like: "01234567-89AB-CDEF-0123-456789ABCDEF".</xs:documentation> | ||
938 | </xs:annotation> | ||
939 | <xs:restriction base="xs:string"> | ||
940 | <xs:pattern value="[0-9A-Fa-f]{8}\-?[0-9A-Fa-f]{4}\-?[0-9A-Fa-f]{4}\-?[0-9A-Fa-f]{4}\-?[0-9A-Fa-f]{12}" /> | ||
941 | </xs:restriction> | ||
942 | </xs:simpleType> | ||
943 | |||
944 | </xs:schema> | ||
diff --git a/src/wixext/messages.xml b/src/wixext/messages.xml new file mode 100644 index 00000000..66c0a9e6 --- /dev/null +++ b/src/wixext/messages.xml | |||
@@ -0,0 +1,77 @@ | |||
1 | <?xml version="1.0" encoding="utf-8"?> | ||
2 | <!-- 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. --> | ||
3 | |||
4 | |||
5 | <Messages Namespace="WixToolset.Extensions" Resources="Data.Messages" xmlns="http://schemas.microsoft.com/genmsgs/2004/07/messages"> | ||
6 | <Class Name="ComPlusErrors" ContainerName="ComPlusErrorEventArgs" BaseContainerName="MessageEventArgs"> | ||
7 | <Message Id="IllegalAttributeWithoutComponent" Number="6000"> | ||
8 | <Instance> | ||
9 | The {0}/@{1} attribute cannot be specified unless the element has a component as an ancestor. A {0} that does not have a component ancestor is not installed. | ||
10 | <Parameter Type="System.String" Name="elementName" /> | ||
11 | <Parameter Type="System.String" Name="attributeName" /> | ||
12 | </Instance> | ||
13 | </Message> | ||
14 | <Message Id="IllegalElementWithoutComponent" Number="6001"> | ||
15 | <Instance> | ||
16 | The {0} element cannot be specified unless the element has a component as an ancestor. A {0} that does not have a component ancestor is not installed. | ||
17 | <Parameter Type="System.String" Name="elementName" /> | ||
18 | </Instance> | ||
19 | </Message> | ||
20 | <Message Id="UnexpectedAttributeWithOtherValue" Number="6002"> | ||
21 | <Instance> | ||
22 | The {0}/@{1} attribute cannot coexist with the {2} attribute's value of '{3}'. | ||
23 | <Parameter Type="System.String" Name="elementName" /> | ||
24 | <Parameter Type="System.String" Name="attributeName" /> | ||
25 | <Parameter Type="System.String" Name="otherAttributeName" /> | ||
26 | <Parameter Type="System.String" Name="otherValue" /> | ||
27 | </Instance> | ||
28 | <Instance> | ||
29 | The {0}/@{1} attribute's value, '{2}', cannot coexist with the {3} attribute's value of '{4}'. | ||
30 | <Parameter Type="System.String" Name="elementName" /> | ||
31 | <Parameter Type="System.String" Name="attributeName" /> | ||
32 | <Parameter Type="System.String" Name="value" /> | ||
33 | <Parameter Type="System.String" Name="otherAttributeName" /> | ||
34 | <Parameter Type="System.String" Name="otherValue" /> | ||
35 | </Instance> | ||
36 | </Message> | ||
37 | <Message Id="UnexpectedAttributeWithoutOtherValue" Number="6003"> | ||
38 | <Instance> | ||
39 | The {0}/@{1} cannot be provided unless the {2} attribute is provided with a value of '{3}'. | ||
40 | <Parameter Type="System.String" Name="elementName" /> | ||
41 | <Parameter Type="System.String" Name="attributeName" /> | ||
42 | <Parameter Type="System.String" Name="otherAttributeName" /> | ||
43 | <Parameter Type="System.String" Name="otherValue" /> | ||
44 | </Instance> | ||
45 | </Message> | ||
46 | <Message Id="RequiredAttributeUnderComponent" Number="6004"> | ||
47 | <Instance> | ||
48 | The {0}/@{1} attribute must be provided when {0} element is nested under a component. | ||
49 | <Parameter Type="System.String" Name="elementName" /> | ||
50 | <Parameter Type="System.String" Name="attributeName" /> | ||
51 | </Instance> | ||
52 | </Message> | ||
53 | <Message Id="RequiredAttribute" Number="6005"> | ||
54 | <Instance> | ||
55 | A {0} element must have either a {1} attribute or a {2} attribute, or both set. | ||
56 | <Parameter Type="System.String" Name="elementName" /> | ||
57 | <Parameter Type="System.String" Name="attributeName1" /> | ||
58 | <Parameter Type="System.String" Name="attributeName2" /> | ||
59 | </Instance> | ||
60 | </Message> | ||
61 | <Message Id="RequiredAttributeNotUnderComponent" Number="6006"> | ||
62 | <Instance> | ||
63 | A {0} element not nested under a component must have either a {1} attribute or a {2} attribute, or both set. | ||
64 | <Parameter Type="System.String" Name="elementName" /> | ||
65 | <Parameter Type="System.String" Name="attributeName1" /> | ||
66 | <Parameter Type="System.String" Name="attributeName2" /> | ||
67 | </Instance> | ||
68 | </Message> | ||
69 | </Class> | ||
70 | <Class Name="ComPlusWarnings" ContainerName="ComPlusWarningEventArgs" BaseContainerName="MessageEventArgs"> | ||
71 | <Message Id="MissingComponents" Number="6007"> | ||
72 | <Instance>The ComPlusAssembly element has a Type attribute with a value of 'native', but the element does not contain any ComPlusComponent elements. All components contained in a native assembly must be listed, or they will not be correctly removed during uninstall.</Instance> | ||
73 | </Message> | ||
74 | </Class> | ||
75 | <Class Name="ComPlusVerboses" ContainerName="ComPlusVerboseEventArgs" BaseContainerName="MessageEventArgs"> | ||
76 | </Class> | ||
77 | </Messages> | ||
diff --git a/src/wixext/tables.xml b/src/wixext/tables.xml new file mode 100644 index 00000000..3c3d1728 --- /dev/null +++ b/src/wixext/tables.xml | |||
@@ -0,0 +1,250 @@ | |||
1 | <?xml version="1.0" encoding="utf-8"?> | ||
2 | <!-- 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. --> | ||
3 | |||
4 | |||
5 | <tableDefinitions xmlns="http://wixtoolset.org/schemas/v4/wi/tables"> | ||
6 | <tableDefinition name="ComPlusPartition" createSymbols="yes"> | ||
7 | <columnDefinition name="Partition" type="string" length="72" primaryKey="yes" modularize="column" | ||
8 | category="identifier" description=""/> | ||
9 | <columnDefinition name="Component_" type="string" length="72" nullable="yes" modularize="column" | ||
10 | keyTable="Component" keyColumn="1" category="identifier" description=""/> | ||
11 | <columnDefinition name="Id" type="string" length="72" nullable="yes" modularize="property" | ||
12 | category="formatted" description=""/> | ||
13 | <columnDefinition name="Name" type="string" length="255" nullable="yes" modularize="property" | ||
14 | category="formatted" description=""/> | ||
15 | </tableDefinition> | ||
16 | <tableDefinition name="ComPlusPartitionProperty"> | ||
17 | <columnDefinition name="Partition_" type="string" length="72" primaryKey="yes" modularize="column" | ||
18 | keyTable="ComPlusPartition" keyColumn="1" category="identifier" description=""/> | ||
19 | <columnDefinition name="Name" type="string" length="72" primaryKey="yes" modularize="property" | ||
20 | category="formatted" description=""/> | ||
21 | <columnDefinition name="Value" type="string" length="255" modularize="property" | ||
22 | category="formatted" description=""/> | ||
23 | </tableDefinition> | ||
24 | <tableDefinition name="ComPlusPartitionRole" createSymbols="yes"> | ||
25 | <columnDefinition name="PartitionRole" type="string" length="72" primaryKey="yes" modularize="column" | ||
26 | category="identifier" description=""/> | ||
27 | <columnDefinition name="Partition_" type="string" length="72" modularize="column" | ||
28 | keyTable="ComPlusPartition" keyColumn="1" category="identifier" description=""/> | ||
29 | <columnDefinition name="Component_" type="string" length="72" nullable="yes" modularize="column" | ||
30 | keyTable="Component" keyColumn="1" category="identifier" description=""/> | ||
31 | <columnDefinition name="Name" type="string" length="255" modularize="property" | ||
32 | category="formatted" description=""/> | ||
33 | </tableDefinition> | ||
34 | <tableDefinition name="ComPlusUserInPartitionRole" createSymbols="yes"> | ||
35 | <columnDefinition name="UserInPartitionRole" type="string" length="72" primaryKey="yes" modularize="column" | ||
36 | category="identifier" description=""/> | ||
37 | <columnDefinition name="PartitionRole_" type="string" length="72" modularize="column" | ||
38 | keyTable="ComPlusPartitionRole" keyColumn="1" category="identifier" description=""/> | ||
39 | <columnDefinition name="Component_" type="string" length="72" modularize="column" | ||
40 | keyTable="Component" keyColumn="1" category="identifier" description=""/> | ||
41 | <columnDefinition name="User_" type="string" length="72" modularize="column" | ||
42 | category="identifier" description=""/> | ||
43 | </tableDefinition> | ||
44 | <tableDefinition name="ComPlusGroupInPartitionRole" createSymbols="yes"> | ||
45 | <columnDefinition name="GroupInPartitionRole" type="string" length="72" primaryKey="yes" modularize="column" | ||
46 | category="identifier" description=""/> | ||
47 | <columnDefinition name="PartitionRole_" type="string" length="72" modularize="column" | ||
48 | keyTable="ComPlusPartitionRole" keyColumn="1" category="identifier" description=""/> | ||
49 | <columnDefinition name="Component_" type="string" length="72" modularize="column" | ||
50 | keyTable="Component" keyColumn="1" category="identifier" description=""/> | ||
51 | <columnDefinition name="Group_" type="string" length="72" modularize="column" | ||
52 | category="identifier" description=""/> | ||
53 | </tableDefinition> | ||
54 | <tableDefinition name="ComPlusPartitionUser" createSymbols="yes"> | ||
55 | <columnDefinition name="PartitionUser" type="string" length="72" primaryKey="yes" modularize="column" | ||
56 | category="identifier" description=""/> | ||
57 | <columnDefinition name="Partition_" type="string" length="72" modularize="column" | ||
58 | keyTable="ComPlusPartition" keyColumn="1" category="identifier" description=""/> | ||
59 | <columnDefinition name="Component_" type="string" length="72" modularize="column" | ||
60 | keyTable="Component" keyColumn="1" category="identifier" description=""/> | ||
61 | <columnDefinition name="User_" type="string" length="72" modularize="column" | ||
62 | category="identifier" description=""/> | ||
63 | </tableDefinition> | ||
64 | <tableDefinition name="ComPlusApplication" createSymbols="yes"> | ||
65 | <columnDefinition name="Application" type="string" length="72" primaryKey="yes" modularize="column" | ||
66 | category="identifier" description=""/> | ||
67 | <columnDefinition name="Partition_" type="string" length="72" nullable="yes" modularize="column" | ||
68 | keyTable="ComPlusPartition" keyColumn="1" category="identifier" description=""/> | ||
69 | <columnDefinition name="Component_" type="string" length="72" nullable="yes" modularize="column" | ||
70 | keyTable="Component" keyColumn="1" category="identifier" description=""/> | ||
71 | <columnDefinition name="Id" type="string" length="72" nullable="yes" modularize="property" | ||
72 | category="formatted" description=""/> | ||
73 | <columnDefinition name="Name" type="string" length="255" nullable="yes" modularize="property" | ||
74 | category="formatted" description=""/> | ||
75 | </tableDefinition> | ||
76 | <tableDefinition name="ComPlusApplicationProperty"> | ||
77 | <columnDefinition name="Application_" type="string" length="72" primaryKey="yes" modularize="column" | ||
78 | keyTable="ComPlusApplication" keyColumn="1" category="identifier" description=""/> | ||
79 | <columnDefinition name="Name" type="string" length="72" primaryKey="yes" modularize="property" | ||
80 | category="formatted" description=""/> | ||
81 | <columnDefinition name="Value" type="string" length="255" modularize="property" | ||
82 | category="formatted" description=""/> | ||
83 | </tableDefinition> | ||
84 | <tableDefinition name="ComPlusApplicationRole" createSymbols="yes"> | ||
85 | <columnDefinition name="ApplicationRole" type="string" length="72" primaryKey="yes" modularize="column" | ||
86 | category="identifier" description=""/> | ||
87 | <columnDefinition name="Application_" type="string" length="72" modularize="column" | ||
88 | keyTable="ComPlusApplication" keyColumn="1" category="identifier" description=""/> | ||
89 | <columnDefinition name="Component_" type="string" length="72" nullable="yes" modularize="column" | ||
90 | keyTable="Component" keyColumn="1" category="identifier" description=""/> | ||
91 | <columnDefinition name="Name" type="string" length="255" modularize="property" | ||
92 | category="formatted" description=""/> | ||
93 | </tableDefinition> | ||
94 | <tableDefinition name="ComPlusApplicationRoleProperty"> | ||
95 | <columnDefinition name="ApplicationRole_" type="string" length="72" primaryKey="yes" modularize="column" | ||
96 | keyTable="ComPlusApplicationRole" keyColumn="1" category="identifier" description=""/> | ||
97 | <columnDefinition name="Name" type="string" length="72" primaryKey="yes" modularize="property" | ||
98 | category="formatted" description=""/> | ||
99 | <columnDefinition name="Value" type="string" length="255" modularize="property" | ||
100 | category="formatted" description=""/> | ||
101 | </tableDefinition> | ||
102 | <tableDefinition name="ComPlusUserInApplicationRole" createSymbols="yes"> | ||
103 | <columnDefinition name="UserInApplicationRole" type="string" length="72" primaryKey="yes" modularize="column" | ||
104 | category="identifier" description=""/> | ||
105 | <columnDefinition name="ApplicationRole_" type="string" length="72" modularize="column" | ||
106 | keyTable="ComPlusApplicationRole" keyColumn="1" category="identifier" description=""/> | ||
107 | <columnDefinition name="Component_" type="string" length="72" modularize="column" | ||
108 | keyTable="Component" keyColumn="1" category="identifier" description=""/> | ||
109 | <columnDefinition name="User_" type="string" length="72" modularize="column" | ||
110 | category="identifier" description=""/> | ||
111 | </tableDefinition> | ||
112 | <tableDefinition name="ComPlusGroupInApplicationRole" createSymbols="yes"> | ||
113 | <columnDefinition name="GroupInApplicationRole" type="string" length="72" primaryKey="yes" modularize="column" | ||
114 | category="identifier" description=""/> | ||
115 | <columnDefinition name="ApplicationRole_" type="string" length="72" modularize="column" | ||
116 | keyTable="ComPlusApplicationRole" keyColumn="1" category="identifier" description=""/> | ||
117 | <columnDefinition name="Component_" type="string" length="72" modularize="column" | ||
118 | keyTable="Component" keyColumn="1" category="identifier" description=""/> | ||
119 | <columnDefinition name="Group_" type="string" length="72" modularize="column" | ||
120 | category="identifier" description=""/> | ||
121 | </tableDefinition> | ||
122 | <tableDefinition name="ComPlusAssembly" createSymbols="yes"> | ||
123 | <columnDefinition name="Assembly" type="string" length="72" primaryKey="yes" modularize="column" | ||
124 | category="identifier" description=""/> | ||
125 | <columnDefinition name="Application_" type="string" length="72" nullable="yes" modularize="column" | ||
126 | keyTable="ComPlusApplication" keyColumn="1" category="identifier" description=""/> | ||
127 | <columnDefinition name="Component_" type="string" length="72" modularize="column" | ||
128 | keyTable="Component" keyColumn="1" category="identifier" description=""/> | ||
129 | <columnDefinition name="AssemblyName" type="string" length="255" nullable="yes" modularize="property" | ||
130 | category="formatted" description=""/> | ||
131 | <columnDefinition name="DllPath" type="string" length="255" nullable="yes" modularize="property" | ||
132 | category="formatted" description=""/> | ||
133 | <columnDefinition name="TlbPath" type="string" length="255" nullable="yes" modularize="property" | ||
134 | category="formatted" description=""/> | ||
135 | <columnDefinition name="PSDllPath" type="string" length="255" nullable="yes" modularize="property" | ||
136 | category="formatted" description=""/> | ||
137 | <columnDefinition name="Attributes" type="number" length="4" | ||
138 | description=""/> | ||
139 | </tableDefinition> | ||
140 | <tableDefinition name="ComPlusAssemblyDependency"> | ||
141 | <columnDefinition name="Assembly_" type="string" length="72" primaryKey="yes" modularize="column" | ||
142 | keyTable="ComPlusAssembly" keyColumn="1" category="identifier" description=""/> | ||
143 | <columnDefinition name="RequiredAssembly_" type="string" length="72" primaryKey="yes" modularize="column" | ||
144 | keyTable="ComPlusAssembly" keyColumn="1" category="identifier" description=""/> | ||
145 | </tableDefinition> | ||
146 | <tableDefinition name="ComPlusComponent" createSymbols="yes"> | ||
147 | <columnDefinition name="ComPlusComponent" type="string" length="72" primaryKey="yes" modularize="column" | ||
148 | category="identifier" description=""/> | ||
149 | <columnDefinition name="Assembly_" type="string" length="72" modularize="column" | ||
150 | keyTable="ComPlusAssembly" keyColumn="1" category="identifier" description=""/> | ||
151 | <columnDefinition name="CLSID" type="string" length="72" modularize="property" | ||
152 | category="formatted" description=""/> | ||
153 | </tableDefinition> | ||
154 | <tableDefinition name="ComPlusComponentProperty"> | ||
155 | <columnDefinition name="ComPlusComponent_" type="string" length="72" primaryKey="yes" modularize="column" | ||
156 | keyTable="ComPlusComponent" keyColumn="1" category="identifier" description=""/> | ||
157 | <columnDefinition name="Name" type="string" length="72" primaryKey="yes" modularize="property" | ||
158 | category="formatted" description=""/> | ||
159 | <columnDefinition name="Value" type="string" length="255" modularize="property" | ||
160 | category="formatted" description=""/> | ||
161 | </tableDefinition> | ||
162 | <tableDefinition name="ComPlusRoleForComponent" createSymbols="yes"> | ||
163 | <columnDefinition name="RoleForComponent" type="string" length="72" primaryKey="yes" modularize="column" | ||
164 | category="identifier" description=""/> | ||
165 | <columnDefinition name="ComPlusComponent_" type="string" length="72" modularize="column" | ||
166 | keyTable="ComPlusComponent" keyColumn="1" category="identifier" description=""/> | ||
167 | <columnDefinition name="ApplicationRole_" type="string" length="72" modularize="column" | ||
168 | keyTable="ComPlusApplicationRole" keyColumn="1" category="identifier" description=""/> | ||
169 | <columnDefinition name="Component_" type="string" length="72" modularize="column" | ||
170 | keyTable="Component" keyColumn="1" category="identifier" description=""/> | ||
171 | </tableDefinition> | ||
172 | <tableDefinition name="ComPlusInterface" createSymbols="yes"> | ||
173 | <columnDefinition name="Interface" type="string" length="72" primaryKey="yes" modularize="column" | ||
174 | category="identifier" description=""/> | ||
175 | <columnDefinition name="ComPlusComponent_" type="string" length="72" modularize="column" | ||
176 | keyTable="ComPlusComponent" keyColumn="1" category="identifier" description=""/> | ||
177 | <columnDefinition name="IID" type="string" length="72" modularize="property" | ||
178 | category="formatted" description=""/> | ||
179 | </tableDefinition> | ||
180 | <tableDefinition name="ComPlusInterfaceProperty"> | ||
181 | <columnDefinition name="Interface_" type="string" length="72" primaryKey="yes" modularize="column" | ||
182 | keyTable="ComPlusInterface" keyColumn="1" category="identifier" description=""/> | ||
183 | <columnDefinition name="Name" type="string" length="72" primaryKey="yes" modularize="property" | ||
184 | category="formatted" description=""/> | ||
185 | <columnDefinition name="Value" type="string" length="255" modularize="property" | ||
186 | category="formatted" description=""/> | ||
187 | </tableDefinition> | ||
188 | <tableDefinition name="ComPlusRoleForInterface" createSymbols="yes"> | ||
189 | <columnDefinition name="RoleForInterface" type="string" length="72" primaryKey="yes" modularize="column" | ||
190 | category="identifier" description=""/> | ||
191 | <columnDefinition name="Interface_" type="string" length="72" modularize="column" | ||
192 | keyTable="ComPlusInterface" keyColumn="1" category="identifier" description=""/> | ||
193 | <columnDefinition name="ApplicationRole_" type="string" length="72" modularize="column" | ||
194 | keyTable="ComPlusApplicationRole" keyColumn="1" category="identifier" description=""/> | ||
195 | <columnDefinition name="Component_" type="string" length="72" modularize="column" | ||
196 | keyTable="Component" keyColumn="1" category="identifier" description=""/> | ||
197 | </tableDefinition> | ||
198 | <tableDefinition name="ComPlusMethod" createSymbols="yes"> | ||
199 | <columnDefinition name="Method" type="string" length="72" primaryKey="yes" modularize="column" | ||
200 | category="identifier" description=""/> | ||
201 | <columnDefinition name="Interface_" type="string" length="72" modularize="column" | ||
202 | keyTable="ComPlusInterface" keyColumn="1" category="identifier" description=""/> | ||
203 | <columnDefinition name="Index" type="number" length="4" nullable="yes" | ||
204 | description=""/> | ||
205 | <columnDefinition name="Name" type="string" length="255" nullable="yes" modularize="property" | ||
206 | category="formatted" description=""/> | ||
207 | </tableDefinition> | ||
208 | <tableDefinition name="ComPlusMethodProperty"> | ||
209 | <columnDefinition name="Method_" type="string" length="72" primaryKey="yes" modularize="column" | ||
210 | keyTable="ComPlusMethod" keyColumn="1" category="identifier" description=""/> | ||
211 | <columnDefinition name="Name" type="string" length="72" primaryKey="yes" modularize="property" | ||
212 | category="formatted" description=""/> | ||
213 | <columnDefinition name="Value" type="string" length="255" modularize="property" | ||
214 | category="formatted" description=""/> | ||
215 | </tableDefinition> | ||
216 | <tableDefinition name="ComPlusRoleForMethod" createSymbols="yes"> | ||
217 | <columnDefinition name="RoleForMethod" type="string" length="72" primaryKey="yes" modularize="column" | ||
218 | category="identifier" description=""/> | ||
219 | <columnDefinition name="Method_" type="string" length="72" modularize="column" | ||
220 | keyTable="ComPlusMethod" keyColumn="1" category="identifier" description=""/> | ||
221 | <columnDefinition name="ApplicationRole_" type="string" length="72" modularize="column" | ||
222 | keyTable="ComPlusApplicationRole" keyColumn="1" category="identifier" description=""/> | ||
223 | <columnDefinition name="Component_" type="string" length="72" modularize="column" | ||
224 | keyTable="Component" keyColumn="1" category="identifier" description=""/> | ||
225 | </tableDefinition> | ||
226 | <tableDefinition name="ComPlusSubscription" createSymbols="yes"> | ||
227 | <columnDefinition name="Subscription" type="string" length="72" primaryKey="yes" modularize="column" | ||
228 | category="identifier" description=""/> | ||
229 | <columnDefinition name="ComPlusComponent_" type="string" length="72" primaryKey="yes" modularize="column" | ||
230 | keyTable="ComPlusComponent" keyColumn="1" category="identifier" description=""/> | ||
231 | <columnDefinition name="Component_" type="string" length="72" modularize="column" | ||
232 | keyTable="Component" keyColumn="1" category="identifier" description=""/> | ||
233 | <columnDefinition name="Id" type="string" length="72" nullable="yes" modularize="property" | ||
234 | category="formatted" description=""/> | ||
235 | <columnDefinition name="Name" type="string" length="255" modularize="property" | ||
236 | category="formatted" description=""/> | ||
237 | <columnDefinition name="EventCLSID" type="string" length="72" nullable="yes" modularize="property" | ||
238 | category="formatted" description=""/> | ||
239 | <columnDefinition name="PublisherID" type="string" length="72" nullable="yes" modularize="property" | ||
240 | category="formatted" description=""/> | ||
241 | </tableDefinition> | ||
242 | <tableDefinition name="ComPlusSubscriptionProperty"> | ||
243 | <columnDefinition name="Subscription_" type="string" length="72" primaryKey="yes" modularize="column" | ||
244 | keyTable="ComPlusSubscription" keyColumn="1" category="identifier" description=""/> | ||
245 | <columnDefinition name="Name" type="string" length="72" primaryKey="yes" modularize="property" | ||
246 | category="formatted" description=""/> | ||
247 | <columnDefinition name="Value" type="string" length="255" modularize="property" | ||
248 | category="formatted" description=""/> | ||
249 | </tableDefinition> | ||
250 | </tableDefinitions> | ||