diff options
Diffstat (limited to 'src/WixToolset.Core.Burn/Bind/LegacySearchFacade.cs')
-rw-r--r-- | src/WixToolset.Core.Burn/Bind/LegacySearchFacade.cs | 185 |
1 files changed, 185 insertions, 0 deletions
diff --git a/src/WixToolset.Core.Burn/Bind/LegacySearchFacade.cs b/src/WixToolset.Core.Burn/Bind/LegacySearchFacade.cs new file mode 100644 index 00000000..0a80760d --- /dev/null +++ b/src/WixToolset.Core.Burn/Bind/LegacySearchFacade.cs | |||
@@ -0,0 +1,185 @@ | |||
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.Core.Burn | ||
4 | { | ||
5 | using System; | ||
6 | using System.Xml; | ||
7 | using WixToolset.Data; | ||
8 | using WixToolset.Data.Tuples; | ||
9 | |||
10 | internal class LegacySearchFacade : BaseSearchFacade | ||
11 | { | ||
12 | public LegacySearchFacade(WixSearchTuple searchTuple, IntermediateTuple searchSpecificTuple) | ||
13 | { | ||
14 | this.SearchTuple = searchTuple; | ||
15 | this.SearchSpecificTuple = searchSpecificTuple; | ||
16 | } | ||
17 | |||
18 | public IntermediateTuple SearchSpecificTuple { get; } | ||
19 | |||
20 | /// <summary> | ||
21 | /// Generates Burn manifest and ParameterInfo-style markup a search. | ||
22 | /// </summary> | ||
23 | /// <param name="writer"></param> | ||
24 | public override void WriteXml(XmlTextWriter writer) | ||
25 | { | ||
26 | switch (this.SearchSpecificTuple) | ||
27 | { | ||
28 | case WixComponentSearchTuple tuple: | ||
29 | this.WriteComponentSearchXml(writer, tuple); | ||
30 | break; | ||
31 | case WixFileSearchTuple tuple: | ||
32 | this.WriteFileSearchXml(writer, tuple); | ||
33 | break; | ||
34 | case WixProductSearchTuple tuple: | ||
35 | this.WriteProductSearchXml(writer, tuple); | ||
36 | break; | ||
37 | case WixRegistrySearchTuple tuple: | ||
38 | this.WriteRegistrySearchXml(writer, tuple); | ||
39 | break; | ||
40 | } | ||
41 | } | ||
42 | |||
43 | private void WriteComponentSearchXml(XmlTextWriter writer, WixComponentSearchTuple searchTuple) | ||
44 | { | ||
45 | writer.WriteStartElement("MsiComponentSearch"); | ||
46 | |||
47 | base.WriteXml(writer); | ||
48 | |||
49 | writer.WriteAttributeString("ComponentId", searchTuple.Guid); | ||
50 | |||
51 | if (!String.IsNullOrEmpty(searchTuple.ProductCode)) | ||
52 | { | ||
53 | writer.WriteAttributeString("ProductCode", searchTuple.ProductCode); | ||
54 | } | ||
55 | |||
56 | if (0 != (searchTuple.Attributes & WixComponentSearchAttributes.KeyPath)) | ||
57 | { | ||
58 | writer.WriteAttributeString("Type", "keyPath"); | ||
59 | } | ||
60 | else if (0 != (searchTuple.Attributes & WixComponentSearchAttributes.State)) | ||
61 | { | ||
62 | writer.WriteAttributeString("Type", "state"); | ||
63 | } | ||
64 | else if (0 != (searchTuple.Attributes & WixComponentSearchAttributes.WantDirectory)) | ||
65 | { | ||
66 | writer.WriteAttributeString("Type", "directory"); | ||
67 | } | ||
68 | |||
69 | writer.WriteEndElement(); | ||
70 | } | ||
71 | |||
72 | private void WriteFileSearchXml(XmlTextWriter writer, WixFileSearchTuple searchTuple) | ||
73 | { | ||
74 | writer.WriteStartElement((0 == (searchTuple.Attributes & WixFileSearchAttributes.IsDirectory)) ? "FileSearch" : "DirectorySearch"); | ||
75 | |||
76 | base.WriteXml(writer); | ||
77 | |||
78 | writer.WriteAttributeString("Path", searchTuple.Path); | ||
79 | if (WixFileSearchAttributes.WantExists == (searchTuple.Attributes & WixFileSearchAttributes.WantExists)) | ||
80 | { | ||
81 | writer.WriteAttributeString("Type", "exists"); | ||
82 | } | ||
83 | else if (WixFileSearchAttributes.WantVersion == (searchTuple.Attributes & WixFileSearchAttributes.WantVersion)) | ||
84 | { | ||
85 | // Can never get here for DirectorySearch. | ||
86 | writer.WriteAttributeString("Type", "version"); | ||
87 | } | ||
88 | else | ||
89 | { | ||
90 | writer.WriteAttributeString("Type", "path"); | ||
91 | } | ||
92 | writer.WriteEndElement(); | ||
93 | } | ||
94 | |||
95 | private void WriteProductSearchXml(XmlTextWriter writer, WixProductSearchTuple tuple) | ||
96 | { | ||
97 | writer.WriteStartElement("MsiProductSearch"); | ||
98 | |||
99 | base.WriteXml(writer); | ||
100 | |||
101 | if (0 != (tuple.Attributes & WixProductSearchAttributes.UpgradeCode)) | ||
102 | { | ||
103 | writer.WriteAttributeString("UpgradeCode", tuple.Guid); | ||
104 | } | ||
105 | else | ||
106 | { | ||
107 | writer.WriteAttributeString("ProductCode", tuple.Guid); | ||
108 | } | ||
109 | |||
110 | if (0 != (tuple.Attributes & WixProductSearchAttributes.Version)) | ||
111 | { | ||
112 | writer.WriteAttributeString("Type", "version"); | ||
113 | } | ||
114 | else if (0 != (tuple.Attributes & WixProductSearchAttributes.Language)) | ||
115 | { | ||
116 | writer.WriteAttributeString("Type", "language"); | ||
117 | } | ||
118 | else if (0 != (tuple.Attributes & WixProductSearchAttributes.State)) | ||
119 | { | ||
120 | writer.WriteAttributeString("Type", "state"); | ||
121 | } | ||
122 | else if (0 != (tuple.Attributes & WixProductSearchAttributes.Assignment)) | ||
123 | { | ||
124 | writer.WriteAttributeString("Type", "assignment"); | ||
125 | } | ||
126 | |||
127 | writer.WriteEndElement(); | ||
128 | } | ||
129 | |||
130 | private void WriteRegistrySearchXml(XmlTextWriter writer, WixRegistrySearchTuple tuple) | ||
131 | { | ||
132 | writer.WriteStartElement("RegistrySearch"); | ||
133 | |||
134 | base.WriteXml(writer); | ||
135 | |||
136 | switch (tuple.Root) | ||
137 | { | ||
138 | case RegistryRootType.ClassesRoot: | ||
139 | writer.WriteAttributeString("Root", "HKCR"); | ||
140 | break; | ||
141 | case RegistryRootType.CurrentUser: | ||
142 | writer.WriteAttributeString("Root", "HKCU"); | ||
143 | break; | ||
144 | case RegistryRootType.LocalMachine: | ||
145 | writer.WriteAttributeString("Root", "HKLM"); | ||
146 | break; | ||
147 | case RegistryRootType.Users: | ||
148 | writer.WriteAttributeString("Root", "HKU"); | ||
149 | break; | ||
150 | } | ||
151 | |||
152 | writer.WriteAttributeString("Key", tuple.Key); | ||
153 | |||
154 | if (!String.IsNullOrEmpty(tuple.Value)) | ||
155 | { | ||
156 | writer.WriteAttributeString("Value", tuple.Value); | ||
157 | } | ||
158 | |||
159 | var existenceOnly = 0 != (tuple.Attributes & WixRegistrySearchAttributes.WantExists); | ||
160 | |||
161 | writer.WriteAttributeString("Type", existenceOnly ? "exists" : "value"); | ||
162 | |||
163 | if (0 != (tuple.Attributes & WixRegistrySearchAttributes.Win64)) | ||
164 | { | ||
165 | writer.WriteAttributeString("Win64", "yes"); | ||
166 | } | ||
167 | |||
168 | if (!existenceOnly) | ||
169 | { | ||
170 | if (0 != (tuple.Attributes & WixRegistrySearchAttributes.ExpandEnvironmentVariables)) | ||
171 | { | ||
172 | writer.WriteAttributeString("ExpandEnvironment", "yes"); | ||
173 | } | ||
174 | |||
175 | // We *always* say this is VariableType="string". If we end up | ||
176 | // needing to be more specific, we will have to expand the "Format" | ||
177 | // attribute to allow "number" and "version". | ||
178 | |||
179 | writer.WriteAttributeString("VariableType", "string"); | ||
180 | } | ||
181 | |||
182 | writer.WriteEndElement(); | ||
183 | } | ||
184 | } | ||
185 | } | ||