aboutsummaryrefslogtreecommitdiff
path: root/src/WixToolset.Data/WindowsInstaller
diff options
context:
space:
mode:
authorRob Mensching <rob@firegiant.com>2019-05-08 13:35:21 -0700
committerRob Mensching <rob@firegiant.com>2019-05-08 13:44:59 -0700
commitef6485ac4a03333701d343c1e3a52d25805c58f1 (patch)
tree3093b1410e651a90c3776b42090bb4e62e98c514 /src/WixToolset.Data/WindowsInstaller
parent6e7a3274a1710a734e5369d0a1703b9c9ac9345b (diff)
downloadwix-ef6485ac4a03333701d343c1e3a52d25805c58f1.tar.gz
wix-ef6485ac4a03333701d343c1e3a52d25805c58f1.tar.bz2
wix-ef6485ac4a03333701d343c1e3a52d25805c58f1.zip
Add additional strongly typed tuples
Diffstat (limited to 'src/WixToolset.Data/WindowsInstaller')
-rw-r--r--src/WixToolset.Data/WindowsInstaller/Rows/ComponentRow.cs50
-rw-r--r--src/WixToolset.Data/WindowsInstaller/Rows/FileRow.cs17
-rw-r--r--src/WixToolset.Data/WindowsInstaller/WindowsInstallerConstants.cs259
-rw-r--r--src/WixToolset.Data/WindowsInstaller/WindowsInstallerStandard.cs506
4 files changed, 797 insertions, 35 deletions
diff --git a/src/WixToolset.Data/WindowsInstaller/Rows/ComponentRow.cs b/src/WixToolset.Data/WindowsInstaller/Rows/ComponentRow.cs
index 50ef5313..001703ee 100644
--- a/src/WixToolset.Data/WindowsInstaller/Rows/ComponentRow.cs
+++ b/src/WixToolset.Data/WindowsInstaller/Rows/ComponentRow.cs
@@ -2,8 +2,6 @@
2 2
3namespace WixToolset.Data.WindowsInstaller.Rows 3namespace WixToolset.Data.WindowsInstaller.Rows
4{ 4{
5 using WixToolset.Data.Msi;
6
7 /// <summary> 5 /// <summary>
8 /// Specialization of a row for the Component table. 6 /// Specialization of a row for the Component table.
9 /// </summary> 7 /// </summary>
@@ -57,16 +55,16 @@ namespace WixToolset.Data.WindowsInstaller.Rows
57 /// <value>Local only attribute of the component.</value> 55 /// <value>Local only attribute of the component.</value>
58 public bool IsLocalOnly 56 public bool IsLocalOnly
59 { 57 {
60 get { return MsiInterop.MsidbComponentAttributesLocalOnly == ((int)this.Fields[3].Data & MsiInterop.MsidbComponentAttributesLocalOnly); } 58 get { return WindowsInstallerConstants.MsidbComponentAttributesLocalOnly == ((int)this.Fields[3].Data & WindowsInstallerConstants.MsidbComponentAttributesLocalOnly); }
61 set 59 set
62 { 60 {
63 if (value) 61 if (value)
64 { 62 {
65 this.Fields[3].Data = (int)this.Fields[3].Data | MsiInterop.MsidbComponentAttributesLocalOnly; 63 this.Fields[3].Data = (int)this.Fields[3].Data | WindowsInstallerConstants.MsidbComponentAttributesLocalOnly;
66 } 64 }
67 else 65 else
68 { 66 {
69 this.Fields[3].Data = (int)this.Fields[3].Data & ~MsiInterop.MsidbComponentAttributesLocalOnly; 67 this.Fields[3].Data = (int)this.Fields[3].Data & ~WindowsInstallerConstants.MsidbComponentAttributesLocalOnly;
70 } 68 }
71 } 69 }
72 } 70 }
@@ -77,16 +75,16 @@ namespace WixToolset.Data.WindowsInstaller.Rows
77 /// <value>Source only attribute of the component.</value> 75 /// <value>Source only attribute of the component.</value>
78 public bool IsSourceOnly 76 public bool IsSourceOnly
79 { 77 {
80 get { return MsiInterop.MsidbComponentAttributesSourceOnly == ((int)this.Fields[3].Data & MsiInterop.MsidbComponentAttributesSourceOnly); } 78 get { return WindowsInstallerConstants.MsidbComponentAttributesSourceOnly == ((int)this.Fields[3].Data & WindowsInstallerConstants.MsidbComponentAttributesSourceOnly); }
81 set 79 set
82 { 80 {
83 if (value) 81 if (value)
84 { 82 {
85 this.Fields[3].Data = (int)this.Fields[3].Data | MsiInterop.MsidbComponentAttributesSourceOnly; 83 this.Fields[3].Data = (int)this.Fields[3].Data | WindowsInstallerConstants.MsidbComponentAttributesSourceOnly;
86 } 84 }
87 else 85 else
88 { 86 {
89 this.Fields[3].Data = (int)this.Fields[3].Data & ~MsiInterop.MsidbComponentAttributesSourceOnly; 87 this.Fields[3].Data = (int)this.Fields[3].Data & ~WindowsInstallerConstants.MsidbComponentAttributesSourceOnly;
90 } 88 }
91 } 89 }
92 } 90 }
@@ -97,16 +95,16 @@ namespace WixToolset.Data.WindowsInstaller.Rows
97 /// <value>Optional attribute of the component.</value> 95 /// <value>Optional attribute of the component.</value>
98 public bool IsOptional 96 public bool IsOptional
99 { 97 {
100 get { return MsiInterop.MsidbComponentAttributesOptional == ((int)this.Fields[3].Data & MsiInterop.MsidbComponentAttributesOptional); } 98 get { return WindowsInstallerConstants.MsidbComponentAttributesOptional == ((int)this.Fields[3].Data & WindowsInstallerConstants.MsidbComponentAttributesOptional); }
101 set 99 set
102 { 100 {
103 if (value) 101 if (value)
104 { 102 {
105 this.Fields[3].Data = (int)this.Fields[3].Data | MsiInterop.MsidbComponentAttributesOptional; 103 this.Fields[3].Data = (int)this.Fields[3].Data | WindowsInstallerConstants.MsidbComponentAttributesOptional;
106 } 104 }
107 else 105 else
108 { 106 {
109 this.Fields[3].Data = (int)this.Fields[3].Data & ~MsiInterop.MsidbComponentAttributesOptional; 107 this.Fields[3].Data = (int)this.Fields[3].Data & ~WindowsInstallerConstants.MsidbComponentAttributesOptional;
110 } 108 }
111 } 109 }
112 } 110 }
@@ -117,16 +115,16 @@ namespace WixToolset.Data.WindowsInstaller.Rows
117 /// <value>Registry key path attribute of the component.</value> 115 /// <value>Registry key path attribute of the component.</value>
118 public bool IsRegistryKeyPath 116 public bool IsRegistryKeyPath
119 { 117 {
120 get { return MsiInterop.MsidbComponentAttributesRegistryKeyPath == ((int)this.Fields[3].Data & MsiInterop.MsidbComponentAttributesRegistryKeyPath); } 118 get { return WindowsInstallerConstants.MsidbComponentAttributesRegistryKeyPath == ((int)this.Fields[3].Data & WindowsInstallerConstants.MsidbComponentAttributesRegistryKeyPath); }
121 set 119 set
122 { 120 {
123 if (value) 121 if (value)
124 { 122 {
125 this.Fields[3].Data = (int)this.Fields[3].Data | MsiInterop.MsidbComponentAttributesRegistryKeyPath; 123 this.Fields[3].Data = (int)this.Fields[3].Data | WindowsInstallerConstants.MsidbComponentAttributesRegistryKeyPath;
126 } 124 }
127 else 125 else
128 { 126 {
129 this.Fields[3].Data = (int)this.Fields[3].Data & ~MsiInterop.MsidbComponentAttributesRegistryKeyPath; 127 this.Fields[3].Data = (int)this.Fields[3].Data & ~WindowsInstallerConstants.MsidbComponentAttributesRegistryKeyPath;
130 } 128 }
131 } 129 }
132 } 130 }
@@ -137,16 +135,16 @@ namespace WixToolset.Data.WindowsInstaller.Rows
137 /// <value>Shared dll ref countattribute of the component.</value> 135 /// <value>Shared dll ref countattribute of the component.</value>
138 public bool IsSharedDll 136 public bool IsSharedDll
139 { 137 {
140 get { return MsiInterop.MsidbComponentAttributesSharedDllRefCount == ((int)this.Fields[3].Data & MsiInterop.MsidbComponentAttributesSharedDllRefCount); } 138 get { return WindowsInstallerConstants.MsidbComponentAttributesSharedDllRefCount == ((int)this.Fields[3].Data & WindowsInstallerConstants.MsidbComponentAttributesSharedDllRefCount); }
141 set 139 set
142 { 140 {
143 if (value) 141 if (value)
144 { 142 {
145 this.Fields[3].Data = (int)this.Fields[3].Data | MsiInterop.MsidbComponentAttributesSharedDllRefCount; 143 this.Fields[3].Data = (int)this.Fields[3].Data | WindowsInstallerConstants.MsidbComponentAttributesSharedDllRefCount;
146 } 144 }
147 else 145 else
148 { 146 {
149 this.Fields[3].Data = (int)this.Fields[3].Data & ~MsiInterop.MsidbComponentAttributesSharedDllRefCount; 147 this.Fields[3].Data = (int)this.Fields[3].Data & ~WindowsInstallerConstants.MsidbComponentAttributesSharedDllRefCount;
150 } 148 }
151 } 149 }
152 } 150 }
@@ -157,16 +155,16 @@ namespace WixToolset.Data.WindowsInstaller.Rows
157 /// <value>Permanent attribute of the component.</value> 155 /// <value>Permanent attribute of the component.</value>
158 public bool IsPermanent 156 public bool IsPermanent
159 { 157 {
160 get { return MsiInterop.MsidbComponentAttributesPermanent == ((int)this.Fields[3].Data & MsiInterop.MsidbComponentAttributesPermanent); } 158 get { return WindowsInstallerConstants.MsidbComponentAttributesPermanent == ((int)this.Fields[3].Data & WindowsInstallerConstants.MsidbComponentAttributesPermanent); }
161 set 159 set
162 { 160 {
163 if (value) 161 if (value)
164 { 162 {
165 this.Fields[3].Data = (int)this.Fields[3].Data | MsiInterop.MsidbComponentAttributesPermanent; 163 this.Fields[3].Data = (int)this.Fields[3].Data | WindowsInstallerConstants.MsidbComponentAttributesPermanent;
166 } 164 }
167 else 165 else
168 { 166 {
169 this.Fields[3].Data = (int)this.Fields[3].Data & ~MsiInterop.MsidbComponentAttributesPermanent; 167 this.Fields[3].Data = (int)this.Fields[3].Data & ~WindowsInstallerConstants.MsidbComponentAttributesPermanent;
170 } 168 }
171 } 169 }
172 } 170 }
@@ -177,16 +175,16 @@ namespace WixToolset.Data.WindowsInstaller.Rows
177 /// <value>ODBC data source key path attribute of the component.</value> 175 /// <value>ODBC data source key path attribute of the component.</value>
178 public bool IsOdbcDataSourceKeyPath 176 public bool IsOdbcDataSourceKeyPath
179 { 177 {
180 get { return MsiInterop.MsidbComponentAttributesODBCDataSource == ((int)this.Fields[3].Data & MsiInterop.MsidbComponentAttributesODBCDataSource); } 178 get { return WindowsInstallerConstants.MsidbComponentAttributesODBCDataSource == ((int)this.Fields[3].Data & WindowsInstallerConstants.MsidbComponentAttributesODBCDataSource); }
181 set 179 set
182 { 180 {
183 if (value) 181 if (value)
184 { 182 {
185 this.Fields[3].Data = (int)this.Fields[3].Data | MsiInterop.MsidbComponentAttributesODBCDataSource; 183 this.Fields[3].Data = (int)this.Fields[3].Data | WindowsInstallerConstants.MsidbComponentAttributesODBCDataSource;
186 } 184 }
187 else 185 else
188 { 186 {
189 this.Fields[3].Data = (int)this.Fields[3].Data & ~MsiInterop.MsidbComponentAttributesODBCDataSource; 187 this.Fields[3].Data = (int)this.Fields[3].Data & ~WindowsInstallerConstants.MsidbComponentAttributesODBCDataSource;
190 } 188 }
191 } 189 }
192 } 190 }
@@ -197,16 +195,16 @@ namespace WixToolset.Data.WindowsInstaller.Rows
197 /// <value>64-bitness of the component.</value> 195 /// <value>64-bitness of the component.</value>
198 public bool Is64Bit 196 public bool Is64Bit
199 { 197 {
200 get { return MsiInterop.MsidbComponentAttributes64bit == ((int)this.Fields[3].Data & MsiInterop.MsidbComponentAttributes64bit); } 198 get { return WindowsInstallerConstants.MsidbComponentAttributes64bit == ((int)this.Fields[3].Data & WindowsInstallerConstants.MsidbComponentAttributes64bit); }
201 set 199 set
202 { 200 {
203 if (value) 201 if (value)
204 { 202 {
205 this.Fields[3].Data = (int)this.Fields[3].Data | MsiInterop.MsidbComponentAttributes64bit; 203 this.Fields[3].Data = (int)this.Fields[3].Data | WindowsInstallerConstants.MsidbComponentAttributes64bit;
206 } 204 }
207 else 205 else
208 { 206 {
209 this.Fields[3].Data = (int)this.Fields[3].Data & ~MsiInterop.MsidbComponentAttributes64bit; 207 this.Fields[3].Data = (int)this.Fields[3].Data & ~WindowsInstallerConstants.MsidbComponentAttributes64bit;
210 } 208 }
211 } 209 }
212 } 210 }
diff --git a/src/WixToolset.Data/WindowsInstaller/Rows/FileRow.cs b/src/WixToolset.Data/WindowsInstaller/Rows/FileRow.cs
index 673d2315..cd3660e4 100644
--- a/src/WixToolset.Data/WindowsInstaller/Rows/FileRow.cs
+++ b/src/WixToolset.Data/WindowsInstaller/Rows/FileRow.cs
@@ -5,7 +5,6 @@ namespace WixToolset.Data.WindowsInstaller.Rows
5 using System; 5 using System;
6 using System.Diagnostics; 6 using System.Diagnostics;
7 using System.Globalization; 7 using System.Globalization;
8 using WixToolset.Data.Msi;
9 8
10 /// <summary> 9 /// <summary>
11 /// Specialization of a row for the file table. 10 /// Specialization of a row for the file table.
@@ -174,8 +173,8 @@ namespace WixToolset.Data.WindowsInstaller.Rows
174 { 173 {
175 get 174 get
176 { 175 {
177 bool compressedFlag = (0 < (this.Attributes & MsiInterop.MsidbFileAttributesCompressed)); 176 bool compressedFlag = (0 < (this.Attributes & WindowsInstallerConstants.MsidbFileAttributesCompressed));
178 bool noncompressedFlag = (0 < (this.Attributes & MsiInterop.MsidbFileAttributesNoncompressed)); 177 bool noncompressedFlag = (0 < (this.Attributes & WindowsInstallerConstants.MsidbFileAttributesNoncompressed));
179 178
180 if (compressedFlag && noncompressedFlag) 179 if (compressedFlag && noncompressedFlag)
181 { 180 {
@@ -200,22 +199,22 @@ namespace WixToolset.Data.WindowsInstaller.Rows
200 if (YesNoType.Yes == value) 199 if (YesNoType.Yes == value)
201 { 200 {
202 // these are mutually exclusive 201 // these are mutually exclusive
203 this.Attributes |= MsiInterop.MsidbFileAttributesCompressed; 202 this.Attributes |= WindowsInstallerConstants.MsidbFileAttributesCompressed;
204 this.Attributes &= ~MsiInterop.MsidbFileAttributesNoncompressed; 203 this.Attributes &= ~WindowsInstallerConstants.MsidbFileAttributesNoncompressed;
205 } 204 }
206 else if (YesNoType.No == value) 205 else if (YesNoType.No == value)
207 { 206 {
208 // these are mutually exclusive 207 // these are mutually exclusive
209 this.Attributes |= MsiInterop.MsidbFileAttributesNoncompressed; 208 this.Attributes |= WindowsInstallerConstants.MsidbFileAttributesNoncompressed;
210 this.Attributes &= ~MsiInterop.MsidbFileAttributesCompressed; 209 this.Attributes &= ~WindowsInstallerConstants.MsidbFileAttributesCompressed;
211 } 210 }
212 else // not specified 211 else // not specified
213 { 212 {
214 Debug.Assert(YesNoType.NotSet == value); 213 Debug.Assert(YesNoType.NotSet == value);
215 214
216 // clear any compression bits 215 // clear any compression bits
217 this.Attributes &= ~MsiInterop.MsidbFileAttributesCompressed; 216 this.Attributes &= ~WindowsInstallerConstants.MsidbFileAttributesCompressed;
218 this.Attributes &= ~MsiInterop.MsidbFileAttributesNoncompressed; 217 this.Attributes &= ~WindowsInstallerConstants.MsidbFileAttributesNoncompressed;
219 } 218 }
220 } 219 }
221 } 220 }
diff --git a/src/WixToolset.Data/WindowsInstaller/WindowsInstallerConstants.cs b/src/WixToolset.Data/WindowsInstaller/WindowsInstallerConstants.cs
new file mode 100644
index 00000000..c60f2c0d
--- /dev/null
+++ b/src/WixToolset.Data/WindowsInstaller/WindowsInstallerConstants.cs
@@ -0,0 +1,259 @@
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.WindowsInstaller
4{
5 public static class WindowsInstallerConstants
6 {
7 // Component.Attributes
8 public const int MsidbComponentAttributesLocalOnly = 0;
9 public const int MsidbComponentAttributesSourceOnly = 1;
10 public const int MsidbComponentAttributesOptional = 2;
11 public const int MsidbComponentAttributesRegistryKeyPath = 4;
12 public const int MsidbComponentAttributesSharedDllRefCount = 8;
13 public const int MsidbComponentAttributesPermanent = 16;
14 public const int MsidbComponentAttributesODBCDataSource = 32;
15 public const int MsidbComponentAttributesTransitive = 64;
16 public const int MsidbComponentAttributesNeverOverwrite = 128;
17 public const int MsidbComponentAttributes64bit = 256;
18 public const int MsidbComponentAttributesDisableRegistryReflection = 512;
19 public const int MsidbComponentAttributesUninstallOnSupersedence = 1024;
20 public const int MsidbComponentAttributesShared = 2048;
21
22 // BBControl.Attributes & Control.Attributes
23 public const int MsidbControlAttributesVisible = 0x00000001;
24 public const int MsidbControlAttributesEnabled = 0x00000002;
25 public const int MsidbControlAttributesSunken = 0x00000004;
26 public const int MsidbControlAttributesIndirect = 0x00000008;
27 public const int MsidbControlAttributesInteger = 0x00000010;
28 public const int MsidbControlAttributesRTLRO = 0x00000020;
29 public const int MsidbControlAttributesRightAligned = 0x00000040;
30 public const int MsidbControlAttributesLeftScroll = 0x00000080;
31 public const int MsidbControlAttributesBiDi = MsidbControlAttributesRTLRO | MsidbControlAttributesRightAligned | MsidbControlAttributesLeftScroll;
32
33 // Text controls
34 public const int MsidbControlAttributesTransparent = 0x00010000;
35 public const int MsidbControlAttributesNoPrefix = 0x00020000;
36 public const int MsidbControlAttributesNoWrap = 0x00040000;
37 public const int MsidbControlAttributesFormatSize = 0x00080000;
38 public const int MsidbControlAttributesUsersLanguage = 0x00100000;
39
40 // Edit controls
41 public const int MsidbControlAttributesMultiline = 0x00010000;
42 public const int MsidbControlAttributesPasswordInput = 0x00200000;
43
44 // ProgressBar controls
45 public const int MsidbControlAttributesProgress95 = 0x00010000;
46
47 // VolumeSelectCombo and DirectoryCombo controls
48 public const int MsidbControlAttributesRemovableVolume = 0x00010000;
49 public const int MsidbControlAttributesFixedVolume = 0x00020000;
50 public const int MsidbControlAttributesRemoteVolume = 0x00040000;
51 public const int MsidbControlAttributesCDROMVolume = 0x00080000;
52 public const int MsidbControlAttributesRAMDiskVolume = 0x00100000;
53 public const int MsidbControlAttributesFloppyVolume = 0x00200000;
54
55 // VolumeCostList controls
56 public const int MsidbControlShowRollbackCost = 0x00400000;
57
58 // ListBox and ComboBox controls
59 public const int MsidbControlAttributesSorted = 0x00010000;
60 public const int MsidbControlAttributesComboList = 0x00020000;
61
62 // picture button controls
63 public const int MsidbControlAttributesImageHandle = 0x00010000;
64 public const int MsidbControlAttributesPushLike = 0x00020000;
65 public const int MsidbControlAttributesBitmap = 0x00040000;
66 public const int MsidbControlAttributesIcon = 0x00080000;
67 public const int MsidbControlAttributesFixedSize = 0x00100000;
68 public const int MsidbControlAttributesIconSize16 = 0x00200000;
69 public const int MsidbControlAttributesIconSize32 = 0x00400000;
70 public const int MsidbControlAttributesIconSize48 = 0x00600000;
71 public const int MsidbControlAttributesElevationShield = 0x00800000;
72
73 // RadioButton controls
74 public const int MsidbControlAttributesHasBorder = 0x01000000;
75
76 // CustomAction.Type
77 // executable types
78 public const int MsidbCustomActionTypeDll = 0x00000001; // Target = entry point name
79 public const int MsidbCustomActionTypeExe = 0x00000002; // Target = command line args
80 public const int MsidbCustomActionTypeTextData = 0x00000003; // Target = text string to be formatted and set into property
81 public const int MsidbCustomActionTypeJScript = 0x00000005; // Target = entry point name; null if none to call
82 public const int MsidbCustomActionTypeVBScript = 0x00000006; // Target = entry point name; null if none to call
83 public const int MsidbCustomActionTypeInstall = 0x00000007; // Target = property list for nested engine initialization
84 public const int MsidbCustomActionTypeSourceBits = 0x00000030;
85 public const int MsidbCustomActionTypeTargetBits = 0x00000007;
86 public const int MsidbCustomActionTypeReturnBits = 0x000000C0;
87 public const int MsidbCustomActionTypeExecuteBits = 0x00000700;
88
89 // source of code
90 public const int MsidbCustomActionTypeBinaryData = 0x00000000; // Source = Binary.Name; data stored in stream
91 public const int MsidbCustomActionTypeSourceFile = 0x00000010; // Source = File.File; file part of installation
92 public const int MsidbCustomActionTypeDirectory = 0x00000020; // Source = Directory.Directory; folder containing existing file
93 public const int MsidbCustomActionTypeProperty = 0x00000030; // Source = Property.Property; full path to executable
94
95 // return processing; default is syncronous execution; process return code
96 public const int MsidbCustomActionTypeContinue = 0x00000040; // ignore action return status; continue running
97 public const int MsidbCustomActionTypeAsync = 0x00000080; // run asynchronously
98
99 // execution scheduling flags; default is execute whenever sequenced
100 public const int MsidbCustomActionTypeFirstSequence = 0x00000100; // skip if UI sequence already run
101 public const int MsidbCustomActionTypeOncePerProcess = 0x00000200; // skip if UI sequence already run in same process
102 public const int MsidbCustomActionTypeClientRepeat = 0x00000300; // run on client only if UI already run on client
103 public const int MsidbCustomActionTypeInScript = 0x00000400; // queue for execution within script
104 public const int MsidbCustomActionTypeRollback = 0x00000100; // in conjunction with InScript: queue in Rollback script
105 public const int MsidbCustomActionTypeCommit = 0x00000200; // in conjunction with InScript: run Commit ops from script on success
106
107 // security context flag; default to impersonate as user; valid only if InScript
108 public const int MsidbCustomActionTypeNoImpersonate = 0x00000800; // no impersonation; run in system context
109 public const int MsidbCustomActionTypeTSAware = 0x00004000; // impersonate for per-machine installs on TS machines
110 public const int MsidbCustomActionType64BitScript = 0x00001000; // script should run in 64bit process
111 public const int MsidbCustomActionTypeHideTarget = 0x00002000; // don't record the contents of the Target field in the log file.
112
113 public const int MsidbCustomActionTypePatchUninstall = 0x00008000; // run on patch uninstall
114
115 // Dialog.Attributes
116 public const int MsidbDialogAttributesVisible = 0x00000001;
117 public const int MsidbDialogAttributesModal = 0x00000002;
118 public const int MsidbDialogAttributesMinimize = 0x00000004;
119 public const int MsidbDialogAttributesSysModal = 0x00000008;
120 public const int MsidbDialogAttributesKeepModeless = 0x00000010;
121 public const int MsidbDialogAttributesTrackDiskSpace = 0x00000020;
122 public const int MsidbDialogAttributesUseCustomPalette = 0x00000040;
123 public const int MsidbDialogAttributesRTLRO = 0x00000080;
124 public const int MsidbDialogAttributesRightAligned = 0x00000100;
125 public const int MsidbDialogAttributesLeftScroll = 0x00000200;
126 public const int MsidbDialogAttributesBiDi = MsidbDialogAttributesRTLRO | MsidbDialogAttributesRightAligned | MsidbDialogAttributesLeftScroll;
127 public const int MsidbDialogAttributesError = 0x00010000;
128 public const int CommonControlAttributesInvert = MsidbControlAttributesVisible + MsidbControlAttributesEnabled;
129 public const int DialogAttributesInvert = MsidbDialogAttributesVisible + MsidbDialogAttributesModal + MsidbDialogAttributesMinimize;
130
131 // Feature.Attributes
132 public const int MsidbFeatureAttributesFavorLocal = 0;
133 public const int MsidbFeatureAttributesFavorSource = 1;
134 public const int MsidbFeatureAttributesFollowParent = 2;
135 public const int MsidbFeatureAttributesFavorAdvertise = 4;
136 public const int MsidbFeatureAttributesDisallowAdvertise = 8;
137 public const int MsidbFeatureAttributesUIDisallowAbsent = 16;
138 public const int MsidbFeatureAttributesNoUnsupportedAdvertise = 32;
139
140 // File.Attributes
141 public const int MsidbFileAttributesReadOnly = 1;
142 public const int MsidbFileAttributesHidden = 2;
143 public const int MsidbFileAttributesSystem = 4;
144 public const int MsidbFileAttributesVital = 512;
145 public const int MsidbFileAttributesChecksum = 1024;
146 public const int MsidbFileAttributesPatchAdded = 4096;
147 public const int MsidbFileAttributesNoncompressed = 8192;
148 public const int MsidbFileAttributesCompressed = 16384;
149
150 // IniFile.Action & RemoveIniFile.Action
151 public const int MsidbIniFileActionAddLine = 0;
152 public const int MsidbIniFileActionCreateLine = 1;
153 public const int MsidbIniFileActionRemoveLine = 2;
154 public const int MsidbIniFileActionAddTag = 3;
155 public const int MsidbIniFileActionRemoveTag = 4;
156
157 // MoveFile.Options
158 public const int MsidbMoveFileOptionsMove = 1;
159
160 // ServiceInstall.Attributes
161 public const int MsidbServiceInstallOwnProcess = 0x00000010;
162 public const int MsidbServiceInstallShareProcess = 0x00000020;
163 public const int MsidbServiceInstallInteractive = 0x00000100;
164 public const int MsidbServiceInstallAutoStart = 0x00000002;
165 public const int MsidbServiceInstallDemandStart = 0x00000003;
166 public const int MsidbServiceInstallDisabled = 0x00000004;
167 public const int MsidbServiceInstallErrorIgnore = 0x00000000;
168 public const int MsidbServiceInstallErrorNormal = 0x00000001;
169 public const int MsidbServiceInstallErrorCritical = 0x00000003;
170 public const int MsidbServiceInstallErrorControlVital = 0x00008000;
171
172 // ServiceConfig.Event
173 public const int MsidbServiceConfigEventInstall = 0x00000001;
174 public const int MsidbServiceConfigEventUninstall = 0x00000002;
175 public const int MsidbServiceConfigEventReinstall = 0x00000004;
176
177 // ServiceControl.Attributes
178 public const int MsidbServiceControlEventStart = 0x00000001;
179 public const int MsidbServiceControlEventStop = 0x00000002;
180 public const int MsidbServiceControlEventDelete = 0x00000008;
181 public const int MsidbServiceControlEventUninstallStart = 0x00000010;
182 public const int MsidbServiceControlEventUninstallStop = 0x00000020;
183 public const int MsidbServiceControlEventUninstallDelete = 0x00000080;
184
185 // TextStyle.StyleBits
186 public const int MsidbTextStyleStyleBitsBold = 1;
187 public const int MsidbTextStyleStyleBitsItalic = 2;
188 public const int MsidbTextStyleStyleBitsUnderline = 4;
189 public const int MsidbTextStyleStyleBitsStrike = 8;
190
191 // Upgrade.Attributes
192 public const int MsidbUpgradeAttributesMigrateFeatures = 0x00000001;
193 public const int MsidbUpgradeAttributesOnlyDetect = 0x00000002;
194 public const int MsidbUpgradeAttributesIgnoreRemoveFailure = 0x00000004;
195 public const int MsidbUpgradeAttributesVersionMinInclusive = 0x00000100;
196 public const int MsidbUpgradeAttributesVersionMaxInclusive = 0x00000200;
197 public const int MsidbUpgradeAttributesLanguagesExclusive = 0x00000400;
198
199 // Registry Hive Roots
200 public const int MsidbRegistryRootClassesRoot = 0;
201 public const int MsidbRegistryRootCurrentUser = 1;
202 public const int MsidbRegistryRootLocalMachine = 2;
203 public const int MsidbRegistryRootUsers = 3;
204
205 // Locator Types
206 public const int MsidbLocatorTypeDirectory = 0;
207 public const int MsidbLocatorTypeFileName = 1;
208 public const int MsidbLocatorTypeRawValue = 2;
209 public const int MsidbLocatorType64bit = 16;
210
211 public const int MsidbClassAttributesRelativePath = 1;
212
213 // RemoveFile.InstallMode
214 public const int MsidbRemoveFileInstallModeOnInstall = 0x00000001;
215 public const int MsidbRemoveFileInstallModeOnRemove = 0x00000002;
216 public const int MsidbRemoveFileInstallModeOnBoth = 0x00000003;
217
218 // ODBCDataSource.Registration
219 public const int MsidbODBCDataSourceRegistrationPerMachine = 0;
220 public const int MsidbODBCDataSourceRegistrationPerUser = 1;
221
222 // ModuleConfiguration.Format
223 public const int MsidbModuleConfigurationFormatText = 0;
224 public const int MsidbModuleConfigurationFormatKey = 1;
225 public const int MsidbModuleConfigurationFormatInteger = 2;
226 public const int MsidbModuleConfigurationFormatBitfield = 3;
227
228 // ModuleConfiguration.Attributes
229 public const int MsidbMsmConfigurableOptionKeyNoOrphan = 1;
230 public const int MsidbMsmConfigurableOptionNonNullable = 2;
231
232 // ' Windows API function ShowWindow constants - used in Shortcut table
233 public const int SWSHOWNORMAL = 0x00000001;
234 public const int SWSHOWMAXIMIZED = 0x00000003;
235 public const int SWSHOWMINNOACTIVE = 0x00000007;
236
237 public const int MsidbEmbeddedUI = 0x01;
238 public const int MsidbEmbeddedHandlesBasic = 0x02;
239
240 public const int INSTALLLOGMODE_FATALEXIT = 0x00001;
241 public const int INSTALLLOGMODE_ERROR = 0x00002;
242 public const int INSTALLLOGMODE_WARNING = 0x00004;
243 public const int INSTALLLOGMODE_USER = 0x00008;
244 public const int INSTALLLOGMODE_INFO = 0x00010;
245 public const int INSTALLLOGMODE_FILESINUSE = 0x00020;
246 public const int INSTALLLOGMODE_RESOLVESOURCE = 0x00040;
247 public const int INSTALLLOGMODE_OUTOFDISKSPACE = 0x00080;
248 public const int INSTALLLOGMODE_ACTIONSTART = 0x00100;
249 public const int INSTALLLOGMODE_ACTIONDATA = 0x00200;
250 public const int INSTALLLOGMODE_PROGRESS = 0x00400;
251 public const int INSTALLLOGMODE_COMMONDATA = 0x00800;
252 public const int INSTALLLOGMODE_INITIALIZE = 0x01000;
253 public const int INSTALLLOGMODE_TERMINATE = 0x02000;
254 public const int INSTALLLOGMODE_SHOWDIALOG = 0x04000;
255 public const int INSTALLLOGMODE_RMFILESINUSE = 0x02000000;
256 public const int INSTALLLOGMODE_INSTALLSTART = 0x04000000;
257 public const int INSTALLLOGMODE_INSTALLEND = 0x08000000;
258 }
259}
diff --git a/src/WixToolset.Data/WindowsInstaller/WindowsInstallerStandard.cs b/src/WixToolset.Data/WindowsInstaller/WindowsInstallerStandard.cs
new file mode 100644
index 00000000..96fbe659
--- /dev/null
+++ b/src/WixToolset.Data/WindowsInstaller/WindowsInstallerStandard.cs
@@ -0,0 +1,506 @@
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.WindowsInstaller
4{
5 using System.Collections.Generic;
6 using WixToolset.Data.Tuples;
7
8 public static class WindowsInstallerStandard
9 {
10 private static readonly HashSet<string> standardActionNames = new HashSet<string>
11 {
12 "AllocateRegistrySpace",
13 "AppSearch",
14 "BindImage",
15 "CCPSearch",
16 "CostFinalize",
17 "CostInitialize",
18 "CreateFolders",
19 "CreateShortcuts",
20 "DeleteServices",
21 "DisableRollback",
22 "DuplicateFiles",
23 "ExecuteAction",
24 "FileCost",
25 "FindRelatedProducts",
26 "ForceReboot",
27 "InstallAdminPackage",
28 "InstallExecute",
29 "InstallExecuteAgain",
30 "InstallFiles",
31 "InstallFinalize",
32 "InstallInitialize",
33 "InstallODBC",
34 "InstallServices",
35 "InstallSFPCatalogFile",
36 "InstallValidate",
37 "IsolateComponents",
38 "LaunchConditions",
39 "MigrateFeatureStates",
40 "MoveFiles",
41 "MsiConfigureServices",
42 "MsiPublishAssemblies",
43 "MsiUnpublishAssemblies",
44 "PatchFiles",
45 "ProcessComponents",
46 "PublishComponents",
47 "PublishFeatures",
48 "PublishProduct",
49 "RegisterClassInfo",
50 "RegisterComPlus",
51 "RegisterExtensionInfo",
52 "RegisterFonts",
53 "RegisterMIMEInfo",
54 "RegisterProduct",
55 "RegisterProgIdInfo",
56 "RegisterTypeLibraries",
57 "RegisterUser",
58 "RemoveDuplicateFiles",
59 "RemoveEnvironmentStrings",
60 "RemoveExistingProducts",
61 "RemoveFiles",
62 "RemoveFolders",
63 "RemoveIniValues",
64 "RemoveODBC",
65 "RemoveRegistryValues",
66 "RemoveShortcuts",
67 "ResolveSource",
68 "RMCCPSearch",
69 "ScheduleReboot",
70 "SelfRegModules",
71 "SelfUnregModules",
72 "SetODBCFolders",
73 "StartServices",
74 "StopServices",
75 "UnpublishComponents",
76 "UnpublishFeatures",
77 "UnregisterClassInfo",
78 "UnregisterComPlus",
79 "UnregisterExtensionInfo",
80 "UnregisterFonts",
81 "UnregisterMIMEInfo",
82 "UnregisterProgIdInfo",
83 "UnregisterTypeLibraries",
84 "ValidateProductID",
85 "WriteEnvironmentStrings",
86 "WriteIniValues",
87 "WriteRegistryValues",
88 };
89
90 private static readonly WixActionTuple[] standardActions = new[]
91 {
92 new WixActionTuple(null, new Identifier("AdminExecuteSequence/InstallInitialize", AccessModifier.Public)) { Action="InstallInitialize", Sequence=1500, SequenceTable=SequenceTable.AdminExecuteSequence },
93 new WixActionTuple(null, new Identifier("AdvtExecuteSequence/InstallInitialize", AccessModifier.Public)) { Action="InstallInitialize", Sequence=1500, SequenceTable=SequenceTable.AdvtExecuteSequence },
94 new WixActionTuple(null, new Identifier("InstallExecuteSequence/InstallInitialize", AccessModifier.Public)) { Action="InstallInitialize", Sequence=1500, SequenceTable=SequenceTable.InstallExecuteSequence },
95
96 new WixActionTuple(null, new Identifier("InstallExecuteSequence/InstallExecute", AccessModifier.Public)) { Action="InstallExecute", Sequence=6500, SequenceTable=SequenceTable.InstallExecuteSequence, Condition="NOT Installed" },
97
98 new WixActionTuple(null, new Identifier("InstallExecuteSequence/InstallExecuteAgain", AccessModifier.Public)) { Action="InstallExecuteAgain", Sequence=6550, SequenceTable=SequenceTable.InstallExecuteSequence, Condition="NOT Installed" },
99
100 new WixActionTuple(null, new Identifier("AdminExecuteSequence/InstallFinalize", AccessModifier.Public)) { Action="InstallFinalize", Sequence=6600, SequenceTable=SequenceTable.AdminExecuteSequence },
101 new WixActionTuple(null, new Identifier("AdvtExecuteSequence/InstallFinalize", AccessModifier.Public)) { Action="InstallFinalize", Sequence=6600, SequenceTable=SequenceTable.AdvtExecuteSequence },
102 new WixActionTuple(null, new Identifier("InstallExecuteSequence/InstallFinalize", AccessModifier.Public)) { Action="InstallFinalize", Sequence=6600, SequenceTable=SequenceTable.InstallExecuteSequence },
103
104 new WixActionTuple(null, new Identifier("AdminExecuteSequence/InstallFiles", AccessModifier.Public)) { Action="InstallFiles", Sequence=4000, SequenceTable=SequenceTable.AdminExecuteSequence },
105 new WixActionTuple(null, new Identifier("InstallExecuteSequence/InstallFiles", AccessModifier.Public)) { Action="InstallFiles", Sequence=4000, SequenceTable=SequenceTable.InstallExecuteSequence },
106
107 new WixActionTuple(null, new Identifier("AdminExecuteSequence/InstallAdminPackage", AccessModifier.Public)) { Action="InstallAdminPackage", Sequence=3900, SequenceTable=SequenceTable.AdminExecuteSequence },
108
109 new WixActionTuple(null, new Identifier("AdminExecuteSequence/FileCost", AccessModifier.Public)) { Action="FileCost", Sequence=900, SequenceTable=SequenceTable.AdminExecuteSequence },
110 new WixActionTuple(null, new Identifier("AdminUISequence/FileCost", AccessModifier.Public)) { Action="FileCost", Sequence=900, SequenceTable=SequenceTable.AdminUISequence },
111 new WixActionTuple(null, new Identifier("InstallExecuteSequence/FileCost", AccessModifier.Public)) { Action="FileCost", Sequence=900, SequenceTable=SequenceTable.InstallExecuteSequence },
112 new WixActionTuple(null, new Identifier("InstallUISequence/FileCost", AccessModifier.Public)) { Action="FileCost", Sequence=900, SequenceTable=SequenceTable.InstallUISequence },
113
114 new WixActionTuple(null, new Identifier("AdminExecuteSequence/CostInitialize", AccessModifier.Public)) { Action="CostInitialize", Sequence=800, SequenceTable=SequenceTable.AdminExecuteSequence },
115 new WixActionTuple(null, new Identifier("AdminUISequence/CostInitialize", AccessModifier.Public)) { Action="CostInitialize", Sequence=800, SequenceTable=SequenceTable.AdminUISequence },
116 new WixActionTuple(null, new Identifier("AdvtExecuteSequence/CostInitialize", AccessModifier.Public)) { Action="CostInitialize", Sequence=800, SequenceTable=SequenceTable.AdvtExecuteSequence },
117 new WixActionTuple(null, new Identifier("InstallExecuteSequence/CostInitialize", AccessModifier.Public)) { Action="CostInitialize", Sequence=800, SequenceTable=SequenceTable.InstallExecuteSequence },
118 new WixActionTuple(null, new Identifier("InstallUISequence/CostInitialize", AccessModifier.Public)) { Action="CostInitialize", Sequence=800, SequenceTable=SequenceTable.InstallUISequence },
119
120 new WixActionTuple(null, new Identifier("AdminExecuteSequence/CostFinalize", AccessModifier.Public)) { Action="CostFinalize", Sequence=1000, SequenceTable=SequenceTable.AdminExecuteSequence },
121 new WixActionTuple(null, new Identifier("AdminUISequence/CostFinalize", AccessModifier.Public)) { Action="CostFinalize", Sequence=1000, SequenceTable=SequenceTable.AdminUISequence },
122 new WixActionTuple(null, new Identifier("AdvtExecuteSequence/CostFinalize", AccessModifier.Public)) { Action="CostFinalize", Sequence=1000, SequenceTable=SequenceTable.AdvtExecuteSequence },
123 new WixActionTuple(null, new Identifier("InstallExecuteSequence/CostFinalize", AccessModifier.Public)) { Action="CostFinalize", Sequence=1000, SequenceTable=SequenceTable.InstallExecuteSequence },
124 new WixActionTuple(null, new Identifier("InstallUISequence/CostFinalize", AccessModifier.Public)) { Action="CostFinalize", Sequence=1000, SequenceTable=SequenceTable.InstallUISequence },
125
126 new WixActionTuple(null, new Identifier("AdminExecuteSequence/InstallValidate", AccessModifier.Public)) { Action="InstallValidate", Sequence=1400, SequenceTable=SequenceTable.AdminExecuteSequence },
127 new WixActionTuple(null, new Identifier("AdvtExecuteSequence/InstallValidate", AccessModifier.Public)) { Action="InstallValidate", Sequence=1400, SequenceTable=SequenceTable.AdvtExecuteSequence },
128 new WixActionTuple(null, new Identifier("InstallExecuteSequence/InstallValidate", AccessModifier.Public)) { Action="InstallValidate", Sequence=1400, SequenceTable=SequenceTable.InstallExecuteSequence },
129
130 new WixActionTuple(null, new Identifier("AdminUISequence/ExecuteAction", AccessModifier.Public)) { Action="ExecuteAction", Sequence=1300, SequenceTable=SequenceTable.AdminUISequence },
131 new WixActionTuple(null, new Identifier("InstallUISequence/ExecuteAction", AccessModifier.Public)) { Action="ExecuteAction", Sequence=1300, SequenceTable=SequenceTable.InstallUISequence },
132
133 new WixActionTuple(null, new Identifier("AdvtExecuteSequence/CreateShortcuts", AccessModifier.Public)) { Action="CreateShortcuts", Sequence=4500, SequenceTable=SequenceTable.AdvtExecuteSequence },
134 new WixActionTuple(null, new Identifier("InstallExecuteSequence/CreateShortcuts", AccessModifier.Public)) { Action="CreateShortcuts", Sequence=4500, SequenceTable=SequenceTable.InstallExecuteSequence },
135
136 new WixActionTuple(null, new Identifier("AdvtExecuteSequence/MsiPublishAssemblies", AccessModifier.Public)) { Action="MsiPublishAssemblies", Sequence=6250, SequenceTable=SequenceTable.AdvtExecuteSequence },
137 new WixActionTuple(null, new Identifier("InstallExecuteSequence/MsiPublishAssemblies", AccessModifier.Public)) { Action="MsiPublishAssemblies", Sequence=6250, SequenceTable=SequenceTable.InstallExecuteSequence },
138
139 new WixActionTuple(null, new Identifier("AdvtExecuteSequence/PublishComponents", AccessModifier.Public)) { Action="PublishComponents", Sequence=6200, SequenceTable=SequenceTable.AdvtExecuteSequence },
140 new WixActionTuple(null, new Identifier("InstallExecuteSequence/PublishComponents", AccessModifier.Public)) { Action="PublishComponents", Sequence=6200, SequenceTable=SequenceTable.InstallExecuteSequence },
141
142 new WixActionTuple(null, new Identifier("AdvtExecuteSequence/PublishFeatures", AccessModifier.Public)) { Action="PublishFeatures", Sequence=6300, SequenceTable=SequenceTable.AdvtExecuteSequence },
143 new WixActionTuple(null, new Identifier("InstallExecuteSequence/PublishFeatures", AccessModifier.Public)) { Action="PublishFeatures", Sequence=6300, SequenceTable=SequenceTable.InstallExecuteSequence },
144
145 new WixActionTuple(null, new Identifier("AdvtExecuteSequence/PublishProduct", AccessModifier.Public)) { Action="PublishProduct", Sequence=6400, SequenceTable=SequenceTable.AdvtExecuteSequence },
146 new WixActionTuple(null, new Identifier("InstallExecuteSequence/PublishProduct", AccessModifier.Public)) { Action="PublishProduct", Sequence=6400, SequenceTable=SequenceTable.InstallExecuteSequence },
147
148 new WixActionTuple(null, new Identifier("AdvtExecuteSequence/RegisterClassInfo", AccessModifier.Public)) { Action="RegisterClassInfo", Sequence=4600, SequenceTable=SequenceTable.AdvtExecuteSequence },
149 new WixActionTuple(null, new Identifier("InstallExecuteSequence/RegisterClassInfo", AccessModifier.Public)) { Action="RegisterClassInfo", Sequence=4600, SequenceTable=SequenceTable.InstallExecuteSequence },
150
151 new WixActionTuple(null, new Identifier("AdvtExecuteSequence/RegisterExtensionInfo", AccessModifier.Public)) { Action="RegisterExtensionInfo", Sequence=4700, SequenceTable=SequenceTable.AdvtExecuteSequence },
152 new WixActionTuple(null, new Identifier("InstallExecuteSequence/RegisterExtensionInfo", AccessModifier.Public)) { Action="RegisterExtensionInfo", Sequence=4700, SequenceTable=SequenceTable.InstallExecuteSequence },
153
154 new WixActionTuple(null, new Identifier("AdvtExecuteSequence/RegisterMIMEInfo", AccessModifier.Public)) { Action="RegisterMIMEInfo", Sequence=4900, SequenceTable=SequenceTable.AdvtExecuteSequence },
155 new WixActionTuple(null, new Identifier("InstallExecuteSequence/RegisterMIMEInfo", AccessModifier.Public)) { Action="RegisterMIMEInfo", Sequence=4900, SequenceTable=SequenceTable.InstallExecuteSequence },
156
157 new WixActionTuple(null, new Identifier("AdvtExecuteSequence/RegisterProgIdInfo", AccessModifier.Public)) { Action="RegisterProgIdInfo", Sequence=4800, SequenceTable=SequenceTable.AdvtExecuteSequence },
158 new WixActionTuple(null, new Identifier("InstallExecuteSequence/RegisterProgIdInfo", AccessModifier.Public)) { Action="RegisterProgIdInfo", Sequence=4800, SequenceTable=SequenceTable.InstallExecuteSequence },
159
160 new WixActionTuple(null, new Identifier("InstallExecuteSequence/AllocateRegistrySpace", AccessModifier.Public)) { Action="AllocateRegistrySpace", Sequence=1550, SequenceTable=SequenceTable.InstallExecuteSequence },
161
162 new WixActionTuple(null, new Identifier("InstallUISequence/AppSearch", AccessModifier.Public)) { Action="AppSearch", Sequence=50, SequenceTable=SequenceTable.InstallUISequence },
163 new WixActionTuple(null, new Identifier("InstallExecuteSequence/AppSearch", AccessModifier.Public)) { Action="AppSearch", Sequence=50, SequenceTable=SequenceTable.InstallExecuteSequence },
164
165 new WixActionTuple(null, new Identifier("InstallExecuteSequence/BindImage", AccessModifier.Public)) { Action="BindImage", Sequence=4300, SequenceTable=SequenceTable.InstallExecuteSequence },
166 new WixActionTuple(null, new Identifier("InstallExecuteSequence/CreateFolders", AccessModifier.Public)) { Action="CreateFolders", Sequence=3700, SequenceTable=SequenceTable.InstallExecuteSequence },
167 new WixActionTuple(null, new Identifier("InstallExecuteSequence/DuplicateFiles", AccessModifier.Public)) { Action="DuplicateFiles", Sequence=4210, SequenceTable=SequenceTable.InstallExecuteSequence },
168
169 new WixActionTuple(null, new Identifier("InstallUISequence/FindRelatedProducts", AccessModifier.Public)) { Action="FindRelatedProducts", Sequence=25, SequenceTable=SequenceTable.InstallUISequence },
170 new WixActionTuple(null, new Identifier("InstallExecuteSequence/FindRelatedProducts", AccessModifier.Public)) { Action="FindRelatedProducts", Sequence=25, SequenceTable=SequenceTable.InstallExecuteSequence },
171
172 new WixActionTuple(null, new Identifier("InstallExecuteSequence/InstallODBC", AccessModifier.Public)) { Action="InstallODBC", Sequence=5400, SequenceTable=SequenceTable.InstallExecuteSequence },
173
174 new WixActionTuple(null, new Identifier("InstallExecuteSequence/InstallServices", AccessModifier.Public)) { Action="InstallServices", Sequence=5800, SequenceTable=SequenceTable.InstallExecuteSequence, Condition="VersionNT" },
175 new WixActionTuple(null, new Identifier("InstallExecuteSequence/MsiConfigureServices", AccessModifier.Public)) { Action="MsiConfigureServices", Sequence=5850, SequenceTable=SequenceTable.InstallExecuteSequence, Condition="VersionNT>=600" },
176
177 new WixActionTuple(null, new Identifier("InstallUISequence/IsolateComponents", AccessModifier.Public)) { Action="IsolateComponents", Sequence=950, SequenceTable=SequenceTable.InstallUISequence },
178 new WixActionTuple(null, new Identifier("InstallExecuteSequence/IsolateComponents", AccessModifier.Public)) { Action="IsolateComponents", Sequence=950, SequenceTable=SequenceTable.InstallExecuteSequence },
179
180 new WixActionTuple(null, new Identifier("AdminUISequence/LaunchConditions", AccessModifier.Public)) { Action="LaunchConditions", Sequence=100, SequenceTable=SequenceTable.AdminUISequence },
181 new WixActionTuple(null, new Identifier("AdminExecuteSequence/LaunchConditions", AccessModifier.Public)) { Action="LaunchConditions", Sequence=100, SequenceTable=SequenceTable.AdminExecuteSequence },
182 new WixActionTuple(null, new Identifier("InstallUISequence/LaunchConditions", AccessModifier.Public)) { Action="LaunchConditions", Sequence=100, SequenceTable=SequenceTable.InstallUISequence },
183 new WixActionTuple(null, new Identifier("InstallExecuteSequence/LaunchConditions", AccessModifier.Public)) { Action="LaunchConditions", Sequence=100, SequenceTable=SequenceTable.InstallExecuteSequence },
184
185 new WixActionTuple(null, new Identifier("InstallUISequence/MigrateFeatureStates", AccessModifier.Public)) { Action="MigrateFeatureStates", Sequence=1200, SequenceTable=SequenceTable.InstallUISequence },
186 new WixActionTuple(null, new Identifier("InstallExecuteSequence/MigrateFeatureStates", AccessModifier.Public)) { Action="MigrateFeatureStates", Sequence=1200, SequenceTable=SequenceTable.InstallExecuteSequence },
187
188 new WixActionTuple(null, new Identifier("InstallExecuteSequence/MoveFiles", AccessModifier.Public)) { Action="MoveFiles", Sequence=3800, SequenceTable=SequenceTable.InstallExecuteSequence },
189
190 new WixActionTuple(null, new Identifier("AdminExecuteSequence/PatchFiles", AccessModifier.Public)) { Action="PatchFiles", Sequence=4090, SequenceTable=SequenceTable.AdminExecuteSequence },
191 new WixActionTuple(null, new Identifier("InstallExecuteSequence/PatchFiles", AccessModifier.Public)) { Action="PatchFiles", Sequence=4090, SequenceTable=SequenceTable.InstallExecuteSequence },
192
193 new WixActionTuple(null, new Identifier("InstallExecuteSequence/ProcessComponents", AccessModifier.Public)) { Action="ProcessComponents", Sequence=1600, SequenceTable=SequenceTable.InstallExecuteSequence },
194
195 new WixActionTuple(null, new Identifier("InstallExecuteSequence/RegisterComPlus", AccessModifier.Public)) { Action="RegisterComPlus", Sequence=5700, SequenceTable=SequenceTable.InstallExecuteSequence },
196 new WixActionTuple(null, new Identifier("InstallExecuteSequence/RegisterFonts", AccessModifier.Public)) { Action="RegisterFonts", Sequence=5300, SequenceTable=SequenceTable.InstallExecuteSequence },
197 new WixActionTuple(null, new Identifier("InstallExecuteSequence/RegisterProduct", AccessModifier.Public)) { Action="RegisterProduct", Sequence=6100, SequenceTable=SequenceTable.InstallExecuteSequence },
198 new WixActionTuple(null, new Identifier("InstallExecuteSequence/RegisterTypeLibraries", AccessModifier.Public)) { Action="RegisterTypeLibraries", Sequence=5500, SequenceTable=SequenceTable.InstallExecuteSequence },
199 new WixActionTuple(null, new Identifier("InstallExecuteSequence/RegisterUser", AccessModifier.Public)) { Action="RegisterUser", Sequence=6000, SequenceTable=SequenceTable.InstallExecuteSequence },
200
201 new WixActionTuple(null, new Identifier("InstallExecuteSequence/RemoveDuplicateFiles", AccessModifier.Public)) { Action="RemoveDuplicateFiles", Sequence=3400, SequenceTable=SequenceTable.InstallExecuteSequence },
202 new WixActionTuple(null, new Identifier("InstallExecuteSequence/RemoveEnvironmentStrings", AccessModifier.Public)) { Action="RemoveEnvironmentStrings", Sequence=3300, SequenceTable=SequenceTable.InstallExecuteSequence },
203 new WixActionTuple(null, new Identifier("InstallExecuteSequence/RemoveFiles", AccessModifier.Public)) { Action="RemoveFiles", Sequence=3500, SequenceTable=SequenceTable.InstallExecuteSequence },
204 new WixActionTuple(null, new Identifier("InstallExecuteSequence/RemoveFolders", AccessModifier.Public)) { Action="RemoveFolders", Sequence=3600, SequenceTable=SequenceTable.InstallExecuteSequence },
205 new WixActionTuple(null, new Identifier("InstallExecuteSequence/RemoveIniValues", AccessModifier.Public)) { Action="RemoveIniValues", Sequence=3100, SequenceTable=SequenceTable.InstallExecuteSequence },
206 new WixActionTuple(null, new Identifier("InstallExecuteSequence/RemoveODBC", AccessModifier.Public)) { Action="RemoveODBC", Sequence=2400, SequenceTable=SequenceTable.InstallExecuteSequence },
207 new WixActionTuple(null, new Identifier("InstallExecuteSequence/RemoveRegistryValues", AccessModifier.Public)) { Action="RemoveRegistryValues", Sequence=2600, SequenceTable=SequenceTable.InstallExecuteSequence },
208 new WixActionTuple(null, new Identifier("InstallExecuteSequence/RemoveShortcuts", AccessModifier.Public)) { Action="RemoveShortcuts", Sequence=3200, SequenceTable=SequenceTable.InstallExecuteSequence },
209
210 new WixActionTuple(null, new Identifier("InstallExecuteSequence/SelfRegModules", AccessModifier.Public)) { Action="SelfRegModules", Sequence=5600, SequenceTable=SequenceTable.InstallExecuteSequence },
211 new WixActionTuple(null, new Identifier("InstallExecuteSequence/SelfUnregModules", AccessModifier.Public)) { Action="SelfUnregModules", Sequence=2200, SequenceTable=SequenceTable.InstallExecuteSequence },
212 new WixActionTuple(null, new Identifier("InstallExecuteSequence/SetODBCFolders", AccessModifier.Public)) { Action="SetODBCFolders", Sequence=1100, SequenceTable=SequenceTable.InstallExecuteSequence },
213
214 new WixActionTuple(null, new Identifier("InstallExecuteSequence/CCPSearch", AccessModifier.Public)) { Action="CCPSearch", Sequence=500, SequenceTable=SequenceTable.InstallExecuteSequence, Condition="NOT Installed" },
215 new WixActionTuple(null, new Identifier("InstallUISequence/CCPSearch", AccessModifier.Public)) { Action="CCPSearch", Sequence=500, SequenceTable=SequenceTable.InstallUISequence, Condition="NOT Installed" },
216
217 new WixActionTuple(null, new Identifier("InstallExecuteSequence/DeleteServices", AccessModifier.Public)) { Action="DeleteServices", Sequence=2000, SequenceTable=SequenceTable.InstallExecuteSequence, Condition="VersionNT" },
218
219 new WixActionTuple(null, new Identifier("InstallExecuteSequence/RMCCPSearch", AccessModifier.Public)) { Action="RMCCPSearch", Sequence=600, SequenceTable=SequenceTable.InstallExecuteSequence, Condition="NOT Installed" },
220 new WixActionTuple(null, new Identifier("InstallUISequence/RMCCPSearch", AccessModifier.Public)) { Action="RMCCPSearch", Sequence=600, SequenceTable=SequenceTable.InstallUISequence, Condition="NOT Installed" },
221
222 new WixActionTuple(null, new Identifier("InstallExecuteSequence/StartServices", AccessModifier.Public)) { Action="StartServices", Sequence=5900, SequenceTable=SequenceTable.InstallExecuteSequence, Condition="VersionNT" },
223 new WixActionTuple(null, new Identifier("InstallExecuteSequence/StopServices", AccessModifier.Public)) { Action="StopServices", Sequence=1900, SequenceTable=SequenceTable.InstallExecuteSequence, Condition="VersionNT" },
224
225 new WixActionTuple(null, new Identifier("InstallExecuteSequence/MsiUnpublishAssemblies", AccessModifier.Public)) { Action="MsiUnpublishAssemblies", Sequence=1750, SequenceTable=SequenceTable.InstallExecuteSequence },
226 new WixActionTuple(null, new Identifier("InstallExecuteSequence/UnpublishComponents", AccessModifier.Public)) { Action="UnpublishComponents", Sequence=1700, SequenceTable=SequenceTable.InstallExecuteSequence },
227 new WixActionTuple(null, new Identifier("InstallExecuteSequence/UnpublishFeatures", AccessModifier.Public)) { Action="UnpublishFeatures", Sequence=1800, SequenceTable=SequenceTable.InstallExecuteSequence },
228 new WixActionTuple(null, new Identifier("InstallExecuteSequence/UnregisterClassInfo", AccessModifier.Public)) { Action="UnregisterClassInfo", Sequence=2700, SequenceTable=SequenceTable.InstallExecuteSequence },
229 new WixActionTuple(null, new Identifier("InstallExecuteSequence/UnregisterComPlus", AccessModifier.Public)) { Action="UnregisterComPlus", Sequence=2100, SequenceTable=SequenceTable.InstallExecuteSequence },
230 new WixActionTuple(null, new Identifier("InstallExecuteSequence/UnregisterExtensionInfo", AccessModifier.Public)) { Action="UnregisterExtensionInfo", Sequence=2800, SequenceTable=SequenceTable.InstallExecuteSequence },
231 new WixActionTuple(null, new Identifier("InstallExecuteSequence/UnregisterFonts", AccessModifier.Public)) { Action="UnregisterFonts", Sequence=2500, SequenceTable=SequenceTable.InstallExecuteSequence },
232 new WixActionTuple(null, new Identifier("InstallExecuteSequence/UnregisterMIMEInfo", AccessModifier.Public)) { Action="UnregisterMIMEInfo", Sequence=3000, SequenceTable=SequenceTable.InstallExecuteSequence },
233 new WixActionTuple(null, new Identifier("InstallExecuteSequence/UnregisterProgIdInfo", AccessModifier.Public)) { Action="UnregisterProgIdInfo", Sequence=2900, SequenceTable=SequenceTable.InstallExecuteSequence },
234 new WixActionTuple(null, new Identifier("InstallExecuteSequence/UnregisterTypeLibraries", AccessModifier.Public)) { Action="UnregisterTypeLibraries", Sequence=2300, SequenceTable=SequenceTable.InstallExecuteSequence },
235
236 new WixActionTuple(null, new Identifier("InstallUISequence/ValidateProductID", AccessModifier.Public)) { Action="ValidateProductID", Sequence=700, SequenceTable=SequenceTable.InstallUISequence },
237 new WixActionTuple(null, new Identifier("InstallExecuteSequence/ValidateProductID", AccessModifier.Public)) { Action="ValidateProductID", Sequence=700, SequenceTable=SequenceTable.InstallExecuteSequence },
238
239 new WixActionTuple(null, new Identifier("InstallExecuteSequence/WriteEnvironmentStrings", AccessModifier.Public)) { Action="WriteEnvironmentStrings", Sequence=5200, SequenceTable=SequenceTable.InstallExecuteSequence },
240 new WixActionTuple(null, new Identifier("InstallExecuteSequence/WriteIniValues", AccessModifier.Public)) { Action="WriteIniValues", Sequence=5100, SequenceTable=SequenceTable.InstallExecuteSequence },
241 new WixActionTuple(null, new Identifier("InstallExecuteSequence/WriteRegistryValues", AccessModifier.Public)) { Action="WriteRegistryValues", Sequence=5000, SequenceTable=SequenceTable.InstallExecuteSequence },
242 };
243
244 private static readonly HashSet<string> standardDirectories = new HashSet<string>
245 {
246 "TARGETDIR",
247 "AdminToolsFolder",
248 "AppDataFolder",
249 "CommonAppDataFolder",
250 "CommonFilesFolder",
251 "DesktopFolder",
252 "FavoritesFolder",
253 "FontsFolder",
254 "LocalAppDataFolder",
255 "MyPicturesFolder",
256 "PersonalFolder",
257 "ProgramFilesFolder",
258 "ProgramMenuFolder",
259 "SendToFolder",
260 "StartMenuFolder",
261 "StartupFolder",
262 "System16Folder",
263 "SystemFolder",
264 "TempFolder",
265 "TemplateFolder",
266 "WindowsFolder",
267 "CommonFiles64Folder",
268 "ProgramFiles64Folder",
269 "System64Folder",
270 "NetHoodFolder",
271 "PrintHoodFolder",
272 "RecentFolder",
273 "WindowsVolume",
274 };
275
276 /// <summary>
277 /// References:
278 /// Title: Property Reference [Windows Installer]:
279 /// URL: http://msdn.microsoft.com/library/en-us/msi/setup/property_reference.asp
280 /// </summary>
281 private static readonly HashSet<string> standardProperties = new HashSet<string>
282 {
283 "~", // REG_MULTI_SZ/NULL marker
284 "ACTION",
285 "ADDDEFAULT",
286 "ADDLOCAL",
287 "ADDDSOURCE",
288 "AdminProperties",
289 "AdminUser",
290 "ADVERTISE",
291 "AFTERREBOOT",
292 "AllowProductCodeMismatches",
293 "AllowProductVersionMajorMismatches",
294 "ALLUSERS",
295 "Alpha",
296 "ApiPatchingSymbolFlags",
297 "ARPAUTHORIZEDCDFPREFIX",
298 "ARPCOMMENTS",
299 "ARPCONTACT",
300 "ARPHELPLINK",
301 "ARPHELPTELEPHONE",
302 "ARPINSTALLLOCATION",
303 "ARPNOMODIFY",
304 "ARPNOREMOVE",
305 "ARPNOREPAIR",
306 "ARPPRODUCTIONICON",
307 "ARPREADME",
308 "ARPSIZE",
309 "ARPSYSTEMCOMPONENT",
310 "ARPULRINFOABOUT",
311 "ARPURLUPDATEINFO",
312 "AVAILABLEFREEREG",
313 "BorderSize",
314 "BorderTop",
315 "CaptionHeight",
316 "CCP_DRIVE",
317 "ColorBits",
318 "COMPADDLOCAL",
319 "COMPADDSOURCE",
320 "COMPANYNAME",
321 "ComputerName",
322 "CostingComplete",
323 "Date",
324 "DefaultUIFont",
325 "DISABLEADVTSHORTCUTS",
326 "DISABLEMEDIA",
327 "DISABLEROLLBACK",
328 "DiskPrompt",
329 "DontRemoveTempFolderWhenFinished",
330 "EnableUserControl",
331 "EXECUTEACTION",
332 "EXECUTEMODE",
333 "FASTOEM",
334 "FILEADDDEFAULT",
335 "FILEADDLOCAL",
336 "FILEADDSOURCE",
337 "IncludeWholeFilesOnly",
338 "Installed",
339 "INSTALLLEVEL",
340 "Intel",
341 "Intel64",
342 "IsAdminPackage",
343 "LeftUnit",
344 "LIMITUI",
345 "ListOfPatchGUIDsToReplace",
346 "ListOfTargetProductCode",
347 "LOGACTION",
348 "LogonUser",
349 "Manufacturer",
350 "MEDIAPACKAGEPATH",
351 "MediaSourceDir",
352 "MinimumRequiredMsiVersion",
353 "MsiAMD64",
354 "MSIAPRSETTINGSIDENTIFIER",
355 "MSICHECKCRCS",
356 "MSIDISABLERMRESTART",
357 "MSIENFORCEUPGRADECOMPONENTRULES",
358 "MSIFASTINSTALL",
359 "MsiFileToUseToCreatePatchTables",
360 "MsiHiddenProperties",
361 "MSIINSTALLPERUSER",
362 "MSIINSTANCEGUID",
363 "MsiLogFileLocation",
364 "MsiLogging",
365 "MsiNetAssemblySupport",
366 "MSINEWINSTANCE",
367 "MSINODISABLEMEDIA",
368 "MsiNTProductType",
369 "MsiNTSuiteBackOffice",
370 "MsiNTSuiteDataCenter",
371 "MsiNTSuiteEnterprise",
372 "MsiNTSuiteSmallBusiness",
373 "MsiNTSuiteSmallBusinessRestricted",
374 "MsiNTSuiteWebServer",
375 "MsiNTSuitePersonal",
376 "MsiPatchRemovalList",
377 "MSIPATCHREMOVE",
378 "MSIRESTARTMANAGERCONTROL",
379 "MsiRestartManagerSessionKey",
380 "MSIRMSHUTDOWN",
381 "MsiRunningElevated",
382 "MsiUIHideCancel",
383 "MsiUIProgressOnly",
384 "MsiUISourceResOnly",
385 "MsiSystemRebootPending",
386 "MsiWin32AssemblySupport",
387 "NOCOMPANYNAME",
388 "NOUSERNAME",
389 "OLEAdvtSupport",
390 "OptimizePatchSizeForLargeFiles",
391 "OriginalDatabase",
392 "OutOfDiskSpace",
393 "OutOfNoRbDiskSpace",
394 "ParentOriginalDatabase",
395 "ParentProductCode",
396 "PATCH",
397 "PATCH_CACHE_DIR",
398 "PATCH_CACHE_ENABLED",
399 "PatchGUID",
400 "PATCHNEWPACKAGECODE",
401 "PATCHNEWSUMMARYCOMMENTS",
402 "PATCHNEWSUMMARYSUBJECT",
403 "PatchOutputPath",
404 "PatchSourceList",
405 "PhysicalMemory",
406 "PIDKEY",
407 "PIDTemplate",
408 "Preselected",
409 "PRIMARYFOLDER",
410 "PrimaryVolumePath",
411 "PrimaryVolumeSpaceAvailable",
412 "PrimaryVolumeSpaceRemaining",
413 "PrimaryVolumeSpaceRequired",
414 "Privileged",
415 "ProductCode",
416 "ProductID",
417 "ProductLanguage",
418 "ProductName",
419 "ProductState",
420 "ProductVersion",
421 "PROMPTROLLBACKCOST",
422 "REBOOT",
423 "REBOOTPROMPT",
424 "RedirectedDllSupport",
425 "REINSTALL",
426 "REINSTALLMODE",
427 "RemoveAdminTS",
428 "REMOVE",
429 "ReplacedInUseFiles",
430 "RestrictedUserControl",
431 "RESUME",
432 "RollbackDisabled",
433 "ROOTDRIVE",
434 "ScreenX",
435 "ScreenY",
436 "SecureCustomProperties",
437 "ServicePackLevel",
438 "ServicePackLevelMinor",
439 "SEQUENCE",
440 "SharedWindows",
441 "ShellAdvtSupport",
442 "SHORTFILENAMES",
443 "SourceDir",
444 "SOURCELIST",
445 "SystemLanguageID",
446 "TARGETDIR",
447 "TerminalServer",
448 "TextHeight",
449 "Time",
450 "TRANSFORMS",
451 "TRANSFORMSATSOURCE",
452 "TRANSFORMSSECURE",
453 "TTCSupport",
454 "UILevel",
455 "UpdateStarted",
456 "UpgradeCode",
457 "UPGRADINGPRODUCTCODE",
458 "UserLanguageID",
459 "USERNAME",
460 "UserSID",
461 "Version9X",
462 "VersionDatabase",
463 "VersionMsi",
464 "VersionNT",
465 "VersionNT64",
466 "VirtualMemory",
467 "WindowsBuild",
468 "WindowsVolume",
469 };
470
471 /// <summary>
472 /// Find out if an action is a standard action.
473 /// </summary>
474 /// <param name="actionName">Name of the action.</param>
475 /// <returns>true if the action is standard, false otherwise.</returns>
476 public static bool IsStandardAction(string actionName)
477 {
478 return standardActionNames.Contains(actionName);
479 }
480
481 /// <summary>
482 /// Array of standard actions.
483 /// </summary>
484 public static WixActionTuple[] StandardActions() => standardActions;
485
486 /// <summary>
487 /// Find out if a directory is a standard directory.
488 /// </summary>
489 /// <param name="directoryName">Name of the directory.</param>
490 /// <returns>true if the directory is standard, false otherwise.</returns>
491 public static bool IsStandardDirectory(string directoryName)
492 {
493 return standardDirectories.Contains(directoryName);
494 }
495
496 /// <summary>
497 /// Find out if a property is a standard property.
498 /// </summary>
499 /// <param name="propertyName">Name of the property.</param>
500 /// <returns>true if a property is standard, false otherwise.</returns>
501 public static bool IsStandardProperty(string propertyName)
502 {
503 return standardProperties.Contains(propertyName);
504 }
505 }
506}