aboutsummaryrefslogtreecommitdiff
path: root/src/WixToolset.Core.Burn/Bind/LegacySearchFacade.cs
diff options
context:
space:
mode:
Diffstat (limited to 'src/WixToolset.Core.Burn/Bind/LegacySearchFacade.cs')
-rw-r--r--src/WixToolset.Core.Burn/Bind/LegacySearchFacade.cs185
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
3namespace 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}