main
cs 468 lines 37.1 KB
Raw
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.Data.WindowsInstaller
4 {
5 using System;
6 using System.Collections.Generic;
7 using System.Linq;
8 using WixToolset.Data.Symbols;
9
10 public static class WindowsInstallerStandard
11 {
12 private static readonly Dictionary<string, WixActionSymbol> standardActionsById;
13 private static readonly HashSet<string> standardActionNames;
14
15 /// <summary>
16 /// References:
17 /// Title: Property Reference [Windows Installer]:
18 /// URL: http://msdn.microsoft.com/library/en-us/msi/setup/property_reference.asp
19 /// </summary>
20 private static readonly HashSet<string> standardProperties = new HashSet<string>
21 {
22 "~", // REG_MULTI_SZ/NULL marker
23 "ACTION",
24 "ADDDEFAULT",
25 "ADDLOCAL",
26 "ADDDSOURCE",
27 "AdminProperties",
28 "AdminUser",
29 "ADVERTISE",
30 "AFTERREBOOT",
31 "AllowProductCodeMismatches",
32 "AllowProductVersionMajorMismatches",
33 "ALLUSERS",
34 "Alpha",
35 "ApiPatchingSymbolFlags",
36 "ARPAUTHORIZEDCDFPREFIX",
37 "ARPCOMMENTS",
38 "ARPCONTACT",
39 "ARPHELPLINK",
40 "ARPHELPTELEPHONE",
41 "ARPINSTALLLOCATION",
42 "ARPNOMODIFY",
43 "ARPNOREMOVE",
44 "ARPNOREPAIR",
45 "ARPPRODUCTIONICON",
46 "ARPREADME",
47 "ARPSIZE",
48 "ARPSYSTEMCOMPONENT",
49 "ARPULRINFOABOUT",
50 "ARPURLUPDATEINFO",
51 "AVAILABLEFREEREG",
52 "BorderSize",
53 "BorderTop",
54 "CaptionHeight",
55 "CCP_DRIVE",
56 "ColorBits",
57 "COMPADDLOCAL",
58 "COMPADDSOURCE",
59 "COMPANYNAME",
60 "ComputerName",
61 "CostingComplete",
62 "Date",
63 "DefaultUIFont",
64 "DISABLEADVTSHORTCUTS",
65 "DISABLEMEDIA",
66 "DISABLEROLLBACK",
67 "DiskPrompt",
68 "DontRemoveTempFolderWhenFinished",
69 "EnableUserControl",
70 "EXECUTEACTION",
71 "EXECUTEMODE",
72 "FASTOEM",
73 "FILEADDDEFAULT",
74 "FILEADDLOCAL",
75 "FILEADDSOURCE",
76 "IncludeWholeFilesOnly",
77 "Installed",
78 "INSTALLLEVEL",
79 "Intel",
80 "Intel64",
81 "IsAdminPackage",
82 "LeftUnit",
83 "LIMITUI",
84 "ListOfPatchGUIDsToReplace",
85 "ListOfTargetProductCode",
86 "LOGACTION",
87 "LogonUser",
88 "Manufacturer",
89 "MEDIAPACKAGEPATH",
90 "MediaSourceDir",
91 "MinimumRequiredMsiVersion",
92 "MsiAMD64",
93 "MSIAPRSETTINGSIDENTIFIER",
94 "MSICHECKCRCS",
95 "MSIDISABLERMRESTART",
96 "MSIENFORCEUPGRADECOMPONENTRULES",
97 "MSIFASTINSTALL",
98 "MsiFileToUseToCreatePatchTables",
99 "MsiHiddenProperties",
100 "MSIINSTALLPERUSER",
101 "MSIINSTANCEGUID",
102 "MsiLogFileLocation",
103 "MsiLogging",
104 "MsiNetAssemblySupport",
105 "MSINEWINSTANCE",
106 "MSINODISABLEMEDIA",
107 "MsiNTProductType",
108 "MsiNTSuiteBackOffice",
109 "MsiNTSuiteDataCenter",
110 "MsiNTSuiteEnterprise",
111 "MsiNTSuiteSmallBusiness",
112 "MsiNTSuiteSmallBusinessRestricted",
113 "MsiNTSuiteWebServer",
114 "MsiNTSuitePersonal",
115 "MsiPatchRemovalList",
116 "MSIPATCHREMOVE",
117 "MSIRESTARTMANAGERCONTROL",
118 "MsiRestartManagerSessionKey",
119 "MSIRMSHUTDOWN",
120 "MsiRunningElevated",
121 "MsiUIHideCancel",
122 "MsiUIProgressOnly",
123 "MsiUISourceResOnly",
124 "MsiSystemRebootPending",
125 "MsiWin32AssemblySupport",
126 "NOCOMPANYNAME",
127 "NOUSERNAME",
128 "OLEAdvtSupport",
129 "OptimizePatchSizeForLargeFiles",
130 "OriginalDatabase",
131 "OutOfDiskSpace",
132 "OutOfNoRbDiskSpace",
133 "ParentOriginalDatabase",
134 "ParentProductCode",
135 "PATCH",
136 "PATCH_CACHE_DIR",
137 "PATCH_CACHE_ENABLED",
138 "PatchGUID",
139 "PATCHNEWPACKAGECODE",
140 "PATCHNEWSUMMARYCOMMENTS",
141 "PATCHNEWSUMMARYSUBJECT",
142 "PatchOutputPath",
143 "PatchSourceList",
144 "PhysicalMemory",
145 "PIDKEY",
146 "PIDTemplate",
147 "Preselected",
148 "PRIMARYFOLDER",
149 "PrimaryVolumePath",
150 "PrimaryVolumeSpaceAvailable",
151 "PrimaryVolumeSpaceRemaining",
152 "PrimaryVolumeSpaceRequired",
153 "Privileged",
154 "ProductCode",
155 "ProductID",
156 "ProductLanguage",
157 "ProductName",
158 "ProductState",
159 "ProductVersion",
160 "PROMPTROLLBACKCOST",
161 "REBOOT",
162 "REBOOTPROMPT",
163 "RedirectedDllSupport",
164 "REINSTALL",
165 "REINSTALLMODE",
166 "RemoveAdminTS",
167 "REMOVE",
168 "ReplacedInUseFiles",
169 "RestrictedUserControl",
170 "RESUME",
171 "RollbackDisabled",
172 "ROOTDRIVE",
173 "ScreenX",
174 "ScreenY",
175 "SecureCustomProperties",
176 "ServicePackLevel",
177 "ServicePackLevelMinor",
178 "SEQUENCE",
179 "SharedWindows",
180 "ShellAdvtSupport",
181 "SHORTFILENAMES",
182 "SourceDir",
183 "SOURCELIST",
184 "SystemLanguageID",
185 "TARGETDIR",
186 "TerminalServer",
187 "TextHeight",
188 "Time",
189 "TRANSFORMS",
190 "TRANSFORMSATSOURCE",
191 "TRANSFORMSSECURE",
192 "TTCSupport",
193 "UILevel",
194 "UpdateStarted",
195 "UpgradeCode",
196 "UPGRADINGPRODUCTCODE",
197 "UserLanguageID",
198 "USERNAME",
199 "UserSID",
200 "Version9X",
201 "VersionDatabase",
202 "VersionMsi",
203 "VersionNT",
204 "VersionNT64",
205 "VirtualMemory",
206 "WindowsBuild",
207 "WindowsVolume",
208 };
209
210 private static readonly Dictionary<string, string> standardDirectoryNamesById = new Dictionary<string, string>
211 {
212 ["TARGETDIR"] = "SourceDir",
213 ["AdminToolsFolder"] = "Admin",
214 ["AppDataFolder"] = "AppData",
215 ["CommonAppDataFolder"] = "CommApp",
216 ["CommonFilesFolder"] = "CFiles",
217 ["CommonFiles64Folder"] = "CFiles64",
218 ["CommonFiles6432Folder"] = ".",
219 ["DesktopFolder"] = "Desktop",
220 ["FavoritesFolder"] = "Favs",
221 ["FontsFolder"] = "Fonts",
222 ["LocalAppDataFolder"] = "LocalApp",
223 ["MyPicturesFolder"] = "Pictures",
224 ["NetHoodFolder"] = "NetHood",
225 ["PersonalFolder"] = "Personal",
226 ["PrintHoodFolder"] = "Printers",
227 ["ProgramFilesFolder"] = "PFiles",
228 ["ProgramFiles64Folder"] = "PFiles64",
229 ["ProgramFiles6432Folder"] = ".",
230 ["ProgramMenuFolder"] = "PMenu",
231 ["RecentFolder"] = "Recent",
232 ["SendToFolder"] = "SendTo",
233 ["StartMenuFolder"] = "StrtMenu",
234 ["StartupFolder"] = "StartUp",
235 ["SystemFolder"] = "System",
236 ["System16Folder"] = "System16",
237 ["System64Folder"] = "System64",
238 ["System6432Folder"] = ".",
239 ["TempFolder"] = "Temp",
240 ["TemplateFolder"] = "Template",
241 ["WindowsFolder"] = "Windows",
242 };
243
244
245 static WindowsInstallerStandard()
246 {
247 var standardActions = new[]
248 {
249 // AdminExecuteSequence
250 new WixActionSymbol(null, new Identifier(AccessModifier.Virtual, "AdminExecuteSequence/LaunchConditions")) { Action="LaunchConditions", Sequence=100, SequenceTable=SequenceTable.AdminExecuteSequence },
251 new WixActionSymbol(null, new Identifier(AccessModifier.Virtual, "AdminExecuteSequence/CostInitialize")) { Action="CostInitialize", Sequence=800, SequenceTable=SequenceTable.AdminExecuteSequence },
252 new WixActionSymbol(null, new Identifier(AccessModifier.Virtual, "AdminExecuteSequence/FileCost")) { Action="FileCost", Sequence=900, SequenceTable=SequenceTable.AdminExecuteSequence },
253 new WixActionSymbol(null, new Identifier(AccessModifier.Virtual, "AdminExecuteSequence/CostFinalize")) { Action="CostFinalize", Sequence=1000, SequenceTable=SequenceTable.AdminExecuteSequence },
254 new WixActionSymbol(null, new Identifier(AccessModifier.Virtual, "AdminExecuteSequence/InstallValidate")) { Action="InstallValidate", Sequence=1400, SequenceTable=SequenceTable.AdminExecuteSequence },
255 new WixActionSymbol(null, new Identifier(AccessModifier.Virtual, "AdminExecuteSequence/InstallInitialize")) { Action="InstallInitialize", Sequence=1500, SequenceTable=SequenceTable.AdminExecuteSequence },
256 new WixActionSymbol(null, new Identifier(AccessModifier.Virtual, "AdminExecuteSequence/InstallAdminPackage")) { Action="InstallAdminPackage",Sequence=3900, SequenceTable=SequenceTable.AdminExecuteSequence },
257 new WixActionSymbol(null, new Identifier(AccessModifier.Virtual, "AdminExecuteSequence/InstallFiles")) { Action="InstallFiles", Sequence=4000, SequenceTable=SequenceTable.AdminExecuteSequence },
258 new WixActionSymbol(null, new Identifier(AccessModifier.Virtual, "AdminExecuteSequence/PatchFiles")) { Action="PatchFiles", Sequence=4090, SequenceTable=SequenceTable.AdminExecuteSequence },
259 new WixActionSymbol(null, new Identifier(AccessModifier.Virtual, "AdminExecuteSequence/InstallFinalize")) { Action="InstallFinalize", Sequence=6600, SequenceTable=SequenceTable.AdminExecuteSequence },
260
261 // AdminUISequence
262 new WixActionSymbol(null, new Identifier(AccessModifier.Virtual, "AdminUISequence/LaunchConditions")) { Action="LaunchConditions", Sequence=100, SequenceTable=SequenceTable.AdminUISequence },
263 new WixActionSymbol(null, new Identifier(AccessModifier.Virtual, "AdminUISequence/CostInitialize")) { Action="CostInitialize", Sequence=800, SequenceTable=SequenceTable.AdminUISequence },
264 new WixActionSymbol(null, new Identifier(AccessModifier.Virtual, "AdminUISequence/FileCost")) { Action="FileCost", Sequence=900, SequenceTable=SequenceTable.AdminUISequence },
265 new WixActionSymbol(null, new Identifier(AccessModifier.Virtual, "AdminUISequence/CostFinalize")) { Action="CostFinalize", Sequence=1000, SequenceTable=SequenceTable.AdminUISequence },
266 new WixActionSymbol(null, new Identifier(AccessModifier.Virtual, "AdminUISequence/ExecuteAction")) { Action="ExecuteAction", Sequence=1300, SequenceTable=SequenceTable.AdminUISequence },
267
268 // AdvertiseExecuteSequence
269 new WixActionSymbol(null, new Identifier(AccessModifier.Virtual, "AdvertiseExecuteSequence/CostInitialize")) { Action="CostInitialize", Sequence=800, SequenceTable=SequenceTable.AdvertiseExecuteSequence },
270 new WixActionSymbol(null, new Identifier(AccessModifier.Virtual, "AdvertiseExecuteSequence/CostFinalize")) { Action="CostFinalize", Sequence=1000, SequenceTable=SequenceTable.AdvertiseExecuteSequence },
271 new WixActionSymbol(null, new Identifier(AccessModifier.Virtual, "AdvertiseExecuteSequence/InstallValidate")) { Action="InstallValidate", Sequence=1400, SequenceTable=SequenceTable.AdvertiseExecuteSequence },
272 new WixActionSymbol(null, new Identifier(AccessModifier.Virtual, "AdvertiseExecuteSequence/InstallInitialize")) { Action="InstallInitialize", Sequence=1500, SequenceTable=SequenceTable.AdvertiseExecuteSequence },
273 new WixActionSymbol(null, new Identifier(AccessModifier.Virtual, "AdvertiseExecuteSequence/CreateShortcuts")) { Action="CreateShortcuts", Sequence=4500, SequenceTable=SequenceTable.AdvertiseExecuteSequence },
274 new WixActionSymbol(null, new Identifier(AccessModifier.Virtual, "AdvertiseExecuteSequence/RegisterClassInfo")) { Action="RegisterClassInfo", Sequence=4600, SequenceTable=SequenceTable.AdvertiseExecuteSequence },
275 new WixActionSymbol(null, new Identifier(AccessModifier.Virtual, "AdvertiseExecuteSequence/RegisterExtensionInfo")) { Action="RegisterExtensionInfo", Sequence=4700, SequenceTable=SequenceTable.AdvertiseExecuteSequence },
276 new WixActionSymbol(null, new Identifier(AccessModifier.Virtual, "AdvertiseExecuteSequence/RegisterProgIdInfo")) { Action="RegisterProgIdInfo", Sequence=4800, SequenceTable=SequenceTable.AdvertiseExecuteSequence },
277 new WixActionSymbol(null, new Identifier(AccessModifier.Virtual, "AdvertiseExecuteSequence/RegisterMIMEInfo")) { Action="RegisterMIMEInfo", Sequence=4900, SequenceTable=SequenceTable.AdvertiseExecuteSequence },
278 new WixActionSymbol(null, new Identifier(AccessModifier.Virtual, "AdvertiseExecuteSequence/PublishComponents")) { Action="PublishComponents", Sequence=6200, SequenceTable=SequenceTable.AdvertiseExecuteSequence },
279 new WixActionSymbol(null, new Identifier(AccessModifier.Virtual, "AdvertiseExecuteSequence/MsiPublishAssemblies")) { Action="MsiPublishAssemblies", Sequence=6250, SequenceTable=SequenceTable.AdvertiseExecuteSequence },
280 new WixActionSymbol(null, new Identifier(AccessModifier.Virtual, "AdvertiseExecuteSequence/PublishFeatures")) { Action="PublishFeatures", Sequence=6300, SequenceTable=SequenceTable.AdvertiseExecuteSequence },
281 new WixActionSymbol(null, new Identifier(AccessModifier.Virtual, "AdvertiseExecuteSequence/PublishProduct")) { Action="PublishProduct", Sequence=6400, SequenceTable=SequenceTable.AdvertiseExecuteSequence },
282 new WixActionSymbol(null, new Identifier(AccessModifier.Virtual, "AdvertiseExecuteSequence/InstallFinalize")) { Action="InstallFinalize", Sequence=6600, SequenceTable=SequenceTable.AdvertiseExecuteSequence },
283
284 // InstallUISequence
285 new WixActionSymbol(null, new Identifier(AccessModifier.Virtual, "InstallUISequence/FindRelatedProducts")) { Action="FindRelatedProducts", Sequence=25, SequenceTable=SequenceTable.InstallUISequence },
286 new WixActionSymbol(null, new Identifier(AccessModifier.Virtual, "InstallUISequence/AppSearch")) { Action="AppSearch", Sequence=50, SequenceTable=SequenceTable.InstallUISequence },
287 new WixActionSymbol(null, new Identifier(AccessModifier.Virtual, "InstallUISequence/LaunchConditions")) { Action="LaunchConditions", Sequence=100, SequenceTable=SequenceTable.InstallUISequence },
288 new WixActionSymbol(null, new Identifier(AccessModifier.Virtual, "InstallUISequence/CCPSearch")) { Action="CCPSearch", Sequence=500, SequenceTable=SequenceTable.InstallUISequence, Condition="NOT Installed" },
289 new WixActionSymbol(null, new Identifier(AccessModifier.Virtual, "InstallUISequence/RMCCPSearch")) { Action="RMCCPSearch", Sequence=600, SequenceTable=SequenceTable.InstallUISequence, Condition="NOT Installed" },
290 new WixActionSymbol(null, new Identifier(AccessModifier.Virtual, "InstallUISequence/ValidateProductID")) { Action="ValidateProductID", Sequence=700, SequenceTable=SequenceTable.InstallUISequence },
291 new WixActionSymbol(null, new Identifier(AccessModifier.Virtual, "InstallUISequence/CostInitialize")) { Action="CostInitialize", Sequence=800, SequenceTable=SequenceTable.InstallUISequence },
292 new WixActionSymbol(null, new Identifier(AccessModifier.Virtual, "InstallUISequence/FileCost")) { Action="FileCost", Sequence=900, SequenceTable=SequenceTable.InstallUISequence },
293 new WixActionSymbol(null, new Identifier(AccessModifier.Virtual, "InstallUISequence/IsolateComponents")) { Action="IsolateComponents", Sequence=950, SequenceTable=SequenceTable.InstallUISequence },
294 new WixActionSymbol(null, new Identifier(AccessModifier.Virtual, "InstallUISequence/CostFinalize")) { Action="CostFinalize", Sequence=1000, SequenceTable=SequenceTable.InstallUISequence },
295 new WixActionSymbol(null, new Identifier(AccessModifier.Virtual, "InstallUISequence/MigrateFeatureStates")) { Action="MigrateFeatureStates", Sequence=1200, SequenceTable=SequenceTable.InstallUISequence },
296 new WixActionSymbol(null, new Identifier(AccessModifier.Virtual, "InstallUISequence/ExecuteAction")) { Action="ExecuteAction", Sequence=1300, SequenceTable=SequenceTable.InstallUISequence },
297
298 // InstallExecuteSequence
299 new WixActionSymbol(null, new Identifier(AccessModifier.Virtual, "InstallExecuteSequence/FindRelatedProducts")) { Action="FindRelatedProducts", Sequence=25, SequenceTable=SequenceTable.InstallExecuteSequence },
300 new WixActionSymbol(null, new Identifier(AccessModifier.Virtual, "InstallExecuteSequence/AppSearch")) { Action="AppSearch", Sequence=50, SequenceTable=SequenceTable.InstallExecuteSequence },
301 new WixActionSymbol(null, new Identifier(AccessModifier.Virtual, "InstallExecuteSequence/LaunchConditions")) { Action="LaunchConditions", Sequence=100, SequenceTable=SequenceTable.InstallExecuteSequence },
302 new WixActionSymbol(null, new Identifier(AccessModifier.Virtual, "InstallExecuteSequence/CCPSearch")) { Action="CCPSearch", Sequence=500, SequenceTable=SequenceTable.InstallExecuteSequence, Condition="NOT Installed" },
303 new WixActionSymbol(null, new Identifier(AccessModifier.Virtual, "InstallExecuteSequence/RMCCPSearch")) { Action="RMCCPSearch", Sequence=600, SequenceTable=SequenceTable.InstallExecuteSequence, Condition="NOT Installed" },
304 new WixActionSymbol(null, new Identifier(AccessModifier.Virtual, "InstallExecuteSequence/ValidateProductID")) { Action="ValidateProductID", Sequence=700, SequenceTable=SequenceTable.InstallExecuteSequence },
305 new WixActionSymbol(null, new Identifier(AccessModifier.Virtual, "InstallExecuteSequence/CostInitialize")) { Action="CostInitialize", Sequence=800, SequenceTable=SequenceTable.InstallExecuteSequence },
306 new WixActionSymbol(null, new Identifier(AccessModifier.Virtual, "InstallExecuteSequence/FileCost")) { Action="FileCost", Sequence=900, SequenceTable=SequenceTable.InstallExecuteSequence },
307 new WixActionSymbol(null, new Identifier(AccessModifier.Virtual, "InstallExecuteSequence/IsolateComponents")) { Action="IsolateComponents", Sequence=950, SequenceTable=SequenceTable.InstallExecuteSequence },
308 new WixActionSymbol(null, new Identifier(AccessModifier.Virtual, "InstallExecuteSequence/CostFinalize")) { Action="CostFinalize", Sequence=1000, SequenceTable=SequenceTable.InstallExecuteSequence },
309 new WixActionSymbol(null, new Identifier(AccessModifier.Virtual, "InstallExecuteSequence/SetODBCFolders")) { Action="SetODBCFolders", Sequence=1100, SequenceTable=SequenceTable.InstallExecuteSequence },
310 new WixActionSymbol(null, new Identifier(AccessModifier.Virtual, "InstallExecuteSequence/MigrateFeatureStates")) { Action="MigrateFeatureStates", Sequence=1200, SequenceTable=SequenceTable.InstallExecuteSequence },
311 new WixActionSymbol(null, new Identifier(AccessModifier.Virtual, "InstallExecuteSequence/InstallValidate")) { Action="InstallValidate", Sequence=1400, SequenceTable=SequenceTable.InstallExecuteSequence },
312 new WixActionSymbol(null, new Identifier(AccessModifier.Virtual, "InstallExecuteSequence/InstallInitialize")) { Action="InstallInitialize", Sequence=1500, SequenceTable=SequenceTable.InstallExecuteSequence },
313 new WixActionSymbol(null, new Identifier(AccessModifier.Virtual, "InstallExecuteSequence/AllocateRegistrySpace")) { Action="AllocateRegistrySpace", Sequence=1550, SequenceTable=SequenceTable.InstallExecuteSequence },
314 new WixActionSymbol(null, new Identifier(AccessModifier.Virtual, "InstallExecuteSequence/ProcessComponents")) { Action="ProcessComponents", Sequence=1600, SequenceTable=SequenceTable.InstallExecuteSequence },
315 new WixActionSymbol(null, new Identifier(AccessModifier.Virtual, "InstallExecuteSequence/UnpublishComponents")) { Action="UnpublishComponents", Sequence=1700, SequenceTable=SequenceTable.InstallExecuteSequence },
316 new WixActionSymbol(null, new Identifier(AccessModifier.Virtual, "InstallExecuteSequence/MsiUnpublishAssemblies")) { Action="MsiUnpublishAssemblies", Sequence=1750, SequenceTable=SequenceTable.InstallExecuteSequence },
317 new WixActionSymbol(null, new Identifier(AccessModifier.Virtual, "InstallExecuteSequence/UnpublishFeatures")) { Action="UnpublishFeatures", Sequence=1800, SequenceTable=SequenceTable.InstallExecuteSequence },
318 new WixActionSymbol(null, new Identifier(AccessModifier.Virtual, "InstallExecuteSequence/StopServices")) { Action="StopServices", Sequence=1900, SequenceTable=SequenceTable.InstallExecuteSequence, Condition="VersionNT" },
319 new WixActionSymbol(null, new Identifier(AccessModifier.Virtual, "InstallExecuteSequence/DeleteServices")) { Action="DeleteServices", Sequence=2000, SequenceTable=SequenceTable.InstallExecuteSequence, Condition="VersionNT" },
320 new WixActionSymbol(null, new Identifier(AccessModifier.Virtual, "InstallExecuteSequence/UnregisterComPlus")) { Action="UnregisterComPlus", Sequence=2100, SequenceTable=SequenceTable.InstallExecuteSequence },
321 new WixActionSymbol(null, new Identifier(AccessModifier.Virtual, "InstallExecuteSequence/SelfUnregModules")) { Action="SelfUnregModules", Sequence=2200, SequenceTable=SequenceTable.InstallExecuteSequence },
322 new WixActionSymbol(null, new Identifier(AccessModifier.Virtual, "InstallExecuteSequence/UnregisterTypeLibraries")) { Action="UnregisterTypeLibraries", Sequence=2300, SequenceTable=SequenceTable.InstallExecuteSequence },
323 new WixActionSymbol(null, new Identifier(AccessModifier.Virtual, "InstallExecuteSequence/RemoveODBC")) { Action="RemoveODBC", Sequence=2400, SequenceTable=SequenceTable.InstallExecuteSequence },
324 new WixActionSymbol(null, new Identifier(AccessModifier.Virtual, "InstallExecuteSequence/UnregisterFonts")) { Action="UnregisterFonts", Sequence=2500, SequenceTable=SequenceTable.InstallExecuteSequence },
325 new WixActionSymbol(null, new Identifier(AccessModifier.Virtual, "InstallExecuteSequence/RemoveRegistryValues")) { Action="RemoveRegistryValues", Sequence=2600, SequenceTable=SequenceTable.InstallExecuteSequence },
326 new WixActionSymbol(null, new Identifier(AccessModifier.Virtual, "InstallExecuteSequence/UnregisterClassInfo")) { Action="UnregisterClassInfo", Sequence=2700, SequenceTable=SequenceTable.InstallExecuteSequence },
327 new WixActionSymbol(null, new Identifier(AccessModifier.Virtual, "InstallExecuteSequence/UnregisterExtensionInfo")) { Action="UnregisterExtensionInfo", Sequence=2800, SequenceTable=SequenceTable.InstallExecuteSequence },
328 new WixActionSymbol(null, new Identifier(AccessModifier.Virtual, "InstallExecuteSequence/UnregisterProgIdInfo")) { Action="UnregisterProgIdInfo", Sequence=2900, SequenceTable=SequenceTable.InstallExecuteSequence },
329 new WixActionSymbol(null, new Identifier(AccessModifier.Virtual, "InstallExecuteSequence/UnregisterMIMEInfo")) { Action="UnregisterMIMEInfo", Sequence=3000, SequenceTable=SequenceTable.InstallExecuteSequence },
330 new WixActionSymbol(null, new Identifier(AccessModifier.Virtual, "InstallExecuteSequence/RemoveIniValues")) { Action="RemoveIniValues", Sequence=3100, SequenceTable=SequenceTable.InstallExecuteSequence },
331 new WixActionSymbol(null, new Identifier(AccessModifier.Virtual, "InstallExecuteSequence/RemoveShortcuts")) { Action="RemoveShortcuts", Sequence=3200, SequenceTable=SequenceTable.InstallExecuteSequence },
332 new WixActionSymbol(null, new Identifier(AccessModifier.Virtual, "InstallExecuteSequence/RemoveEnvironmentStrings")) { Action="RemoveEnvironmentStrings", Sequence=3300, SequenceTable=SequenceTable.InstallExecuteSequence },
333 new WixActionSymbol(null, new Identifier(AccessModifier.Virtual, "InstallExecuteSequence/RemoveDuplicateFiles")) { Action="RemoveDuplicateFiles", Sequence=3400, SequenceTable=SequenceTable.InstallExecuteSequence },
334 new WixActionSymbol(null, new Identifier(AccessModifier.Virtual, "InstallExecuteSequence/RemoveFiles")) { Action="RemoveFiles", Sequence=3500, SequenceTable=SequenceTable.InstallExecuteSequence },
335 new WixActionSymbol(null, new Identifier(AccessModifier.Virtual, "InstallExecuteSequence/RemoveFolders")) { Action="RemoveFolders", Sequence=3600, SequenceTable=SequenceTable.InstallExecuteSequence },
336 new WixActionSymbol(null, new Identifier(AccessModifier.Virtual, "InstallExecuteSequence/CreateFolders")) { Action="CreateFolders", Sequence=3700, SequenceTable=SequenceTable.InstallExecuteSequence },
337 new WixActionSymbol(null, new Identifier(AccessModifier.Virtual, "InstallExecuteSequence/MoveFiles")) { Action="MoveFiles", Sequence=3800, SequenceTable=SequenceTable.InstallExecuteSequence },
338 new WixActionSymbol(null, new Identifier(AccessModifier.Virtual, "InstallExecuteSequence/InstallFiles")) { Action="InstallFiles", Sequence=4000, SequenceTable=SequenceTable.InstallExecuteSequence },
339 new WixActionSymbol(null, new Identifier(AccessModifier.Virtual, "InstallExecuteSequence/PatchFiles")) { Action="PatchFiles", Sequence=4090, SequenceTable=SequenceTable.InstallExecuteSequence },
340 new WixActionSymbol(null, new Identifier(AccessModifier.Virtual, "InstallExecuteSequence/DuplicateFiles")) { Action="DuplicateFiles", Sequence=4210, SequenceTable=SequenceTable.InstallExecuteSequence },
341 new WixActionSymbol(null, new Identifier(AccessModifier.Virtual, "InstallExecuteSequence/BindImage")) { Action="BindImage", Sequence=4300, SequenceTable=SequenceTable.InstallExecuteSequence },
342 new WixActionSymbol(null, new Identifier(AccessModifier.Virtual, "InstallExecuteSequence/CreateShortcuts")) { Action="CreateShortcuts", Sequence=4500, SequenceTable=SequenceTable.InstallExecuteSequence },
343 new WixActionSymbol(null, new Identifier(AccessModifier.Virtual, "InstallExecuteSequence/RegisterClassInfo")) { Action="RegisterClassInfo", Sequence=4600, SequenceTable=SequenceTable.InstallExecuteSequence },
344 new WixActionSymbol(null, new Identifier(AccessModifier.Virtual, "InstallExecuteSequence/RegisterExtensionInfo")) { Action="RegisterExtensionInfo", Sequence=4700, SequenceTable=SequenceTable.InstallExecuteSequence },
345 new WixActionSymbol(null, new Identifier(AccessModifier.Virtual, "InstallExecuteSequence/RegisterProgIdInfo")) { Action="RegisterProgIdInfo", Sequence=4800, SequenceTable=SequenceTable.InstallExecuteSequence },
346 new WixActionSymbol(null, new Identifier(AccessModifier.Virtual, "InstallExecuteSequence/RegisterMIMEInfo")) { Action="RegisterMIMEInfo", Sequence=4900, SequenceTable=SequenceTable.InstallExecuteSequence },
347 new WixActionSymbol(null, new Identifier(AccessModifier.Virtual, "InstallExecuteSequence/WriteRegistryValues")) { Action="WriteRegistryValues", Sequence=5000, SequenceTable=SequenceTable.InstallExecuteSequence },
348 new WixActionSymbol(null, new Identifier(AccessModifier.Virtual, "InstallExecuteSequence/WriteIniValues")) { Action="WriteIniValues", Sequence=5100, SequenceTable=SequenceTable.InstallExecuteSequence },
349 new WixActionSymbol(null, new Identifier(AccessModifier.Virtual, "InstallExecuteSequence/WriteEnvironmentStrings")) { Action="WriteEnvironmentStrings", Sequence=5200, SequenceTable=SequenceTable.InstallExecuteSequence },
350 new WixActionSymbol(null, new Identifier(AccessModifier.Virtual, "InstallExecuteSequence/RegisterFonts")) { Action="RegisterFonts", Sequence=5300, SequenceTable=SequenceTable.InstallExecuteSequence },
351 new WixActionSymbol(null, new Identifier(AccessModifier.Virtual, "InstallExecuteSequence/InstallODBC")) { Action="InstallODBC", Sequence=5400, SequenceTable=SequenceTable.InstallExecuteSequence },
352 new WixActionSymbol(null, new Identifier(AccessModifier.Virtual, "InstallExecuteSequence/RegisterTypeLibraries")) { Action="RegisterTypeLibraries", Sequence=5500, SequenceTable=SequenceTable.InstallExecuteSequence },
353 new WixActionSymbol(null, new Identifier(AccessModifier.Virtual, "InstallExecuteSequence/SelfRegModules")) { Action="SelfRegModules", Sequence=5600, SequenceTable=SequenceTable.InstallExecuteSequence },
354 new WixActionSymbol(null, new Identifier(AccessModifier.Virtual, "InstallExecuteSequence/RegisterComPlus")) { Action="RegisterComPlus", Sequence=5700, SequenceTable=SequenceTable.InstallExecuteSequence },
355 new WixActionSymbol(null, new Identifier(AccessModifier.Virtual, "InstallExecuteSequence/InstallServices")) { Action="InstallServices", Sequence=5800, SequenceTable=SequenceTable.InstallExecuteSequence, Condition="VersionNT" },
356 new WixActionSymbol(null, new Identifier(AccessModifier.Virtual, "InstallExecuteSequence/MsiConfigureServices")) { Action="MsiConfigureServices", Sequence=5850, SequenceTable=SequenceTable.InstallExecuteSequence, Condition="VersionNT>=600" },
357 new WixActionSymbol(null, new Identifier(AccessModifier.Virtual, "InstallExecuteSequence/StartServices")) { Action="StartServices", Sequence=5900, SequenceTable=SequenceTable.InstallExecuteSequence, Condition="VersionNT" },
358 new WixActionSymbol(null, new Identifier(AccessModifier.Virtual, "InstallExecuteSequence/RegisterUser")) { Action="RegisterUser", Sequence=6000, SequenceTable=SequenceTable.InstallExecuteSequence },
359 new WixActionSymbol(null, new Identifier(AccessModifier.Virtual, "InstallExecuteSequence/RegisterProduct")) { Action="RegisterProduct", Sequence=6100, SequenceTable=SequenceTable.InstallExecuteSequence },
360 new WixActionSymbol(null, new Identifier(AccessModifier.Virtual, "InstallExecuteSequence/PublishComponents")) { Action="PublishComponents", Sequence=6200, SequenceTable=SequenceTable.InstallExecuteSequence },
361 new WixActionSymbol(null, new Identifier(AccessModifier.Virtual, "InstallExecuteSequence/MsiPublishAssemblies")) { Action="MsiPublishAssemblies", Sequence=6250, SequenceTable=SequenceTable.InstallExecuteSequence },
362 new WixActionSymbol(null, new Identifier(AccessModifier.Virtual, "InstallExecuteSequence/PublishFeatures")) { Action="PublishFeatures", Sequence=6300, SequenceTable=SequenceTable.InstallExecuteSequence },
363 new WixActionSymbol(null, new Identifier(AccessModifier.Virtual, "InstallExecuteSequence/PublishProduct")) { Action="PublishProduct", Sequence=6400, SequenceTable=SequenceTable.InstallExecuteSequence },
364 new WixActionSymbol(null, new Identifier(AccessModifier.Virtual, "InstallExecuteSequence/InstallExecute")) { Action="InstallExecute", Sequence=6500, SequenceTable=SequenceTable.InstallExecuteSequence, Condition="NOT Installed" },
365 new WixActionSymbol(null, new Identifier(AccessModifier.Virtual, "InstallExecuteSequence/InstallExecuteAgain")) { Action="InstallExecuteAgain", Sequence=6550, SequenceTable=SequenceTable.InstallExecuteSequence, Condition="NOT Installed" },
366 new WixActionSymbol(null, new Identifier(AccessModifier.Virtual, "InstallExecuteSequence/InstallFinalize")) { Action="InstallFinalize", Sequence=6600, SequenceTable=SequenceTable.InstallExecuteSequence },
367 };
368
369 standardActionNames = new HashSet<string>(standardActions.Select(a => a.Action));
370 standardActionsById = standardActions.ToDictionary(a => a.Id.Id);
371 }
372
373 /// <summary>
374 /// Find out if an action is a standard action.
375 /// </summary>
376 /// <param name="actionName">Name of the action.</param>
377 /// <returns>true if the action is standard, false otherwise.</returns>
378 public static bool IsStandardAction(string actionName)
379 {
380 return standardActionNames.Contains(actionName);
381 }
382
383 /// <summary>
384 /// Standard actions.
385 /// </summary>
386 public static IReadOnlyCollection<WixActionSymbol> StandardActions()
387 {
388 return standardActionsById.Values;
389 }
390
391 /// <summary>
392 /// Standard directory identifiers.
393 /// </summary>
394 public static IReadOnlyCollection<string> StandardDirectoryIds()
395 {
396 return standardDirectoryNamesById.Keys;
397 }
398
399 /// <summary>
400 /// Gets the platform specific directory id for a directory. Most directories are not platform
401 /// specific and return themselves.
402 /// </summary>
403 /// <param name="directoryId">Directory id to get platform specific.</param>
404 /// <param name="platform">Platform to use.</param>
405 /// <returns>Platform specific directory id.</returns>
406 public static string GetPlatformSpecificDirectoryId(string directoryId, Platform platform)
407 {
408 switch (directoryId)
409 {
410 case "CommonFiles6432Folder":
411 return platform == Platform.X86 ? "CommonFilesFolder" : "CommonFiles64Folder";
412
413 case "ProgramFiles6432Folder":
414 return platform == Platform.X86 ? "ProgramFilesFolder" : "ProgramFiles64Folder";
415
416 case "System6432Folder":
417 return platform == Platform.X86 ? "SystemFolder" : "System64Folder";
418
419 default:
420 return directoryId;
421 }
422 }
423
424 /// <summary>
425 /// Find out if a directory is a standard directory.
426 /// </summary>
427 /// <param name="directoryId">Name of the directory.</param>
428 /// <returns>true if the directory is standard, false otherwise.</returns>
429 public static bool IsStandardDirectory(string directoryId)
430 {
431 return standardDirectoryNamesById.ContainsKey(directoryId);
432 }
433
434 /// <summary>
435 /// Find out if a property is a standard property.
436 /// </summary>
437 /// <param name="propertyName">Name of the property.</param>
438 /// <returns>true if a property is standard, false otherwise.</returns>
439 public static bool IsStandardProperty(string propertyName)
440 {
441 return standardProperties.Contains(propertyName);
442 }
443
444 /// <summary>
445 /// Try to get standard action by id.
446 /// </summary>
447 public static bool TryGetStandardAction(string id, out WixActionSymbol standardAction)
448 {
449 return standardActionsById.TryGetValue(id, out standardAction);
450 }
451
452 /// <summary>
453 /// Try to get standard action by sequence and action name.
454 /// </summary>
455 public static bool TryGetStandardAction(string sequenceName, string actioname, out WixActionSymbol standardAction)
456 {
457 return standardActionsById.TryGetValue(String.Concat(sequenceName, "/", actioname), out standardAction);
458 }
459
460 /// <summary>
461 /// Try to get standard directory name by id.
462 /// </summary>
463 public static bool TryGetStandardDirectoryName(string directoryId, out string name)
464 {
465 return standardDirectoryNamesById.TryGetValue(directoryId, out name);
466 }
467 }
468 }