aboutsummaryrefslogtreecommitdiff
path: root/src/WixToolset.Data.WindowsInstaller
diff options
context:
space:
mode:
authorRob Mensching <rob@firegiant.com>2017-11-11 01:45:59 -0800
committerRob Mensching <rob@firegiant.com>2017-11-11 01:45:59 -0800
commit9f8cb5374481b6c8a06eb2739858332350f72666 (patch)
tree4b09b90d8a516cb5e7d8203759bd2489b6a5d20c /src/WixToolset.Data.WindowsInstaller
parent2bb37beda887d120a0ddabf874ad25357101faa1 (diff)
downloadwix-9f8cb5374481b6c8a06eb2739858332350f72666.tar.gz
wix-9f8cb5374481b6c8a06eb2739858332350f72666.tar.bz2
wix-9f8cb5374481b6c8a06eb2739858332350f72666.zip
Additional IR updates
Diffstat (limited to 'src/WixToolset.Data.WindowsInstaller')
-rw-r--r--src/WixToolset.Data.WindowsInstaller/Data/tables.xml2
-rw-r--r--src/WixToolset.Data.WindowsInstaller/RowDictionary.cs3
-rw-r--r--src/WixToolset.Data.WindowsInstaller/Rows/SymbolPathType.cs17
-rw-r--r--src/WixToolset.Data.WindowsInstaller/Rows/WixActionRow.cs52
-rw-r--r--src/WixToolset.Data.WindowsInstaller/Rows/WixActionRowCollection.cs1
-rw-r--r--src/WixToolset.Data.WindowsInstaller/Rows/WixDeltaPatchSymbolPathsRow.cs2
-rw-r--r--src/WixToolset.Data.WindowsInstaller/TableDefinitionCollection.cs11
-rw-r--r--src/WixToolset.Data.WindowsInstaller/WindowsInstallerStandard.cs442
-rw-r--r--src/WixToolset.Data.WindowsInstaller/WindowsInstallerStandardInternal.cs59
9 files changed, 103 insertions, 486 deletions
diff --git a/src/WixToolset.Data.WindowsInstaller/Data/tables.xml b/src/WixToolset.Data.WindowsInstaller/Data/tables.xml
index 280d87a8..e4b5e954 100644
--- a/src/WixToolset.Data.WindowsInstaller/Data/tables.xml
+++ b/src/WixToolset.Data.WindowsInstaller/Data/tables.xml
@@ -1468,7 +1468,7 @@
1468 <columnDefinition name="PatchGroup" type="number" length="4" /> 1468 <columnDefinition name="PatchGroup" type="number" length="4" />
1469 <columnDefinition name="Attributes" type="number" length="4"/> 1469 <columnDefinition name="Attributes" type="number" length="4"/>
1470 <columnDefinition name="PatchAttributes" type="number" length="4" nullable="yes"/> 1470 <columnDefinition name="PatchAttributes" type="number" length="4" nullable="yes"/>
1471 <columnDefinition name="DeltaPatchHeaderSource" type="string" length="0"/> 1471 <columnDefinition name="DeltaPatchHeaderSource" type="string" length="0" nullable="yes"/>
1472 </tableDefinition> 1472 </tableDefinition>
1473 <tableDefinition name="WixBindUpdatedFiles" unreal="yes"> 1473 <tableDefinition name="WixBindUpdatedFiles" unreal="yes">
1474 <columnDefinition name="File_" type="string" length="0" primaryKey="yes" modularize="column" keyTable="File" keyColumn="1" category="identifier" /> 1474 <columnDefinition name="File_" type="string" length="0" primaryKey="yes" modularize="column" keyTable="File" keyColumn="1" category="identifier" />
diff --git a/src/WixToolset.Data.WindowsInstaller/RowDictionary.cs b/src/WixToolset.Data.WindowsInstaller/RowDictionary.cs
index a0cc5302..5756db71 100644
--- a/src/WixToolset.Data.WindowsInstaller/RowDictionary.cs
+++ b/src/WixToolset.Data.WindowsInstaller/RowDictionary.cs
@@ -77,8 +77,7 @@ namespace WixToolset.Data
77 /// <returns>Row or null if key is not found.</returns> 77 /// <returns>Row or null if key is not found.</returns>
78 public T Get(string key) 78 public T Get(string key)
79 { 79 {
80 T result; 80 return this.TryGetValue(key, out var result) ? result : null;
81 return this.TryGetValue(key, out result) ? result : null;
82 } 81 }
83 } 82 }
84} 83}
diff --git a/src/WixToolset.Data.WindowsInstaller/Rows/SymbolPathType.cs b/src/WixToolset.Data.WindowsInstaller/Rows/SymbolPathType.cs
deleted file mode 100644
index 964e1caa..00000000
--- a/src/WixToolset.Data.WindowsInstaller/Rows/SymbolPathType.cs
+++ /dev/null
@@ -1,17 +0,0 @@
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.Data.Rows
4{
5 /// <summary>
6 /// The types that the WixDeltaPatchSymbolPaths table can hold.
7 /// </summary>
8 /// <remarks>The order of these values is important since WixDeltaPatchSymbolPaths are sorted by this type.</remarks>
9 public enum SymbolPathType
10 {
11 File,
12 Component,
13 Directory,
14 Media,
15 Product
16 };
17}
diff --git a/src/WixToolset.Data.WindowsInstaller/Rows/WixActionRow.cs b/src/WixToolset.Data.WindowsInstaller/Rows/WixActionRow.cs
index 3009e59d..d1be706e 100644
--- a/src/WixToolset.Data.WindowsInstaller/Rows/WixActionRow.cs
+++ b/src/WixToolset.Data.WindowsInstaller/Rows/WixActionRow.cs
@@ -8,27 +8,28 @@ namespace WixToolset.Data.Rows
8 using System.Globalization; 8 using System.Globalization;
9 using System.Xml; 9 using System.Xml;
10 using System.Xml.Schema; 10 using System.Xml.Schema;
11 using WixToolset.Data.Tuples;
11 12
12 /// <summary> 13 /// <summary>
13 /// The Sequence tables that actions may belong to. 14 /// The Sequence tables that actions may belong to.
14 /// </summary> 15 /// </summary>
15 public enum SequenceTable 16 //public enum SequenceTable
16 { 17 //{
17 /// <summary>AdminUISequence</summary> 18 // /// <summary>AdminUISequence</summary>
18 AdminUISequence, 19 // AdminUISequence,
19 20
20 /// <summary>AdminExecuteSequence</summary> 21 // /// <summary>AdminExecuteSequence</summary>
21 AdminExecuteSequence, 22 // AdminExecuteSequence,
22 23
23 /// <summary>AdvtExecuteSequence</summary> 24 // /// <summary>AdvtExecuteSequence</summary>
24 AdvtExecuteSequence, 25 // AdvtExecuteSequence,
25 26
26 /// <summary>InstallUISequence</summary> 27 // /// <summary>InstallUISequence</summary>
27 InstallUISequence, 28 // InstallUISequence,
28 29
29 /// <summary>InstallExecuteSequence</summary> 30 // /// <summary>InstallExecuteSequence</summary>
30 InstallExecuteSequence 31 // InstallExecuteSequence
31 } 32 //}
32 33
33 /// <summary> 34 /// <summary>
34 /// Specialization of a row for the sequence tables. 35 /// Specialization of a row for the sequence tables.
@@ -55,15 +56,15 @@ namespace WixToolset.Data.Rows
55 /// <param name="action">The name of the standard action.</param> 56 /// <param name="action">The name of the standard action.</param>
56 /// <param name="condition">The condition of the standard action.</param> 57 /// <param name="condition">The condition of the standard action.</param>
57 /// <param name="sequence">The suggested sequence number of the standard action.</param> 58 /// <param name="sequence">The suggested sequence number of the standard action.</param>
58 private WixActionRow(SequenceTable sequenceTable, string action, string condition, int sequence) : 59 //private WixActionRow(SequenceTable sequenceTable, string action, string condition, int sequence) :
59 base(null, WindowsInstallerStandard.GetTableDefinitions()["WixAction"]) 60 // base(null, WindowsInstallerStandard.GetTableDefinitions()["WixAction"])
60 { 61 //{
61 this.SequenceTable = sequenceTable; 62 // this.SequenceTable = sequenceTable;
62 this.Action = action; 63 // this.Action = action;
63 this.Condition = condition; 64 // this.Condition = condition;
64 this.Sequence = sequence; 65 // this.Sequence = sequence;
65 this.Overridable = true; // all standard actions are overridable by default 66 // this.Overridable = true; // all standard actions are overridable by default
66 } 67 //}
67 68
68 /// <summary> 69 /// <summary>
69 /// Instantiates an ActionRow by copying data from another ActionRow. 70 /// Instantiates an ActionRow by copying data from another ActionRow.
@@ -296,13 +297,15 @@ namespace WixToolset.Data.Rows
296 WixActionRow[] actionRows = new WixActionRow[sequenceCount]; 297 WixActionRow[] actionRows = new WixActionRow[sequenceCount];
297 for (int i = 0; i < sequenceCount; i++) 298 for (int i = 0; i < sequenceCount; i++)
298 { 299 {
299 WixActionRow actionRow = new WixActionRow(sequenceTables[i], id, condition, sequence); 300 //WixActionRow actionRow = new WixActionRow(sequenceTables[i], id, condition, sequence);
300 actionRows[i] = actionRow; 301 //actionRows[i] = actionRow;
302 throw new NotImplementedException();
301 } 303 }
302 304
303 return actionRows; 305 return actionRows;
304 } 306 }
305 307
308#if DEAD_CODE
306 /// <summary> 309 /// <summary>
307 /// Determines whether this ActionRow contains the specified ActionRow as a child in its dependency tree. 310 /// Determines whether this ActionRow contains the specified ActionRow as a child in its dependency tree.
308 /// </summary> 311 /// </summary>
@@ -370,5 +373,6 @@ namespace WixToolset.Data.Rows
370 } 373 }
371 } 374 }
372 } 375 }
376#endif
373 } 377 }
374} 378}
diff --git a/src/WixToolset.Data.WindowsInstaller/Rows/WixActionRowCollection.cs b/src/WixToolset.Data.WindowsInstaller/Rows/WixActionRowCollection.cs
index 513a104f..9fab6b5d 100644
--- a/src/WixToolset.Data.WindowsInstaller/Rows/WixActionRowCollection.cs
+++ b/src/WixToolset.Data.WindowsInstaller/Rows/WixActionRowCollection.cs
@@ -6,6 +6,7 @@ namespace WixToolset.Data.Rows
6 using System.Collections; 6 using System.Collections;
7 using System.Diagnostics; 7 using System.Diagnostics;
8 using System.Xml; 8 using System.Xml;
9 using WixToolset.Data.Tuples;
9 10
10 /// <summary> 11 /// <summary>
11 /// A collection of action rows sorted by their sequence table and action name. 12 /// A collection of action rows sorted by their sequence table and action name.
diff --git a/src/WixToolset.Data.WindowsInstaller/Rows/WixDeltaPatchSymbolPathsRow.cs b/src/WixToolset.Data.WindowsInstaller/Rows/WixDeltaPatchSymbolPathsRow.cs
index b6c0b840..3be5a56d 100644
--- a/src/WixToolset.Data.WindowsInstaller/Rows/WixDeltaPatchSymbolPathsRow.cs
+++ b/src/WixToolset.Data.WindowsInstaller/Rows/WixDeltaPatchSymbolPathsRow.cs
@@ -2,6 +2,8 @@
2 2
3namespace WixToolset.Data.Rows 3namespace WixToolset.Data.Rows
4{ 4{
5 using WixToolset.Data.Tuples;
6
5 /// <summary> 7 /// <summary>
6 /// Specialization of a row for the WixDeltaPatchSymbolPaths table. 8 /// Specialization of a row for the WixDeltaPatchSymbolPaths table.
7 /// </summary> 9 /// </summary>
diff --git a/src/WixToolset.Data.WindowsInstaller/TableDefinitionCollection.cs b/src/WixToolset.Data.WindowsInstaller/TableDefinitionCollection.cs
index 553f0eaa..26d56387 100644
--- a/src/WixToolset.Data.WindowsInstaller/TableDefinitionCollection.cs
+++ b/src/WixToolset.Data.WindowsInstaller/TableDefinitionCollection.cs
@@ -69,6 +69,17 @@ namespace WixToolset.Data
69 } 69 }
70 70
71 /// <summary> 71 /// <summary>
72 /// Tries to get a table definition by name.
73 /// </summary>
74 /// <param name="tableName">Name of table to locate.</param>
75 /// <param name="table">Table definition if found.</param>
76 /// <returns>True if table definition was found otherwise false.</returns>
77 public bool TryGet(string tableName, out TableDefinition table)
78 {
79 return this.collection.TryGetValue(tableName, out table);
80 }
81
82 /// <summary>
72 /// Load a table definition collection from an XmlReader. 83 /// Load a table definition collection from an XmlReader.
73 /// </summary> 84 /// </summary>
74 /// <param name="reader">Reader to get data from.</param> 85 /// <param name="reader">Reader to get data from.</param>
diff --git a/src/WixToolset.Data.WindowsInstaller/WindowsInstallerStandard.cs b/src/WixToolset.Data.WindowsInstaller/WindowsInstallerStandard.cs
deleted file mode 100644
index ee4a5103..00000000
--- a/src/WixToolset.Data.WindowsInstaller/WindowsInstallerStandard.cs
+++ /dev/null
@@ -1,442 +0,0 @@
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.Data
4{
5 using System.Collections.Generic;
6 using System.Reflection;
7 using System.Xml;
8 using WixToolset.Data.Rows;
9
10 /// <summary>
11 /// Represents the Windows Installer standard objects.
12 /// </summary>
13 public static class WindowsInstallerStandard
14 {
15 private static readonly object lockObject = new object();
16
17 private static TableDefinitionCollection tableDefinitions;
18 private static WixActionRowCollection standardActions;
19
20 private static HashSet<string> standardActionNames;
21 private static HashSet<string> standardDirectories;
22 private static HashSet<string> standardProperties;
23
24 /// <summary>
25 /// Gets the table definitions stored in this assembly.
26 /// </summary>
27 /// <returns>Table definition collection for tables stored in this assembly.</returns>
28 public static TableDefinitionCollection GetTableDefinitions()
29 {
30 lock (lockObject)
31 {
32 if (null == WindowsInstallerStandard.tableDefinitions)
33 {
34 using (XmlReader reader = XmlReader.Create(Assembly.GetExecutingAssembly().GetManifestResourceStream("WixToolset.Data.WindowsInstaller.Data.tables.xml")))
35 {
36 tableDefinitions = TableDefinitionCollection.Load(reader);
37 }
38 }
39 }
40
41 return WindowsInstallerStandard.tableDefinitions;
42 }
43
44 /// <summary>
45 /// Gets the standard actions stored in this assembly.
46 /// </summary>
47 /// <returns>Collection of standard actions in this assembly.</returns>
48 public static WixActionRowCollection GetStandardActions()
49 {
50 lock (lockObject)
51 {
52 if (null == standardActions)
53 {
54 using (XmlReader reader = XmlReader.Create(Assembly.GetExecutingAssembly().GetManifestResourceStream("WixToolset.Data.WindowsInstaller.Data.actions.xml")))
55 {
56 standardActions = WixActionRowCollection.Load(reader);
57 }
58 }
59 }
60
61 return standardActions;
62 }
63
64 /// <summary>
65 /// Gets (and loads if not yet loaded) the list of standard MSI directories.
66 /// </summary>
67 /// <value>The list of standard MSI directories.</value>
68 public static HashSet<string> GetStandardDirectories()
69 {
70 lock (lockObject)
71 {
72 if (null == standardDirectories)
73 {
74 LoadStandardDirectories();
75 }
76 }
77
78 return standardDirectories;
79 }
80
81 /// <summary>
82 /// Find out if an action is a standard action.
83 /// </summary>
84 /// <param name="actionName">Name of the action.</param>
85 /// <returns>true if the action is standard, false otherwise.</returns>
86 public static bool IsStandardAction(string actionName)
87 {
88 lock (lockObject)
89 {
90 if (null == standardActionNames)
91 {
92 standardActionNames = new HashSet<string>();
93 standardActionNames.Add("AllocateRegistrySpace");
94 standardActionNames.Add("AppSearch");
95 standardActionNames.Add("BindImage");
96 standardActionNames.Add("CCPSearch");
97 standardActionNames.Add("CostFinalize");
98 standardActionNames.Add("CostInitialize");
99 standardActionNames.Add("CreateFolders");
100 standardActionNames.Add("CreateShortcuts");
101 standardActionNames.Add("DeleteServices");
102 standardActionNames.Add("DisableRollback");
103 standardActionNames.Add("DuplicateFiles");
104 standardActionNames.Add("ExecuteAction");
105 standardActionNames.Add("FileCost");
106 standardActionNames.Add("FindRelatedProducts");
107 standardActionNames.Add("ForceReboot");
108 standardActionNames.Add("InstallAdminPackage");
109 standardActionNames.Add("InstallExecute");
110 standardActionNames.Add("InstallExecuteAgain");
111 standardActionNames.Add("InstallFiles");
112 standardActionNames.Add("InstallFinalize");
113 standardActionNames.Add("InstallInitialize");
114 standardActionNames.Add("InstallODBC");
115 standardActionNames.Add("InstallServices");
116 standardActionNames.Add("InstallSFPCatalogFile");
117 standardActionNames.Add("InstallValidate");
118 standardActionNames.Add("IsolateComponents");
119 standardActionNames.Add("LaunchConditions");
120 standardActionNames.Add("MigrateFeatureStates");
121 standardActionNames.Add("MoveFiles");
122 standardActionNames.Add("MsiConfigureServices");
123 standardActionNames.Add("MsiPublishAssemblies");
124 standardActionNames.Add("MsiUnpublishAssemblies");
125 standardActionNames.Add("PatchFiles");
126 standardActionNames.Add("ProcessComponents");
127 standardActionNames.Add("PublishComponents");
128 standardActionNames.Add("PublishFeatures");
129 standardActionNames.Add("PublishProduct");
130 standardActionNames.Add("RegisterClassInfo");
131 standardActionNames.Add("RegisterComPlus");
132 standardActionNames.Add("RegisterExtensionInfo");
133 standardActionNames.Add("RegisterFonts");
134 standardActionNames.Add("RegisterMIMEInfo");
135 standardActionNames.Add("RegisterProduct");
136 standardActionNames.Add("RegisterProgIdInfo");
137 standardActionNames.Add("RegisterTypeLibraries");
138 standardActionNames.Add("RegisterUser");
139 standardActionNames.Add("RemoveDuplicateFiles");
140 standardActionNames.Add("RemoveEnvironmentStrings");
141 standardActionNames.Add("RemoveExistingProducts");
142 standardActionNames.Add("RemoveFiles");
143 standardActionNames.Add("RemoveFolders");
144 standardActionNames.Add("RemoveIniValues");
145 standardActionNames.Add("RemoveODBC");
146 standardActionNames.Add("RemoveRegistryValues");
147 standardActionNames.Add("RemoveShortcuts");
148 standardActionNames.Add("ResolveSource");
149 standardActionNames.Add("RMCCPSearch");
150 standardActionNames.Add("ScheduleReboot");
151 standardActionNames.Add("SelfRegModules");
152 standardActionNames.Add("SelfUnregModules");
153 standardActionNames.Add("SetODBCFolders");
154 standardActionNames.Add("StartServices");
155 standardActionNames.Add("StopServices");
156 standardActionNames.Add("UnpublishComponents");
157 standardActionNames.Add("UnpublishFeatures");
158 standardActionNames.Add("UnregisterClassInfo");
159 standardActionNames.Add("UnregisterComPlus");
160 standardActionNames.Add("UnregisterExtensionInfo");
161 standardActionNames.Add("UnregisterFonts");
162 standardActionNames.Add("UnregisterMIMEInfo");
163 standardActionNames.Add("UnregisterProgIdInfo");
164 standardActionNames.Add("UnregisterTypeLibraries");
165 standardActionNames.Add("ValidateProductID");
166 standardActionNames.Add("WriteEnvironmentStrings");
167 standardActionNames.Add("WriteIniValues");
168 standardActionNames.Add("WriteRegistryValues");
169 }
170 }
171
172 return standardActionNames.Contains(actionName);
173 }
174
175 /// <summary>
176 /// Find out if a directory is a standard directory.
177 /// </summary>
178 /// <param name="directoryName">Name of the directory.</param>
179 /// <returns>true if the directory is standard, false otherwise.</returns>
180 public static bool IsStandardDirectory(string directoryName)
181 {
182 lock (lockObject)
183 {
184 if (null == standardDirectories)
185 {
186 LoadStandardDirectories();
187 }
188 }
189
190 return standardDirectories.Contains(directoryName);
191 }
192
193 /// <summary>
194 /// Find out if a property is a standard property.
195 /// References:
196 /// Title: Property Reference [Windows Installer]:
197 /// URL: http://msdn.microsoft.com/library/en-us/msi/setup/property_reference.asp
198 /// </summary>
199 /// <param name="propertyName">Name of the property.</param>
200 /// <returns>true if a property is standard, false otherwise.</returns>
201 public static bool IsStandardProperty(string propertyName)
202 {
203 lock (lockObject)
204 {
205 if (null == standardProperties)
206 {
207 standardProperties = new HashSet<string>();
208 standardProperties.Add("~"); // REG_MULTI_SZ/NULL marker
209 standardProperties.Add("ACTION");
210 standardProperties.Add("ADDDEFAULT");
211 standardProperties.Add("ADDLOCAL");
212 standardProperties.Add("ADDDSOURCE");
213 standardProperties.Add("AdminProperties");
214 standardProperties.Add("AdminUser");
215 standardProperties.Add("ADVERTISE");
216 standardProperties.Add("AFTERREBOOT");
217 standardProperties.Add("AllowProductCodeMismatches");
218 standardProperties.Add("AllowProductVersionMajorMismatches");
219 standardProperties.Add("ALLUSERS");
220 standardProperties.Add("Alpha");
221 standardProperties.Add("ApiPatchingSymbolFlags");
222 standardProperties.Add("ARPAUTHORIZEDCDFPREFIX");
223 standardProperties.Add("ARPCOMMENTS");
224 standardProperties.Add("ARPCONTACT");
225 standardProperties.Add("ARPHELPLINK");
226 standardProperties.Add("ARPHELPTELEPHONE");
227 standardProperties.Add("ARPINSTALLLOCATION");
228 standardProperties.Add("ARPNOMODIFY");
229 standardProperties.Add("ARPNOREMOVE");
230 standardProperties.Add("ARPNOREPAIR");
231 standardProperties.Add("ARPPRODUCTIONICON");
232 standardProperties.Add("ARPREADME");
233 standardProperties.Add("ARPSIZE");
234 standardProperties.Add("ARPSYSTEMCOMPONENT");
235 standardProperties.Add("ARPULRINFOABOUT");
236 standardProperties.Add("ARPURLUPDATEINFO");
237 standardProperties.Add("AVAILABLEFREEREG");
238 standardProperties.Add("BorderSize");
239 standardProperties.Add("BorderTop");
240 standardProperties.Add("CaptionHeight");
241 standardProperties.Add("CCP_DRIVE");
242 standardProperties.Add("ColorBits");
243 standardProperties.Add("COMPADDLOCAL");
244 standardProperties.Add("COMPADDSOURCE");
245 standardProperties.Add("COMPANYNAME");
246 standardProperties.Add("ComputerName");
247 standardProperties.Add("CostingComplete");
248 standardProperties.Add("Date");
249 standardProperties.Add("DefaultUIFont");
250 standardProperties.Add("DISABLEADVTSHORTCUTS");
251 standardProperties.Add("DISABLEMEDIA");
252 standardProperties.Add("DISABLEROLLBACK");
253 standardProperties.Add("DiskPrompt");
254 standardProperties.Add("DontRemoveTempFolderWhenFinished");
255 standardProperties.Add("EnableUserControl");
256 standardProperties.Add("EXECUTEACTION");
257 standardProperties.Add("EXECUTEMODE");
258 standardProperties.Add("FASTOEM");
259 standardProperties.Add("FILEADDDEFAULT");
260 standardProperties.Add("FILEADDLOCAL");
261 standardProperties.Add("FILEADDSOURCE");
262 standardProperties.Add("IncludeWholeFilesOnly");
263 standardProperties.Add("Installed");
264 standardProperties.Add("INSTALLLEVEL");
265 standardProperties.Add("Intel");
266 standardProperties.Add("Intel64");
267 standardProperties.Add("IsAdminPackage");
268 standardProperties.Add("LeftUnit");
269 standardProperties.Add("LIMITUI");
270 standardProperties.Add("ListOfPatchGUIDsToReplace");
271 standardProperties.Add("ListOfTargetProductCode");
272 standardProperties.Add("LOGACTION");
273 standardProperties.Add("LogonUser");
274 standardProperties.Add("Manufacturer");
275 standardProperties.Add("MEDIAPACKAGEPATH");
276 standardProperties.Add("MediaSourceDir");
277 standardProperties.Add("MinimumRequiredMsiVersion");
278 standardProperties.Add("MsiAMD64");
279 standardProperties.Add("MSIAPRSETTINGSIDENTIFIER");
280 standardProperties.Add("MSICHECKCRCS");
281 standardProperties.Add("MSIDISABLERMRESTART");
282 standardProperties.Add("MSIENFORCEUPGRADECOMPONENTRULES");
283 standardProperties.Add("MSIFASTINSTALL");
284 standardProperties.Add("MsiFileToUseToCreatePatchTables");
285 standardProperties.Add("MsiHiddenProperties");
286 standardProperties.Add("MSIINSTALLPERUSER");
287 standardProperties.Add("MSIINSTANCEGUID");
288 standardProperties.Add("MsiLogFileLocation");
289 standardProperties.Add("MsiLogging");
290 standardProperties.Add("MsiNetAssemblySupport");
291 standardProperties.Add("MSINEWINSTANCE");
292 standardProperties.Add("MSINODISABLEMEDIA");
293 standardProperties.Add("MsiNTProductType");
294 standardProperties.Add("MsiNTSuiteBackOffice");
295 standardProperties.Add("MsiNTSuiteDataCenter");
296 standardProperties.Add("MsiNTSuiteEnterprise");
297 standardProperties.Add("MsiNTSuiteSmallBusiness");
298 standardProperties.Add("MsiNTSuiteSmallBusinessRestricted");
299 standardProperties.Add("MsiNTSuiteWebServer");
300 standardProperties.Add("MsiNTSuitePersonal");
301 standardProperties.Add("MsiPatchRemovalList");
302 standardProperties.Add("MSIPATCHREMOVE");
303 standardProperties.Add("MSIRESTARTMANAGERCONTROL");
304 standardProperties.Add("MsiRestartManagerSessionKey");
305 standardProperties.Add("MSIRMSHUTDOWN");
306 standardProperties.Add("MsiRunningElevated");
307 standardProperties.Add("MsiUIHideCancel");
308 standardProperties.Add("MsiUIProgressOnly");
309 standardProperties.Add("MsiUISourceResOnly");
310 standardProperties.Add("MsiSystemRebootPending");
311 standardProperties.Add("MsiWin32AssemblySupport");
312 standardProperties.Add("NOCOMPANYNAME");
313 standardProperties.Add("NOUSERNAME");
314 standardProperties.Add("OLEAdvtSupport");
315 standardProperties.Add("OptimizePatchSizeForLargeFiles");
316 standardProperties.Add("OriginalDatabase");
317 standardProperties.Add("OutOfDiskSpace");
318 standardProperties.Add("OutOfNoRbDiskSpace");
319 standardProperties.Add("ParentOriginalDatabase");
320 standardProperties.Add("ParentProductCode");
321 standardProperties.Add("PATCH");
322 standardProperties.Add("PATCH_CACHE_DIR");
323 standardProperties.Add("PATCH_CACHE_ENABLED");
324 standardProperties.Add("PatchGUID");
325 standardProperties.Add("PATCHNEWPACKAGECODE");
326 standardProperties.Add("PATCHNEWSUMMARYCOMMENTS");
327 standardProperties.Add("PATCHNEWSUMMARYSUBJECT");
328 standardProperties.Add("PatchOutputPath");
329 standardProperties.Add("PatchSourceList");
330 standardProperties.Add("PhysicalMemory");
331 standardProperties.Add("PIDKEY");
332 standardProperties.Add("PIDTemplate");
333 standardProperties.Add("Preselected");
334 standardProperties.Add("PRIMARYFOLDER");
335 standardProperties.Add("PrimaryVolumePath");
336 standardProperties.Add("PrimaryVolumeSpaceAvailable");
337 standardProperties.Add("PrimaryVolumeSpaceRemaining");
338 standardProperties.Add("PrimaryVolumeSpaceRequired");
339 standardProperties.Add("Privileged");
340 standardProperties.Add("ProductCode");
341 standardProperties.Add("ProductID");
342 standardProperties.Add("ProductLanguage");
343 standardProperties.Add("ProductName");
344 standardProperties.Add("ProductState");
345 standardProperties.Add("ProductVersion");
346 standardProperties.Add("PROMPTROLLBACKCOST");
347 standardProperties.Add("REBOOT");
348 standardProperties.Add("REBOOTPROMPT");
349 standardProperties.Add("RedirectedDllSupport");
350 standardProperties.Add("REINSTALL");
351 standardProperties.Add("REINSTALLMODE");
352 standardProperties.Add("RemoveAdminTS");
353 standardProperties.Add("REMOVE");
354 standardProperties.Add("ReplacedInUseFiles");
355 standardProperties.Add("RestrictedUserControl");
356 standardProperties.Add("RESUME");
357 standardProperties.Add("RollbackDisabled");
358 standardProperties.Add("ROOTDRIVE");
359 standardProperties.Add("ScreenX");
360 standardProperties.Add("ScreenY");
361 standardProperties.Add("SecureCustomProperties");
362 standardProperties.Add("ServicePackLevel");
363 standardProperties.Add("ServicePackLevelMinor");
364 standardProperties.Add("SEQUENCE");
365 standardProperties.Add("SharedWindows");
366 standardProperties.Add("ShellAdvtSupport");
367 standardProperties.Add("SHORTFILENAMES");
368 standardProperties.Add("SourceDir");
369 standardProperties.Add("SOURCELIST");
370 standardProperties.Add("SystemLanguageID");
371 standardProperties.Add("TARGETDIR");
372 standardProperties.Add("TerminalServer");
373 standardProperties.Add("TextHeight");
374 standardProperties.Add("Time");
375 standardProperties.Add("TRANSFORMS");
376 standardProperties.Add("TRANSFORMSATSOURCE");
377 standardProperties.Add("TRANSFORMSSECURE");
378 standardProperties.Add("TTCSupport");
379 standardProperties.Add("UILevel");
380 standardProperties.Add("UpdateStarted");
381 standardProperties.Add("UpgradeCode");
382 standardProperties.Add("UPGRADINGPRODUCTCODE");
383 standardProperties.Add("UserLanguageID");
384 standardProperties.Add("USERNAME");
385 standardProperties.Add("UserSID");
386 standardProperties.Add("Version9X");
387 standardProperties.Add("VersionDatabase");
388 standardProperties.Add("VersionMsi");
389 standardProperties.Add("VersionNT");
390 standardProperties.Add("VersionNT64");
391 standardProperties.Add("VirtualMemory");
392 standardProperties.Add("WindowsBuild");
393 standardProperties.Add("WindowsVolume");
394 }
395 }
396
397 return standardProperties.Contains(propertyName);
398 }
399
400 /// <summary>
401 /// Sets up a hashtable with the set of standard MSI directories
402 /// </summary>
403 private static void LoadStandardDirectories()
404 {
405 lock (lockObject)
406 {
407 if (null == standardDirectories)
408 {
409 standardDirectories = new HashSet<string>();
410 standardDirectories.Add("TARGETDIR");
411 standardDirectories.Add("AdminToolsFolder");
412 standardDirectories.Add("AppDataFolder");
413 standardDirectories.Add("CommonAppDataFolder");
414 standardDirectories.Add("CommonFilesFolder");
415 standardDirectories.Add("DesktopFolder");
416 standardDirectories.Add("FavoritesFolder");
417 standardDirectories.Add("FontsFolder");
418 standardDirectories.Add("LocalAppDataFolder");
419 standardDirectories.Add("MyPicturesFolder");
420 standardDirectories.Add("PersonalFolder");
421 standardDirectories.Add("ProgramFilesFolder");
422 standardDirectories.Add("ProgramMenuFolder");
423 standardDirectories.Add("SendToFolder");
424 standardDirectories.Add("StartMenuFolder");
425 standardDirectories.Add("StartupFolder");
426 standardDirectories.Add("System16Folder");
427 standardDirectories.Add("SystemFolder");
428 standardDirectories.Add("TempFolder");
429 standardDirectories.Add("TemplateFolder");
430 standardDirectories.Add("WindowsFolder");
431 standardDirectories.Add("CommonFiles64Folder");
432 standardDirectories.Add("ProgramFiles64Folder");
433 standardDirectories.Add("System64Folder");
434 standardDirectories.Add("NetHoodFolder");
435 standardDirectories.Add("PrintHoodFolder");
436 standardDirectories.Add("RecentFolder");
437 standardDirectories.Add("WindowsVolume");
438 }
439 }
440 }
441 }
442}
diff --git a/src/WixToolset.Data.WindowsInstaller/WindowsInstallerStandardInternal.cs b/src/WixToolset.Data.WindowsInstaller/WindowsInstallerStandardInternal.cs
new file mode 100644
index 00000000..cc6754c3
--- /dev/null
+++ b/src/WixToolset.Data.WindowsInstaller/WindowsInstallerStandardInternal.cs
@@ -0,0 +1,59 @@
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.Data
4{
5 using System.Reflection;
6 using System.Xml;
7 using WixToolset.Data.Rows;
8
9 /// <summary>
10 /// Represents the Windows Installer standard objects.
11 /// </summary>
12 public static class WindowsInstallerStandardInternal
13 {
14 private static readonly object lockObject = new object();
15
16 private static TableDefinitionCollection tableDefinitions;
17 private static WixActionRowCollection standardActions;
18
19 /// <summary>
20 /// Gets the table definitions stored in this assembly.
21 /// </summary>
22 /// <returns>Table definition collection for tables stored in this assembly.</returns>
23 public static TableDefinitionCollection GetTableDefinitions()
24 {
25 lock (lockObject)
26 {
27 if (null == WindowsInstallerStandardInternal.tableDefinitions)
28 {
29 using (XmlReader reader = XmlReader.Create(Assembly.GetExecutingAssembly().GetManifestResourceStream("WixToolset.Data.WindowsInstaller.Data.tables.xml")))
30 {
31 WindowsInstallerStandardInternal.tableDefinitions = TableDefinitionCollection.Load(reader);
32 }
33 }
34 }
35
36 return WindowsInstallerStandardInternal.tableDefinitions;
37 }
38
39 /// <summary>
40 /// Gets the standard actions stored in this assembly.
41 /// </summary>
42 /// <returns>Collection of standard actions in this assembly.</returns>
43 public static WixActionRowCollection GetStandardActionRows()
44 {
45 lock (lockObject)
46 {
47 if (null == WindowsInstallerStandardInternal.standardActions)
48 {
49 using (XmlReader reader = XmlReader.Create(Assembly.GetExecutingAssembly().GetManifestResourceStream("WixToolset.Data.WindowsInstaller.Data.actions.xml")))
50 {
51 WindowsInstallerStandardInternal.standardActions = WixActionRowCollection.Load(reader);
52 }
53 }
54 }
55
56 return WindowsInstallerStandardInternal.standardActions;
57 }
58 }
59}