aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorBob Arnson <bob@joyofsetup.com>2020-03-05 19:48:12 -0500
committerBob Arnson <bob@firegiant.com>2020-03-09 12:16:09 -0400
commite9d10933bedb8215ec50ca85db272d6647426b31 (patch)
tree262cbaf190de5d5461941c79923bef8cf4cf7ad1 /src
parent7533ca33de2b8125e9f9ecb3b28a247acca85f83 (diff)
downloadwix-e9d10933bedb8215ec50ca85db272d6647426b31.tar.gz
wix-e9d10933bedb8215ec50ca85db272d6647426b31.tar.bz2
wix-e9d10933bedb8215ec50ca85db272d6647426b31.zip
Version extension ids.
Partial fix for wixtoolset/issues#5933.
Diffstat (limited to 'src')
-rw-r--r--src/ca/CloseApps.cpp28
-rw-r--r--src/ca/FormatFiles.cpp18
-rw-r--r--src/ca/RemoveFoldersEx.cpp14
-rw-r--r--src/ca/RestartManager.cpp8
-rw-r--r--src/ca/TouchFile.cpp16
-rw-r--r--src/ca/XmlConfig.cpp40
-rw-r--r--src/ca/XmlFile.cpp40
-rw-r--r--src/ca/caDecor.h13
-rw-r--r--src/ca/caSuffix.h11
-rw-r--r--src/ca/netshortcuts.cpp16
-rw-r--r--src/ca/precomp.h2
-rw-r--r--src/ca/scamanifest.cpp76
-rw-r--r--src/ca/scaperf.cpp64
-rw-r--r--src/ca/scaperfexec.cpp4
-rw-r--r--src/ca/scasched.cpp16
-rw-r--r--src/ca/scasmb.h2
-rw-r--r--src/ca/scasmbsched.cpp50
-rw-r--r--src/ca/scauser.cpp108
-rw-r--r--src/ca/secureobj.cpp22
-rw-r--r--src/ca/serviceconfig.cpp10
-rw-r--r--src/ca/utilca.vcxproj2
-rw-r--r--src/test/WixToolsetTest.Util/TestData/CloseApplication/Package.en-us.wxl11
-rw-r--r--src/test/WixToolsetTest.Util/TestData/CloseApplication/Package.wxs24
-rw-r--r--src/test/WixToolsetTest.Util/TestData/CloseApplication/PackageComponents.wxs11
-rw-r--r--src/test/WixToolsetTest.Util/TestData/CloseApplication/example.txt1
-rw-r--r--src/test/WixToolsetTest.Util/TestData/EventManifest/Package.en-us.wxl11
-rw-r--r--src/test/WixToolsetTest.Util/TestData/EventManifest/Package.wxs22
-rw-r--r--src/test/WixToolsetTest.Util/TestData/EventManifest/PackageComponents.wxs13
-rw-r--r--src/test/WixToolsetTest.Util/TestData/EventManifest/example.txt1
-rw-r--r--src/test/WixToolsetTest.Util/TestData/InternetShortcut/Package.en-us.wxl11
-rw-r--r--src/test/WixToolsetTest.Util/TestData/InternetShortcut/Package.wxs22
-rw-r--r--src/test/WixToolsetTest.Util/TestData/InternetShortcut/PackageComponents.wxs12
-rw-r--r--src/test/WixToolsetTest.Util/TestData/InternetShortcut/example.txt1
-rw-r--r--src/test/WixToolsetTest.Util/TestData/PermissionEx/Package.en-us.wxl11
-rw-r--r--src/test/WixToolsetTest.Util/TestData/PermissionEx/Package.wxs22
-rw-r--r--src/test/WixToolsetTest.Util/TestData/PermissionEx/PackageComponents.wxs14
-rw-r--r--src/test/WixToolsetTest.Util/TestData/PermissionEx/example.txt1
-rw-r--r--src/test/WixToolsetTest.Util/UtilExtensionFixture.cs127
-rw-r--r--src/test/WixToolsetTest.Util/WixToolsetTest.Util.csproj16
-rw-r--r--src/wixext/Tuples/EventManifestTuple.cs10
-rw-r--r--src/wixext/Tuples/FileSharePermissionsTuple.cs20
-rw-r--r--src/wixext/Tuples/FileShareTuple.cs44
-rw-r--r--src/wixext/Tuples/GroupTuple.cs10
-rw-r--r--src/wixext/Tuples/PerfmonManifestTuple.cs10
-rw-r--r--src/wixext/Tuples/PerfmonTuple.cs10
-rw-r--r--src/wixext/Tuples/PerformanceCategoryTuple.cs18
-rw-r--r--src/wixext/Tuples/SecureObjectsTuple.cs18
-rw-r--r--src/wixext/Tuples/ServiceConfigTuple.cs10
-rw-r--r--src/wixext/Tuples/UserGroupTuple.cs20
-rw-r--r--src/wixext/Tuples/UserTuple.cs18
-rw-r--r--src/wixext/Tuples/WixCloseApplicationTuple.cs8
-rw-r--r--src/wixext/Tuples/WixFormatFilesTuple.cs20
-rw-r--r--src/wixext/Tuples/WixInternetShortcutTuple.cs28
-rw-r--r--src/wixext/Tuples/WixRemoveFolderExTuple.cs18
-rw-r--r--src/wixext/Tuples/WixRestartResourceTuple.cs18
-rw-r--r--src/wixext/Tuples/WixTouchFileTuple.cs18
-rw-r--r--src/wixext/Tuples/XmlConfigTuple.cs18
-rw-r--r--src/wixext/Tuples/XmlFileTuple.cs18
-rw-r--r--src/wixext/UtilCompiler.cs599
-rw-r--r--src/wixext/UtilWindowsInstallerBackendExtension.cs7
-rw-r--r--src/wixext/WixToolset.Util.wixext.csproj1
-rw-r--r--src/wixext/tables.xml86
-rw-r--r--src/wixlib/UtilExtension.wxs181
-rw-r--r--src/wixlib/UtilExtension_Platform.wxi179
-rw-r--r--src/wixlib/caDecor.wxi40
-rw-r--r--src/wixlib/caSuffix.wxi28
-rw-r--r--src/wixlib/util.wixproj2
67 files changed, 1240 insertions, 1108 deletions
diff --git a/src/ca/CloseApps.cpp b/src/ca/CloseApps.cpp
index a3f28ed3..63be353c 100644
--- a/src/ca/CloseApps.cpp
+++ b/src/ca/CloseApps.cpp
@@ -4,10 +4,8 @@
4 4
5#define DEFAULT_PROCESS_EXIT_WAIT_TIME 5000 5#define DEFAULT_PROCESS_EXIT_WAIT_TIME 5000
6 6
7// WixCloseApplication Target Description Condition Attributes Sequence
8
9// structs 7// structs
10LPCWSTR wzQUERY_CLOSEAPPS = L"SELECT `WixCloseApplication`, `Target`, `Description`, `Condition`, `Attributes`, `Property`, `TerminateExitCode`, `Timeout` FROM `WixCloseApplication` ORDER BY `Sequence`"; 8LPCWSTR wzQUERY_CLOSEAPPS = L"SELECT `Wix4CloseApplication`, `Target`, `Description`, `Condition`, `Attributes`, `Property`, `TerminateExitCode`, `Timeout` FROM `Wix4CloseApplication` ORDER BY `Sequence`";
11enum eQUERY_CLOSEAPPS { QCA_ID = 1, QCA_TARGET, QCA_DESCRIPTION, QCA_CONDITION, QCA_ATTRIBUTES, QCA_PROPERTY, QCA_TERMINATEEXITCODE, QCA_TIMEOUT }; 9enum eQUERY_CLOSEAPPS { QCA_ID = 1, QCA_TARGET, QCA_DESCRIPTION, QCA_CONDITION, QCA_ATTRIBUTES, QCA_PROPERTY, QCA_TERMINATEEXITCODE, QCA_TIMEOUT };
12 10
13// CloseApplication.Attributes 11// CloseApplication.Attributes
@@ -294,14 +292,14 @@ extern "C" UINT __stdcall WixCloseApplications(
294 // loop through all the objects to be secured 292 // loop through all the objects to be secured
295 // 293 //
296 hr = WcaOpenExecuteView(wzQUERY_CLOSEAPPS, &hView); 294 hr = WcaOpenExecuteView(wzQUERY_CLOSEAPPS, &hView);
297 ExitOnFailure(hr, "failed to open view on WixCloseApplication table"); 295 ExitOnFailure(hr, "failed to open view on Wix4CloseApplication table");
298 while (S_OK == (hr = WcaFetchRecord(hView, &hRec))) 296 while (S_OK == (hr = WcaFetchRecord(hView, &hRec)))
299 { 297 {
300 hr = WcaGetRecordString(hRec, QCA_ID, &pwzId); 298 hr = WcaGetRecordString(hRec, QCA_ID, &pwzId);
301 ExitOnFailure(hr, "failed to get id from WixCloseApplication table"); 299 ExitOnFailure(hr, "failed to get id from Wix4CloseApplication table");
302 300
303 hr = WcaGetRecordString(hRec, QCA_CONDITION, &pwzCondition); 301 hr = WcaGetRecordString(hRec, QCA_CONDITION, &pwzCondition);
304 ExitOnFailure(hr, "failed to get condition from WixCloseApplication table"); 302 ExitOnFailure(hr, "failed to get condition from Wix4CloseApplication table");
305 303
306 if (pwzCondition && *pwzCondition) 304 if (pwzCondition && *pwzCondition)
307 { 305 {
@@ -309,7 +307,7 @@ extern "C" UINT __stdcall WixCloseApplications(
309 if (MSICONDITION_ERROR == condition) 307 if (MSICONDITION_ERROR == condition)
310 { 308 {
311 hr = E_INVALIDARG; 309 hr = E_INVALIDARG;
312 ExitOnFailure(hr, "failed to process condition for WixCloseApplication '%ls'", pwzId); 310 ExitOnFailure(hr, "failed to process condition for Wix4CloseApplication '%ls'", pwzId);
313 } 311 }
314 else if (MSICONDITION_FALSE == condition) 312 else if (MSICONDITION_FALSE == condition)
315 { 313 {
@@ -318,16 +316,16 @@ extern "C" UINT __stdcall WixCloseApplications(
318 } 316 }
319 317
320 hr = WcaGetRecordFormattedString(hRec, QCA_TARGET, &pwzTarget); 318 hr = WcaGetRecordFormattedString(hRec, QCA_TARGET, &pwzTarget);
321 ExitOnFailure(hr, "failed to get target from WixCloseApplication table"); 319 ExitOnFailure(hr, "failed to get target from Wix4CloseApplication table");
322 320
323 hr = WcaGetRecordFormattedString(hRec, QCA_DESCRIPTION, &pwzDescription); 321 hr = WcaGetRecordFormattedString(hRec, QCA_DESCRIPTION, &pwzDescription);
324 ExitOnFailure(hr, "failed to get description from WixCloseApplication table"); 322 ExitOnFailure(hr, "failed to get description from Wix4CloseApplication table");
325 323
326 hr = WcaGetRecordInteger(hRec, QCA_ATTRIBUTES, reinterpret_cast<int*>(&dwAttributes)); 324 hr = WcaGetRecordInteger(hRec, QCA_ATTRIBUTES, reinterpret_cast<int*>(&dwAttributes));
327 ExitOnFailure(hr, "failed to get attributes from WixCloseApplication table"); 325 ExitOnFailure(hr, "failed to get attributes from Wix4CloseApplication table");
328 326
329 hr = WcaGetRecordFormattedString(hRec, QCA_PROPERTY, &pwzProperty); 327 hr = WcaGetRecordFormattedString(hRec, QCA_PROPERTY, &pwzProperty);
330 ExitOnFailure(hr, "failed to get property from WixCloseApplication table"); 328 ExitOnFailure(hr, "failed to get property from Wix4CloseApplication table");
331 329
332 hr = WcaGetRecordInteger(hRec, QCA_TERMINATEEXITCODE, reinterpret_cast<int*>(&dwTerminateExitCode)); 330 hr = WcaGetRecordInteger(hRec, QCA_TERMINATEEXITCODE, reinterpret_cast<int*>(&dwTerminateExitCode));
333 if (S_FALSE == hr) 331 if (S_FALSE == hr)
@@ -335,7 +333,7 @@ extern "C" UINT __stdcall WixCloseApplications(
335 dwTerminateExitCode = 0; 333 dwTerminateExitCode = 0;
336 hr = S_OK; 334 hr = S_OK;
337 } 335 }
338 ExitOnFailure(hr, "failed to get timeout from WixCloseApplication table"); 336 ExitOnFailure(hr, "failed to get timeout from Wix4CloseApplication table");
339 337
340 hr = WcaGetRecordInteger(hRec, QCA_TIMEOUT, reinterpret_cast<int*>(&dwTimeout)); 338 hr = WcaGetRecordInteger(hRec, QCA_TIMEOUT, reinterpret_cast<int*>(&dwTimeout));
341 if (S_FALSE == hr) 339 if (S_FALSE == hr)
@@ -343,7 +341,7 @@ extern "C" UINT __stdcall WixCloseApplications(
343 dwTimeout = DEFAULT_PROCESS_EXIT_WAIT_TIME; 341 dwTimeout = DEFAULT_PROCESS_EXIT_WAIT_TIME;
344 hr = S_OK; 342 hr = S_OK;
345 } 343 }
346 ExitOnFailure(hr, "failed to get timeout from WixCloseApplication table"); 344 ExitOnFailure(hr, "failed to get timeout from Wix4CloseApplication table");
347 345
348 // Before trying any changes to the machine, prompt if requested. 346 // Before trying any changes to the machine, prompt if requested.
349 if (dwAttributes & CLOSEAPP_ATTRIBUTE_PROMPTTOCONTINUE) 347 if (dwAttributes & CLOSEAPP_ATTRIBUTE_PROMPTTOCONTINUE)
@@ -433,8 +431,8 @@ extern "C" UINT __stdcall WixCloseApplications(
433 { 431 {
434 Assert(0 < cCloseApps); 432 Assert(0 < cCloseApps);
435 433
436 hr = WcaDoDeferredAction(PLATFORM_DECORATION(L"WixCloseApplicationsDeferred"), pwzCustomActionData, cCloseApps * COST_CLOSEAPP); 434 hr = WcaDoDeferredAction(CUSTOM_ACTION_DECORATION(L"CloseApplicationsDeferred"), pwzCustomActionData, cCloseApps * COST_CLOSEAPP);
437 ExitOnFailure(hr, "failed to schedule WixCloseApplicationsDeferred action"); 435 ExitOnFailure(hr, "failed to schedule CloseApplicationsDeferred action");
438 } 436 }
439 437
440LExit: 438LExit:
diff --git a/src/ca/FormatFiles.cpp b/src/ca/FormatFiles.cpp
index 6a816700..464b92d6 100644
--- a/src/ca/FormatFiles.cpp
+++ b/src/ca/FormatFiles.cpp
@@ -27,9 +27,9 @@ extern "C" UINT __stdcall WixSchedFormatFiles(
27 PSCZ sczRollbackCustomActionData; 27 PSCZ sczRollbackCustomActionData;
28 28
29 LPCWSTR wzQuery = 29 LPCWSTR wzQuery =
30 L"SELECT `WixFormatFiles`.`Binary_`, `WixFormatFiles`.`File_`, `File`.`Component_` " 30 L"SELECT `Wix4FormatFile`.`Binary_`, `Wix4FormatFile`.`File_`, `File`.`Component_` "
31 L"FROM `WixFormatFiles`, `File` " 31 L"FROM `Wix4FormatFile`, `File` "
32 L"WHERE `WixFormatFiles`.`File_` = `File`.`File`"; 32 L"WHERE `Wix4FormatFile`.`File_` = `File`.`File`";
33 enum eQuery { eqBinaryKey = 1, eqFileKey, eqComponentKey }; 33 enum eQuery { eqBinaryKey = 1, eqFileKey, eqComponentKey };
34 34
35 // initialize 35 // initialize
@@ -38,7 +38,7 @@ extern "C" UINT __stdcall WixSchedFormatFiles(
38 38
39 // query and loop through all the files 39 // query and loop through all the files
40 hr = WcaOpenExecuteView(wzQuery, &hView); 40 hr = WcaOpenExecuteView(wzQuery, &hView);
41 ExitOnFailure(hr, "Failed to open view on WixFormatFiles table"); 41 ExitOnFailure(hr, "Failed to open view on Wix4FormatFile table");
42 42
43 DWORD cFiles = 0; 43 DWORD cFiles = 0;
44 while (S_OK == (hr = WcaFetchRecord(hView, &hRec))) 44 while (S_OK == (hr = WcaFetchRecord(hView, &hRec)))
@@ -100,19 +100,19 @@ extern "C" UINT __stdcall WixSchedFormatFiles(
100 { 100 {
101 hr = S_OK; 101 hr = S_OK;
102 } 102 }
103 ExitOnFailure(hr, "Failure occurred while processing WixFormatFiles table"); 103 ExitOnFailure(hr, "Failure occurred while processing Wix4FormatFile table");
104 104
105 // schedule deferred CAs if there's anything to do 105 // schedule deferred CAs if there's anything to do
106 if (sczRollbackCustomActionData && *sczRollbackCustomActionData) 106 if (sczRollbackCustomActionData && *sczRollbackCustomActionData)
107 { 107 {
108 hr = WcaDoDeferredAction(PLATFORM_DECORATION(L"WixRollbackFormatFiles"), sczRollbackCustomActionData, cFiles * COST_FILEFORMATTING); 108 hr = WcaDoDeferredAction(CUSTOM_ACTION_DECORATION(L"RollbackFormatFiles"), sczRollbackCustomActionData, cFiles * COST_FILEFORMATTING);
109 ExitOnFailure(hr, "Failed to schedule WixRollbackFormatFiles"); 109 ExitOnFailure(hr, "Failed to schedule RollbackFormatFiles");
110 } 110 }
111 111
112 if (sczExecCustomActionData && *sczExecCustomActionData) 112 if (sczExecCustomActionData && *sczExecCustomActionData)
113 { 113 {
114 hr = WcaDoDeferredAction(PLATFORM_DECORATION(L"WixExecFormatFiles"), sczExecCustomActionData, cFiles * COST_FILEFORMATTING); 114 hr = WcaDoDeferredAction(CUSTOM_ACTION_DECORATION(L"ExecFormatFiles"), sczExecCustomActionData, cFiles * COST_FILEFORMATTING);
115 ExitOnFailure(hr, "Failed to schedule WixExecFormatFiles"); 115 ExitOnFailure(hr, "Failed to schedule ExecFormatFiles");
116 } 116 }
117 117
118LExit: 118LExit:
diff --git a/src/ca/RemoveFoldersEx.cpp b/src/ca/RemoveFoldersEx.cpp
index 194c6662..ce64c2c2 100644
--- a/src/ca/RemoveFoldersEx.cpp
+++ b/src/ca/RemoveFoldersEx.cpp
@@ -2,7 +2,7 @@
2 2
3#include "precomp.h" 3#include "precomp.h"
4 4
5LPCWSTR vcsRemoveFolderExQuery = L"SELECT `WixRemoveFolderEx`, `Component_`, `Property`, `InstallMode` FROM `WixRemoveFolderEx`"; 5LPCWSTR vcsRemoveFolderExQuery = L"SELECT `Wix4RemoveFolderEx`, `Component_`, `Property`, `InstallMode` FROM `Wix4RemoveFolderEx`";
6enum eRemoveFolderExQuery { rfqId = 1, rfqComponent, rfqProperty, feqMode }; 6enum eRemoveFolderExQuery { rfqId = 1, rfqComponent, rfqProperty, feqMode };
7 7
8static HRESULT RecursePath( 8static HRESULT RecursePath(
@@ -81,10 +81,10 @@ static HRESULT RecursePath(
81 81
82 // Add the row to remove any files and another row to remove the folder. 82 // Add the row to remove any files and another row to remove the folder.
83 hr = WcaAddTempRecord(phTable, phColumns, L"RemoveFile", NULL, 1, 5, L"RfxFiles", wzComponent, L"*.*", sczProperty, iMode); 83 hr = WcaAddTempRecord(phTable, phColumns, L"RemoveFile", NULL, 1, 5, L"RfxFiles", wzComponent, L"*.*", sczProperty, iMode);
84 ExitOnFailure(hr, "Failed to add row to remove all files for WixRemoveFolderEx row: %S under path:", wzId, wzPath); 84 ExitOnFailure(hr, "Failed to add row to remove all files for Wix4RemoveFolderEx row: %S under path:", wzId, wzPath);
85 85
86 hr = WcaAddTempRecord(phTable, phColumns, L"RemoveFile", NULL, 1, 5, L"RfxFolder", wzComponent, NULL, sczProperty, iMode); 86 hr = WcaAddTempRecord(phTable, phColumns, L"RemoveFile", NULL, 1, 5, L"RfxFolder", wzComponent, NULL, sczProperty, iMode);
87 ExitOnFailure(hr, "Failed to add row to remove folder for WixRemoveFolderEx row: %S under path: %S", wzId, wzPath); 87 ExitOnFailure(hr, "Failed to add row to remove folder for Wix4RemoveFolderEx row: %S under path: %S", wzId, wzPath);
88 88
89LExit: 89LExit:
90 if (INVALID_HANDLE_VALUE != hFind) 90 if (INVALID_HANDLE_VALUE != hFind)
@@ -122,15 +122,15 @@ extern "C" UINT WINAPI WixRemoveFoldersEx(
122 ExitOnFailure(hr, "Failed to initialize WixRemoveFoldersEx."); 122 ExitOnFailure(hr, "Failed to initialize WixRemoveFoldersEx.");
123 123
124 // anything to do? 124 // anything to do?
125 if (S_OK != WcaTableExists(L"WixRemoveFolderEx")) 125 if (S_OK != WcaTableExists(L"Wix4RemoveFolderEx"))
126 { 126 {
127 WcaLog(LOGMSG_STANDARD, "WixRemoveFolderEx table doesn't exist, so there are no folders to remove."); 127 WcaLog(LOGMSG_STANDARD, "Wix4RemoveFolderEx table doesn't exist, so there are no folders to remove.");
128 ExitFunction(); 128 ExitFunction();
129 } 129 }
130 130
131 // query and loop through all the remove folders exceptions 131 // query and loop through all the remove folders exceptions
132 hr = WcaOpenExecuteView(vcsRemoveFolderExQuery, &hView); 132 hr = WcaOpenExecuteView(vcsRemoveFolderExQuery, &hView);
133 ExitOnFailure(hr, "Failed to open view on WixRemoveFolderEx table"); 133 ExitOnFailure(hr, "Failed to open view on Wix4RemoveFolderEx table");
134 134
135 while (S_OK == (hr = WcaFetchRecord(hView, &hRec))) 135 while (S_OK == (hr = WcaFetchRecord(hView, &hRec)))
136 { 136 {
@@ -173,7 +173,7 @@ extern "C" UINT WINAPI WixRemoveFoldersEx(
173 { 173 {
174 hr = S_OK; 174 hr = S_OK;
175 } 175 }
176 ExitOnFailure(hr, "Failure occured while processing WixRemoveFolderEx table"); 176 ExitOnFailure(hr, "Failure occured while processing Wix4RemoveFolderEx table");
177 177
178LExit: 178LExit:
179 if (hColumns) 179 if (hColumns)
diff --git a/src/ca/RestartManager.cpp b/src/ca/RestartManager.cpp
index 3cfc07ee..c31819c1 100644
--- a/src/ca/RestartManager.cpp
+++ b/src/ca/RestartManager.cpp
@@ -18,8 +18,8 @@ enum eRmuResourceType
18}; 18};
19 19
20LPCWSTR vcsRestartResourceQuery = 20LPCWSTR vcsRestartResourceQuery =
21 L"SELECT `WixRestartResource`.`WixRestartResource`, `WixRestartResource`.`Component_`, `WixRestartResource`.`Resource`, `WixRestartResource`.`Attributes` " 21 L"SELECT `Wix4RestartResource`.`Wix4RestartResource`, `Wix4RestartResource`.`Component_`, `Wix4RestartResource`.`Resource`, `Wix4RestartResource`.`Attributes` "
22 L"FROM `WixRestartResource`"; 22 L"FROM `Wix4RestartResource`";
23enum eRestartResourceQuery { rrqRestartResource = 1, rrqComponent, rrqResource, rrqAttributes }; 23enum eRestartResourceQuery { rrqRestartResource = 1, rrqComponent, rrqResource, rrqAttributes };
24 24
25/******************************************************************** 25/********************************************************************
@@ -58,9 +58,9 @@ extern "C" UINT __stdcall WixRegisterRestartResources(
58 ExitOnFailure(hr, "Failed to initialize."); 58 ExitOnFailure(hr, "Failed to initialize.");
59 59
60 // Skip if the table doesn't exist. 60 // Skip if the table doesn't exist.
61 if (S_OK != WcaTableExists(L"WixRestartResource")) 61 if (S_OK != WcaTableExists(L"Wix4RestartResource"))
62 { 62 {
63 WcaLog(LOGMSG_STANDARD, "The RestartResource table does not exist; there are no resources to register with Restart Manager."); 63 WcaLog(LOGMSG_STANDARD, "The Wix4RestartResource table does not exist; there are no resources to register with Restart Manager.");
64 ExitFunction(); 64 ExitFunction();
65 } 65 }
66 66
diff --git a/src/ca/TouchFile.cpp b/src/ca/TouchFile.cpp
index 1c40a3eb..e704f922 100644
--- a/src/ca/TouchFile.cpp
+++ b/src/ca/TouchFile.cpp
@@ -2,7 +2,7 @@
2 2
3#include "precomp.h" 3#include "precomp.h"
4 4
5LPCWSTR vcsTouchFileQuery = L"SELECT `WixTouchFile`, `Component_`, `Path`, `Attributes` FROM `WixTouchFile`"; 5LPCWSTR vcsTouchFileQuery = L"SELECT `Wix4TouchFile`, `Component_`, `Path`, `Attributes` FROM `Wix4TouchFile`";
6enum TOUCH_FILE_QUERY { tfqId = 1, tfqComponent, tfqPath, tfqTouchFileAttributes }; 6enum TOUCH_FILE_QUERY { tfqId = 1, tfqComponent, tfqPath, tfqTouchFileAttributes };
7 7
8enum TOUCH_FILE_ATTRIBUTE 8enum TOUCH_FILE_ATTRIBUTE
@@ -134,7 +134,7 @@ static HRESULT ProcessTouchFileTable(
134 LPWSTR sczRollbackData = NULL; 134 LPWSTR sczRollbackData = NULL;
135 LPWSTR sczExecuteData = NULL; 135 LPWSTR sczExecuteData = NULL;
136 136
137 if (S_OK != WcaTableExists(L"WixTouchFile")) 137 if (S_OK != WcaTableExists(L"Wix4TouchFile"))
138 { 138 {
139 ExitFunction(); 139 ExitFunction();
140 } 140 }
@@ -142,7 +142,7 @@ static HRESULT ProcessTouchFileTable(
142 ::GetSystemTimeAsFileTime(&ftModified); 142 ::GetSystemTimeAsFileTime(&ftModified);
143 143
144 hr = WcaOpenExecuteView(vcsTouchFileQuery, &hView); 144 hr = WcaOpenExecuteView(vcsTouchFileQuery, &hView);
145 ExitOnFailure(hr, "Failed to open view on WixTouchFile table"); 145 ExitOnFailure(hr, "Failed to open view on Wix4TouchFile table");
146 146
147 while (S_OK == (hr = WcaFetchRecord(hView, &hRec))) 147 while (S_OK == (hr = WcaFetchRecord(hView, &hRec)))
148 { 148 {
@@ -181,18 +181,18 @@ static HRESULT ProcessTouchFileTable(
181 { 181 {
182 hr = S_OK; 182 hr = S_OK;
183 } 183 }
184 ExitOnFailure(hr, "Failure occured while processing WixTouchFile table"); 184 ExitOnFailure(hr, "Failure occured while processing Wix4TouchFile table");
185 185
186 if (sczRollbackData) 186 if (sczRollbackData)
187 { 187 {
188 hr = WcaDoDeferredAction(L"WixRollbackTouchFile", sczRollbackData, 0); 188 hr = WcaDoDeferredAction(CUSTOM_ACTION_DECORATION(L"RollbackTouchFile"), sczRollbackData, 0);
189 ExitOnFailure(hr, "Failed to schedule WixRollbackTouchFile"); 189 ExitOnFailure(hr, "Failed to schedule RollbackTouchFile");
190 } 190 }
191 191
192 if (sczExecuteData) 192 if (sczExecuteData)
193 { 193 {
194 hr = WcaDoDeferredAction(L"WixExecuteTouchFile", sczExecuteData, 0); 194 hr = WcaDoDeferredAction(CUSTOM_ACTION_DECORATION(L"ExecuteTouchFile"), sczExecuteData, 0);
195 ExitOnFailure(hr, "Failed to schedule WixExecuteTouchFile"); 195 ExitOnFailure(hr, "Failed to schedule ExecuteTouchFile");
196 } 196 }
197 197
198LExit: 198LExit:
diff --git a/src/ca/XmlConfig.cpp b/src/ca/XmlConfig.cpp
index c12b2bc2..8c60979d 100644
--- a/src/ca/XmlConfig.cpp
+++ b/src/ca/XmlConfig.cpp
@@ -30,9 +30,9 @@ enum eXmlPreserveDate
30}; 30};
31 31
32LPCWSTR vcsXmlConfigQuery = 32LPCWSTR vcsXmlConfigQuery =
33 L"SELECT `XmlConfig`.`XmlConfig`, `XmlConfig`.`File`, `XmlConfig`.`ElementPath`, `XmlConfig`.`VerifyPath`, `XmlConfig`.`Name`, " 33 L"SELECT `Wix4XmlConfig`.`Wix4XmlConfig`, `Wix4XmlConfig`.`File`, `Wix4XmlConfig`.`ElementPath`, `Wix4XmlConfig`.`VerifyPath`, `Wix4XmlConfig`.`Name`, "
34 L"`XmlConfig`.`Value`, `XmlConfig`.`Flags`, `XmlConfig`.`Component_`, `Component`.`Attributes` " 34 L"`Wix4XmlConfig`.`Value`, `Wix4XmlConfig`.`Flags`, `Wix4XmlConfig`.`Component_`, `Component`.`Attributes` "
35 L"FROM `XmlConfig`,`Component` WHERE `XmlConfig`.`Component_`=`Component`.`Component` ORDER BY `File`, `Sequence`"; 35 L"FROM `Wix4XmlConfig`,`Component` WHERE `Wix4XmlConfig`.`Component_`=`Component`.`Component` ORDER BY `File`, `Sequence`";
36enum eXmlConfigQuery { xfqXmlConfig = 1, xfqFile, xfqElementPath, xfqVerifyPath, xfqName, xfqValue, xfqXmlFlags, xfqComponent, xfqCompAttributes }; 36enum eXmlConfigQuery { xfqXmlConfig = 1, xfqFile, xfqElementPath, xfqVerifyPath, xfqName, xfqValue, xfqXmlFlags, xfqComponent, xfqCompAttributes };
37 37
38struct XML_CONFIG_CHANGE 38struct XML_CONFIG_CHANGE
@@ -146,7 +146,7 @@ static HRESULT ReadXmlConfigTable(
146 146
147 // loop through all the xml configurations 147 // loop through all the xml configurations
148 hr = WcaOpenExecuteView(vcsXmlConfigQuery, &hView); 148 hr = WcaOpenExecuteView(vcsXmlConfigQuery, &hView);
149 ExitOnFailure(hr, "failed to open view on XmlConfig table"); 149 ExitOnFailure(hr, "failed to open view on Wix4XmlConfig table");
150 150
151 while (S_OK == (hr = WcaFetchRecord(hView, &hRec))) 151 while (S_OK == (hr = WcaFetchRecord(hView, &hRec)))
152 { 152 {
@@ -155,13 +155,13 @@ static HRESULT ReadXmlConfigTable(
155 155
156 // Get record Id 156 // Get record Id
157 hr = WcaGetRecordString(hRec, xfqXmlConfig, &pwzData); 157 hr = WcaGetRecordString(hRec, xfqXmlConfig, &pwzData);
158 ExitOnFailure(hr, "failed to get XmlConfig record Id"); 158 ExitOnFailure(hr, "failed to get Wix4XmlConfig record Id");
159 hr = StringCchCopyW((*ppxfcTail)->wzId, countof((*ppxfcTail)->wzId), pwzData); 159 hr = StringCchCopyW((*ppxfcTail)->wzId, countof((*ppxfcTail)->wzId), pwzData);
160 ExitOnFailure(hr, "failed to copy XmlConfig record Id"); 160 ExitOnFailure(hr, "failed to copy Wix4XmlConfig record Id");
161 161
162 // Get component name 162 // Get component name
163 hr = WcaGetRecordString(hRec, xfqComponent, &pwzData); 163 hr = WcaGetRecordString(hRec, xfqComponent, &pwzData);
164 ExitOnFailure(hr, "failed to get component name for XmlConfig: %ls", (*ppxfcTail)->wzId); 164 ExitOnFailure(hr, "failed to get component name for Wix4XmlConfig: %ls", (*ppxfcTail)->wzId);
165 165
166 // Get the component's state 166 // Get the component's state
167 if (0 < lstrlenW(pwzData)) 167 if (0 < lstrlenW(pwzData))
@@ -175,45 +175,45 @@ static HRESULT ReadXmlConfigTable(
175 175
176 // Get the xml file 176 // Get the xml file
177 hr = WcaGetRecordFormattedString(hRec, xfqFile, &pwzData); 177 hr = WcaGetRecordFormattedString(hRec, xfqFile, &pwzData);
178 ExitOnFailure(hr, "failed to get xml file for XmlConfig: %ls", (*ppxfcTail)->wzId); 178 ExitOnFailure(hr, "failed to get xml file for Wix4XmlConfig: %ls", (*ppxfcTail)->wzId);
179 hr = StringCchCopyW((*ppxfcTail)->wzFile, countof((*ppxfcTail)->wzFile), pwzData); 179 hr = StringCchCopyW((*ppxfcTail)->wzFile, countof((*ppxfcTail)->wzFile), pwzData);
180 ExitOnFailure(hr, "failed to copy xml file path"); 180 ExitOnFailure(hr, "failed to copy xml file path");
181 181
182 // Figure out if the file is already on the machine or if it's being installed 182 // Figure out if the file is already on the machine or if it's being installed
183 hr = WcaGetRecordString(hRec, xfqFile, &pwzData); 183 hr = WcaGetRecordString(hRec, xfqFile, &pwzData);
184 ExitOnFailure(hr, "failed to get xml file for XmlConfig: %ls", (*ppxfcTail)->wzId); 184 ExitOnFailure(hr, "failed to get xml file for Wix4XmlConfig: %ls", (*ppxfcTail)->wzId);
185 if (NULL != wcsstr(pwzData, L"[!") || NULL != wcsstr(pwzData, L"[#")) 185 if (NULL != wcsstr(pwzData, L"[!") || NULL != wcsstr(pwzData, L"[#"))
186 { 186 {
187 (*ppxfcTail)->fInstalledFile = TRUE; 187 (*ppxfcTail)->fInstalledFile = TRUE;
188 } 188 }
189 189
190 // Get the XmlConfig table flags 190 // Get the Wix4XmlConfig table flags
191 hr = WcaGetRecordInteger(hRec, xfqXmlFlags, &(*ppxfcTail)->iXmlFlags); 191 hr = WcaGetRecordInteger(hRec, xfqXmlFlags, &(*ppxfcTail)->iXmlFlags);
192 ExitOnFailure(hr, "failed to get XmlConfig flags for XmlConfig: %ls", (*ppxfcTail)->wzId); 192 ExitOnFailure(hr, "failed to get Wix4XmlConfig flags for Wix4XmlConfig: %ls", (*ppxfcTail)->wzId);
193 193
194 // Get the Element Path 194 // Get the Element Path
195 hr = WcaGetRecordFormattedString(hRec, xfqElementPath, &(*ppxfcTail)->pwzElementPath); 195 hr = WcaGetRecordFormattedString(hRec, xfqElementPath, &(*ppxfcTail)->pwzElementPath);
196 ExitOnFailure(hr, "failed to get Element Path for XmlConfig: %ls", (*ppxfcTail)->wzId); 196 ExitOnFailure(hr, "failed to get Element Path for Wix4XmlConfig: %ls", (*ppxfcTail)->wzId);
197 197
198 // Get the Verify Path 198 // Get the Verify Path
199 hr = WcaGetRecordFormattedString(hRec, xfqVerifyPath, &(*ppxfcTail)->pwzVerifyPath); 199 hr = WcaGetRecordFormattedString(hRec, xfqVerifyPath, &(*ppxfcTail)->pwzVerifyPath);
200 ExitOnFailure(hr, "failed to get Verify Path for XmlConfig: %ls", (*ppxfcTail)->wzId); 200 ExitOnFailure(hr, "failed to get Verify Path for Wix4XmlConfig: %ls", (*ppxfcTail)->wzId);
201 201
202 // Get the name 202 // Get the name
203 hr = WcaGetRecordFormattedString(hRec, xfqName, &pwzData); 203 hr = WcaGetRecordFormattedString(hRec, xfqName, &pwzData);
204 ExitOnFailure(hr, "failed to get Name for XmlConfig: %ls", (*ppxfcTail)->wzId); 204 ExitOnFailure(hr, "failed to get Name for Wix4XmlConfig: %ls", (*ppxfcTail)->wzId);
205 hr = StringCchCopyW((*ppxfcTail)->wzName, countof((*ppxfcTail)->wzName), pwzData); 205 hr = StringCchCopyW((*ppxfcTail)->wzName, countof((*ppxfcTail)->wzName), pwzData);
206 ExitOnFailure(hr, "failed to copy name of element"); 206 ExitOnFailure(hr, "failed to copy name of element");
207 207
208 // Get the value 208 // Get the value
209 hr = WcaGetRecordFormattedString(hRec, xfqValue, &pwzData); 209 hr = WcaGetRecordFormattedString(hRec, xfqValue, &pwzData);
210 ExitOnFailure(hr, "failed to get Value for XmlConfig: %ls", (*ppxfcTail)->wzId); 210 ExitOnFailure(hr, "failed to get Value for Wix4XmlConfig: %ls", (*ppxfcTail)->wzId);
211 hr = StrAllocString(&(*ppxfcTail)->pwzValue, pwzData, 0); 211 hr = StrAllocString(&(*ppxfcTail)->pwzValue, pwzData, 0);
212 ExitOnFailure(hr, "failed to allocate buffer for value"); 212 ExitOnFailure(hr, "failed to allocate buffer for value");
213 213
214 // Get the component attributes 214 // Get the component attributes
215 hr = WcaGetRecordInteger(hRec, xfqCompAttributes, &(*ppxfcTail)->iCompAttributes); 215 hr = WcaGetRecordInteger(hRec, xfqCompAttributes, &(*ppxfcTail)->iCompAttributes);
216 ExitOnFailure(hr, "failed to get component attributes for XmlConfig: %ls", (*ppxfcTail)->wzId); 216 ExitOnFailure(hr, "failed to get component attributes for Wix4XmlConfig: %ls", (*ppxfcTail)->wzId);
217 } 217 }
218 218
219 // if we looped through all records all is well 219 // if we looped through all records all is well
@@ -359,7 +359,7 @@ static HRESULT BeginChangeFile(
359 hr = WcaWriteStreamToCaData(pbData, cbData, &pwzRollbackCustomActionData); 359 hr = WcaWriteStreamToCaData(pbData, cbData, &pwzRollbackCustomActionData);
360 ExitOnFailure(hr, "failed to write file contents to rollback custom action data."); 360 ExitOnFailure(hr, "failed to write file contents to rollback custom action data.");
361 361
362 hr = WcaDoDeferredAction(PLATFORM_DECORATION(L"ExecXmlConfigRollback"), pwzRollbackCustomActionData, COST_XMLFILE); 362 hr = WcaDoDeferredAction(CUSTOM_ACTION_DECORATION(L"ExecXmlConfigRollback"), pwzRollbackCustomActionData, COST_XMLFILE);
363 ExitOnFailure(hr, "failed to schedule ExecXmlConfigRollback for file: %ls", pwzFile); 363 ExitOnFailure(hr, "failed to schedule ExecXmlConfigRollback for file: %ls", pwzFile);
364 364
365 ReleaseStr(pwzRollbackCustomActionData); 365 ReleaseStr(pwzRollbackCustomActionData);
@@ -459,10 +459,10 @@ extern "C" UINT __stdcall SchedXmlConfig(
459 ExitOnFailure(hr, "failed to initialize"); 459 ExitOnFailure(hr, "failed to initialize");
460 460
461 hr = ReadXmlConfigTable(&pxfcHead, &pxfcTail); 461 hr = ReadXmlConfigTable(&pxfcHead, &pxfcTail);
462 MessageExitOnFailure(hr, msierrXmlConfigFailedRead, "failed to read XmlConfig table"); 462 MessageExitOnFailure(hr, msierrXmlConfigFailedRead, "failed to read Wix4XmlConfig table");
463 463
464 hr = ProcessChanges(&pxfcHead); 464 hr = ProcessChanges(&pxfcHead);
465 ExitOnFailure(hr, "failed to process XmlConfig changes"); 465 ExitOnFailure(hr, "failed to process Wix4XmlConfig changes");
466 466
467 // loop through all the xml configurations 467 // loop through all the xml configurations
468 for (pxfc = pxfcHead; pxfc; pxfc = pxfc->pxfcNext) 468 for (pxfc = pxfcHead; pxfc; pxfc = pxfc->pxfcNext)
@@ -557,7 +557,7 @@ extern "C" UINT __stdcall SchedXmlConfig(
557 { 557 {
558 Assert(0 < cFiles); 558 Assert(0 < cFiles);
559 559
560 hr = WcaDoDeferredAction(PLATFORM_DECORATION(L"ExecXmlConfig"), pwzCustomActionData, cFiles * COST_XMLFILE); 560 hr = WcaDoDeferredAction(CUSTOM_ACTION_DECORATION(L"ExecXmlConfig"), pwzCustomActionData, cFiles * COST_XMLFILE);
561 ExitOnFailure(hr, "failed to schedule ExecXmlConfig action"); 561 ExitOnFailure(hr, "failed to schedule ExecXmlConfig action");
562 } 562 }
563 563
diff --git a/src/ca/XmlFile.cpp b/src/ca/XmlFile.cpp
index fc6f519b..95449126 100644
--- a/src/ca/XmlFile.cpp
+++ b/src/ca/XmlFile.cpp
@@ -36,9 +36,9 @@ enum eXmlSelectionLanguage
36}; 36};
37 37
38LPCWSTR vcsXmlFileQuery = 38LPCWSTR vcsXmlFileQuery =
39 L"SELECT `XmlFile`.`XmlFile`, `XmlFile`.`File`, `XmlFile`.`ElementPath`, `XmlFile`.`Name`, `XmlFile`.`Value`, " 39 L"SELECT `Wix4XmlFile`.`Wix4XmlFile`, `Wix4XmlFile`.`File`, `Wix4XmlFile`.`ElementPath`, `Wix4XmlFile`.`Name`, `Wix4XmlFile`.`Value`, "
40 L"`XmlFile`.`Flags`, `XmlFile`.`Component_`, `Component`.`Attributes` " 40 L"`Wix4XmlFile`.`Flags`, `Wix4XmlFile`.`Component_`, `Component`.`Attributes` "
41 L"FROM `XmlFile`,`Component` WHERE `XmlFile`.`Component_`=`Component`.`Component` ORDER BY `File`, `Sequence`"; 41 L"FROM `Wix4XmlFile`,`Component` WHERE `Wix4XmlFile`.`Component_`=`Component`.`Component` ORDER BY `File`, `Sequence`";
42enum eXmlFileQuery { xfqXmlFile = 1, xfqFile, xfqXPath, xfqName, xfqValue, xfqXmlFlags, xfqComponent, xfqCompAttributes }; 42enum eXmlFileQuery { xfqXmlFile = 1, xfqFile, xfqXPath, xfqName, xfqValue, xfqXmlFlags, xfqComponent, xfqCompAttributes };
43 43
44struct XML_FILE_CHANGE 44struct XML_FILE_CHANGE
@@ -130,12 +130,14 @@ static HRESULT ReadXmlFileTable(
130 LPWSTR pwzData = NULL; 130 LPWSTR pwzData = NULL;
131 131
132 // check to see if necessary tables are specified 132 // check to see if necessary tables are specified
133 if (S_FALSE == WcaTableExists(L"XmlFile")) 133 if (S_FALSE == WcaTableExists(L"Wix4XmlFile"))
134 {
134 ExitFunction1(hr = S_FALSE); 135 ExitFunction1(hr = S_FALSE);
136 }
135 137
136 // loop through all the xml configurations 138 // loop through all the xml configurations
137 hr = WcaOpenExecuteView(vcsXmlFileQuery, &hView); 139 hr = WcaOpenExecuteView(vcsXmlFileQuery, &hView);
138 ExitOnFailure(hr, "failed to open view on XmlFile table"); 140 ExitOnFailure(hr, "failed to open view on Wix4XmlFile table");
139 141
140 while (S_OK == (hr = WcaFetchRecord(hView, &hRec))) 142 while (S_OK == (hr = WcaFetchRecord(hView, &hRec)))
141 { 143 {
@@ -144,13 +146,13 @@ static HRESULT ReadXmlFileTable(
144 146
145 // Get record Id 147 // Get record Id
146 hr = WcaGetRecordString(hRec, xfqXmlFile, &pwzData); 148 hr = WcaGetRecordString(hRec, xfqXmlFile, &pwzData);
147 ExitOnFailure(hr, "failed to get XmlFile record Id"); 149 ExitOnFailure(hr, "failed to get Wix4XmlFile record Id");
148 hr = StringCchCopyW((*ppxfcTail)->wzId, countof((*ppxfcTail)->wzId), pwzData); 150 hr = StringCchCopyW((*ppxfcTail)->wzId, countof((*ppxfcTail)->wzId), pwzData);
149 ExitOnFailure(hr, "failed to copy XmlFile record Id"); 151 ExitOnFailure(hr, "failed to copy Wix4XmlFile record Id");
150 152
151 // Get component name 153 // Get component name
152 hr = WcaGetRecordString(hRec, xfqComponent, &pwzData); 154 hr = WcaGetRecordString(hRec, xfqComponent, &pwzData);
153 ExitOnFailure(hr, "failed to get component name for XmlFile: %ls", (*ppxfcTail)->wzId); 155 ExitOnFailure(hr, "failed to get component name for Wix4XmlFile: %ls", (*ppxfcTail)->wzId);
154 156
155 // Get the component's state 157 // Get the component's state
156 er = ::MsiGetComponentStateW(WcaGetInstallHandle(), pwzData, &(*ppxfcTail)->isInstalled, &(*ppxfcTail)->isAction); 158 er = ::MsiGetComponentStateW(WcaGetInstallHandle(), pwzData, &(*ppxfcTail)->isInstalled, &(*ppxfcTail)->isAction);
@@ -158,33 +160,33 @@ static HRESULT ReadXmlFileTable(
158 160
159 // Get the xml file 161 // Get the xml file
160 hr = WcaGetRecordFormattedString(hRec, xfqFile, &pwzData); 162 hr = WcaGetRecordFormattedString(hRec, xfqFile, &pwzData);
161 ExitOnFailure(hr, "failed to get xml file for XmlFile: %ls", (*ppxfcTail)->wzId); 163 ExitOnFailure(hr, "failed to get xml file for Wix4XmlFile: %ls", (*ppxfcTail)->wzId);
162 hr = StringCchCopyW((*ppxfcTail)->wzFile, countof((*ppxfcTail)->wzFile), pwzData); 164 hr = StringCchCopyW((*ppxfcTail)->wzFile, countof((*ppxfcTail)->wzFile), pwzData);
163 ExitOnFailure(hr, "failed to copy xml file path"); 165 ExitOnFailure(hr, "failed to copy xml file path");
164 166
165 // Get the XmlFile table flags 167 // Get the Wix4XmlFile table flags
166 hr = WcaGetRecordInteger(hRec, xfqXmlFlags, &(*ppxfcTail)->iXmlFlags); 168 hr = WcaGetRecordInteger(hRec, xfqXmlFlags, &(*ppxfcTail)->iXmlFlags);
167 ExitOnFailure(hr, "failed to get XmlFile flags for XmlFile: %ls", (*ppxfcTail)->wzId); 169 ExitOnFailure(hr, "failed to get Wix4XmlFile flags for Wix4XmlFile: %ls", (*ppxfcTail)->wzId);
168 170
169 // Get the XPath 171 // Get the XPath
170 hr = WcaGetRecordFormattedString(hRec, xfqXPath, &(*ppxfcTail)->pwzElementPath); 172 hr = WcaGetRecordFormattedString(hRec, xfqXPath, &(*ppxfcTail)->pwzElementPath);
171 ExitOnFailure(hr, "failed to get XPath for XmlFile: %ls", (*ppxfcTail)->wzId); 173 ExitOnFailure(hr, "failed to get XPath for Wix4XmlFile: %ls", (*ppxfcTail)->wzId);
172 174
173 // Get the name 175 // Get the name
174 hr = WcaGetRecordFormattedString(hRec, xfqName, &pwzData); 176 hr = WcaGetRecordFormattedString(hRec, xfqName, &pwzData);
175 ExitOnFailure(hr, "failed to get Name for XmlFile: %ls", (*ppxfcTail)->wzId); 177 ExitOnFailure(hr, "failed to get Name for Wix4XmlFile: %ls", (*ppxfcTail)->wzId);
176 hr = StringCchCopyW((*ppxfcTail)->wzName, countof((*ppxfcTail)->wzName), pwzData); 178 hr = StringCchCopyW((*ppxfcTail)->wzName, countof((*ppxfcTail)->wzName), pwzData);
177 ExitOnFailure(hr, "failed to copy name of element"); 179 ExitOnFailure(hr, "failed to copy name of element");
178 180
179 // Get the value 181 // Get the value
180 hr = WcaGetRecordFormattedString(hRec, xfqValue, &pwzData); 182 hr = WcaGetRecordFormattedString(hRec, xfqValue, &pwzData);
181 ExitOnFailure(hr, "failed to get Value for XmlFile: %ls", (*ppxfcTail)->wzId); 183 ExitOnFailure(hr, "failed to get Value for Wix4XmlFile: %ls", (*ppxfcTail)->wzId);
182 hr = StrAllocString(&(*ppxfcTail)->pwzValue, pwzData, 0); 184 hr = StrAllocString(&(*ppxfcTail)->pwzValue, pwzData, 0);
183 ExitOnFailure(hr, "failed to allocate buffer for value"); 185 ExitOnFailure(hr, "failed to allocate buffer for value");
184 186
185 // Get the component attributes 187 // Get the component attributes
186 hr = WcaGetRecordInteger(hRec, xfqCompAttributes, &(*ppxfcTail)->iCompAttributes); 188 hr = WcaGetRecordInteger(hRec, xfqCompAttributes, &(*ppxfcTail)->iCompAttributes);
187 ExitOnFailure(hr, "failed to get component attributes for XmlFile: %ls", (*ppxfcTail)->wzId); 189 ExitOnFailure(hr, "failed to get component attributes for Wix4XmlFile: %ls", (*ppxfcTail)->wzId);
188 } 190 }
189 191
190 // if we looped through all records all is well 192 // if we looped through all records all is well
@@ -254,7 +256,7 @@ static HRESULT BeginChangeFile(
254 hr = WcaWriteStreamToCaData(pbData, cbData, &pwzRollbackCustomActionData); 256 hr = WcaWriteStreamToCaData(pbData, cbData, &pwzRollbackCustomActionData);
255 ExitOnFailure(hr, "failed to write file contents to rollback custom action data."); 257 ExitOnFailure(hr, "failed to write file contents to rollback custom action data.");
256 258
257 hr = WcaDoDeferredAction(PLATFORM_DECORATION(L"ExecXmlFileRollback"), pwzRollbackCustomActionData, COST_XMLFILE); 259 hr = WcaDoDeferredAction(CUSTOM_ACTION_DECORATION(L"ExecXmlFileRollback"), pwzRollbackCustomActionData, COST_XMLFILE);
258 ExitOnFailure(hr, "failed to schedule ExecXmlFileRollback for file: %ls", pwzFile); 260 ExitOnFailure(hr, "failed to schedule ExecXmlFileRollback for file: %ls", pwzFile);
259 261
260 ReleaseStr(pwzRollbackCustomActionData); 262 ReleaseStr(pwzRollbackCustomActionData);
@@ -325,11 +327,11 @@ extern "C" UINT __stdcall SchedXmlFile(
325 hr = ReadXmlFileTable(&pxfcHead, &pxfcTail); 327 hr = ReadXmlFileTable(&pxfcHead, &pxfcTail);
326 if (S_FALSE == hr) 328 if (S_FALSE == hr)
327 { 329 {
328 WcaLog(LOGMSG_VERBOSE, "Skipping SchedXmlFile because XmlFile table not present"); 330 WcaLog(LOGMSG_VERBOSE, "Skipping SchedXmlFile because Wix4XmlFile table not present");
329 ExitFunction1(hr = S_OK); 331 ExitFunction1(hr = S_OK);
330 } 332 }
331 333
332 MessageExitOnFailure(hr, msierrXmlFileFailedRead, "failed to read XmlFile table"); 334 MessageExitOnFailure(hr, msierrXmlFileFailedRead, "failed to read Wix4XmlFile table");
333 335
334 // loop through all the xml configurations 336 // loop through all the xml configurations
335 for (pxfc = pxfcHead; pxfc; pxfc = pxfc->pxfcNext) 337 for (pxfc = pxfcHead; pxfc; pxfc = pxfc->pxfcNext)
@@ -454,7 +456,7 @@ extern "C" UINT __stdcall SchedXmlFile(
454 { 456 {
455 Assert(0 < cFiles); 457 Assert(0 < cFiles);
456 458
457 hr = WcaDoDeferredAction(PLATFORM_DECORATION(L"ExecXmlFile"), pwzCustomActionData, cFiles * COST_XMLFILE); 459 hr = WcaDoDeferredAction(CUSTOM_ACTION_DECORATION(L"ExecXmlFile"), pwzCustomActionData, cFiles * COST_XMLFILE);
458 ExitOnFailure(hr, "failed to schedule ExecXmlFile action"); 460 ExitOnFailure(hr, "failed to schedule ExecXmlFile action");
459 } 461 }
460 462
diff --git a/src/ca/caDecor.h b/src/ca/caDecor.h
new file mode 100644
index 00000000..56cfb201
--- /dev/null
+++ b/src/ca/caDecor.h
@@ -0,0 +1,13 @@
1#pragma once
2// 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.
3
4
5#if defined(_M_ARM64)
6#define CUSTOM_ACTION_DECORATION(f) L"Wix4" f L"_A64"
7#elif defined(_M_AMD64)
8#define CUSTOM_ACTION_DECORATION(f) L"Wix4" f L"_X64"
9#elif defined(_M_ARM)
10#define CUSTOM_ACTION_DECORATION(f) L"Wix4" f L"_ARM"
11#else
12#define CUSTOM_ACTION_DECORATION(f) L"Wix4" f L"_X86"
13#endif
diff --git a/src/ca/caSuffix.h b/src/ca/caSuffix.h
deleted file mode 100644
index 303a99e9..00000000
--- a/src/ca/caSuffix.h
+++ /dev/null
@@ -1,11 +0,0 @@
1#pragma once
2// 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.
3
4
5#if defined _WIN64
6#define PLATFORM_DECORATION(f) f L"_64"
7#elif defined ARM
8#define PLATFORM_DECORATION(f) f L"_ARM"
9#else
10#define PLATFORM_DECORATION(f) f
11#endif
diff --git a/src/ca/netshortcuts.cpp b/src/ca/netshortcuts.cpp
index 59ef838b..6ff129db 100644
--- a/src/ca/netshortcuts.cpp
+++ b/src/ca/netshortcuts.cpp
@@ -4,7 +4,7 @@
4 4
5LPCWSTR vcsShortcutsQuery = 5LPCWSTR vcsShortcutsQuery =
6 L"SELECT `Component_`, `Directory_`, `Name`, `Target`, `Attributes`, `IconFile`, `IconIndex` " 6 L"SELECT `Component_`, `Directory_`, `Name`, `Target`, `Attributes`, `IconFile`, `IconIndex` "
7 L"FROM `WixInternetShortcut`"; 7 L"FROM `Wix4InternetShortcut`";
8enum eShortcutsQuery { esqComponent = 1, esqDirectory, esqFilename, esqTarget, esqAttributes, esqIconFile, esqIconIndex }; 8enum eShortcutsQuery { esqComponent = 1, esqDirectory, esqFilename, esqTarget, esqAttributes, esqIconFile, esqIconIndex };
9enum eShortcutsAttributes { esaLink = 0, esaURL = 1 }; 9enum eShortcutsAttributes { esaLink = 0, esaURL = 1 };
10 10
@@ -44,9 +44,9 @@ extern "C" UINT __stdcall WixSchedInternetShortcuts(
44 ExitOnFailure(hr, "failed to initialize WixSchedInternetShortcuts."); 44 ExitOnFailure(hr, "failed to initialize WixSchedInternetShortcuts.");
45 45
46 // anything to do? 46 // anything to do?
47 if (S_OK != WcaTableExists(L"WixInternetShortcut")) 47 if (S_OK != WcaTableExists(L"Wix4InternetShortcut"))
48 { 48 {
49 WcaLog(LOGMSG_STANDARD, "WixInternetShortcut table doesn't exist, so there are no Internet shortcuts to process"); 49 WcaLog(LOGMSG_STANDARD, "Wix4InternetShortcut table doesn't exist, so there are no Internet shortcuts to process");
50 goto LExit; 50 goto LExit;
51 } 51 }
52 52
@@ -71,7 +71,7 @@ extern "C" UINT __stdcall WixSchedInternetShortcuts(
71 71
72 // query and loop through all the shortcuts 72 // query and loop through all the shortcuts
73 hr = WcaOpenExecuteView(vcsShortcutsQuery, &hView); 73 hr = WcaOpenExecuteView(vcsShortcutsQuery, &hView);
74 ExitOnFailure(hr, "failed to open view on WixInternetShortcut table"); 74 ExitOnFailure(hr, "failed to open view on Wix4InternetShortcut table");
75 75
76 while (S_OK == (hr = WcaFetchRecord(hView, &hRec))) 76 while (S_OK == (hr = WcaFetchRecord(hView, &hRec)))
77 { 77 {
@@ -91,7 +91,7 @@ extern "C" UINT __stdcall WixSchedInternetShortcuts(
91 hr = WcaGetRecordInteger(hRec, esqIconIndex, &iIconIndex); 91 hr = WcaGetRecordInteger(hRec, esqIconIndex, &iIconIndex);
92 ExitOnFailure(hr, "failed to get shortcut icon index"); 92 ExitOnFailure(hr, "failed to get shortcut icon index");
93 93
94 // skip processing this WixInternetShortcut row if the component isn't being configured 94 // skip processing this Wix4InternetShortcut row if the component isn't being configured
95 WCA_TODO todo = WcaGetComponentToDo(pwzComponent); 95 WCA_TODO todo = WcaGetComponentToDo(pwzComponent);
96 if (WCA_TODO_UNKNOWN == todo) 96 if (WCA_TODO_UNKNOWN == todo)
97 { 97 {
@@ -144,7 +144,7 @@ extern "C" UINT __stdcall WixSchedInternetShortcuts(
144 { 144 {
145 hr = S_OK; 145 hr = S_OK;
146 } 146 }
147 ExitOnFailure(hr, "Failure occured while processing WixInternetShortcut table"); 147 ExitOnFailure(hr, "Failure occured while processing Wix4InternetShortcut table");
148 148
149 // if we have any shortcuts to install 149 // if we have any shortcuts to install
150 if (pwzCustomActionData && *pwzCustomActionData) 150 if (pwzCustomActionData && *pwzCustomActionData)
@@ -154,9 +154,9 @@ extern "C" UINT __stdcall WixSchedInternetShortcuts(
154 ExitOnFailure(hr, "failed to extend progress bar for InternetShortcuts"); 154 ExitOnFailure(hr, "failed to extend progress bar for InternetShortcuts");
155 155
156 // provide custom action data to deferred and rollback CAs 156 // provide custom action data to deferred and rollback CAs
157 hr = WcaSetProperty(PLATFORM_DECORATION(L"WixRollbackInternetShortcuts"), pwzCustomActionData); 157 hr = WcaSetProperty(CUSTOM_ACTION_DECORATION(L"RollbackInternetShortcuts"), pwzCustomActionData);
158 ExitOnFailure(hr, "failed to set WixRollbackInternetShortcuts rollback custom action data"); 158 ExitOnFailure(hr, "failed to set WixRollbackInternetShortcuts rollback custom action data");
159 hr = WcaSetProperty(PLATFORM_DECORATION(L"WixCreateInternetShortcuts"), pwzCustomActionData); 159 hr = WcaSetProperty(CUSTOM_ACTION_DECORATION(L"CreateInternetShortcuts"), pwzCustomActionData);
160 ExitOnFailure(hr, "failed to set WixCreateInternetShortcuts custom action data"); 160 ExitOnFailure(hr, "failed to set WixCreateInternetShortcuts custom action data");
161 } 161 }
162 162
diff --git a/src/ca/precomp.h b/src/ca/precomp.h
index 66e2f6b0..c5d6afe5 100644
--- a/src/ca/precomp.h
+++ b/src/ca/precomp.h
@@ -51,4 +51,4 @@
51#include "scasmb.h" 51#include "scasmb.h"
52#include "scasmbexec.h" 52#include "scasmbexec.h"
53 53
54#include "caSuffix.h" 54#include "caDecor.h"
diff --git a/src/ca/scamanifest.cpp b/src/ca/scamanifest.cpp
index 58b4054d..adb8d3d3 100644
--- a/src/ca/scamanifest.cpp
+++ b/src/ca/scamanifest.cpp
@@ -2,8 +2,8 @@
2 2
3#include "precomp.h" 3#include "precomp.h"
4 4
5LPCWSTR vcsPerfmonManifestQuery = L"SELECT `Component_`, `File`, `ResourceFileDirectory` FROM `PerfmonManifest`"; 5LPCWSTR vcsPerfmonManifestQuery = L"SELECT `Component_`, `File`, `ResourceFileDirectory` FROM `Wix4PerfmonManifest`";
6LPCWSTR vcsEventManifestQuery = L"SELECT `Component_`, `File` FROM `EventManifest`"; 6LPCWSTR vcsEventManifestQuery = L"SELECT `Component_`, `File` FROM `Wix4EventManifest`";
7enum ePerfMonManifestQuery { pfmComponent = 1, pfmFile, pfmResourceFileDir }; 7enum ePerfMonManifestQuery { pfmComponent = 1, pfmFile, pfmResourceFileDir };
8enum eEventManifestQuery { emComponent = 1, emFile}; 8enum eEventManifestQuery { emComponent = 1, emFile};
9 9
@@ -46,9 +46,9 @@ extern "C" UINT __stdcall ConfigurePerfmonManifestRegister(
46 ExitFunction1(hr = S_FALSE); 46 ExitFunction1(hr = S_FALSE);
47 } 47 }
48 // check to see if necessary tables are specified 48 // check to see if necessary tables are specified
49 if (S_OK != WcaTableExists(L"PerfmonManifest")) 49 if (S_OK != WcaTableExists(L"Wix4PerfmonManifest"))
50 { 50 {
51 WcaLog(LOGMSG_VERBOSE, "Skipping ConfigurePerfmonManifestRegister() because PerfmonManifest table not present"); 51 WcaLog(LOGMSG_VERBOSE, "Skipping ConfigurePerfmonManifestRegister() because Wix4PerfmonManifest table not present");
52 ExitFunction1(hr = S_FALSE); 52 ExitFunction1(hr = S_FALSE);
53 } 53 }
54 54
@@ -79,7 +79,7 @@ extern "C" UINT __stdcall ConfigurePerfmonManifestRegister(
79 hr = StrAllocFormatted(&pwzCommand, L"\"unlodctr.exe\" /m:\"%s\"", pwzFile); 79 hr = StrAllocFormatted(&pwzCommand, L"\"unlodctr.exe\" /m:\"%s\"", pwzFile);
80 ExitOnFailure(hr, "failed to copy string in PerfMonManifest"); 80 ExitOnFailure(hr, "failed to copy string in PerfMonManifest");
81 81
82 hr = WcaDoDeferredAction(PLATFORM_DECORATION(L"RollbackRegisterPerfmonManifest"), pwzCommand, COST_PERFMONMANIFEST_UNREGISTER); 82 hr = WcaDoDeferredAction(CUSTOM_ACTION_DECORATION(L"RollbackRegisterPerfmonManifest"), pwzCommand, COST_PERFMONMANIFEST_UNREGISTER);
83 ExitOnFailure(hr, "failed to schedule RollbackRegisterPerfmonManifest action"); 83 ExitOnFailure(hr, "failed to schedule RollbackRegisterPerfmonManifest action");
84 84
85 if ( *pwzResourceFilePath ) 85 if ( *pwzResourceFilePath )
@@ -95,7 +95,7 @@ extern "C" UINT __stdcall ConfigurePerfmonManifestRegister(
95 95
96 WcaLog(LOGMSG_VERBOSE, "RegisterPerfmonManifest's CustomActionData: '%ls'", pwzCommand); 96 WcaLog(LOGMSG_VERBOSE, "RegisterPerfmonManifest's CustomActionData: '%ls'", pwzCommand);
97 97
98 hr = WcaDoDeferredAction(PLATFORM_DECORATION(L"RegisterPerfmonManifest"), pwzCommand, COST_PERFMONMANIFEST_REGISTER); 98 hr = WcaDoDeferredAction(CUSTOM_ACTION_DECORATION(L"RegisterPerfmonManifest"), pwzCommand, COST_PERFMONMANIFEST_REGISTER);
99 ExitOnFailure(hr, "failed to schedule RegisterPerfmonManifest action"); 99 ExitOnFailure(hr, "failed to schedule RegisterPerfmonManifest action");
100 } 100 }
101 101
@@ -143,40 +143,40 @@ extern "C" UINT __stdcall ConfigurePerfmonManifestUnregister(
143 ExitFunction1(hr = S_FALSE); 143 ExitFunction1(hr = S_FALSE);
144 } 144 }
145 // check to see if necessary tables are specified 145 // check to see if necessary tables are specified
146 if (WcaTableExists(L"PerfmonManifest") != S_OK) 146 if (WcaTableExists(L"Wix4PerfmonManifest") != S_OK)
147 { 147 {
148 WcaLog(LOGMSG_VERBOSE, "Skipping ConfigurePerfmonManifestUnregister() because PerfmonManifest table not present"); 148 WcaLog(LOGMSG_VERBOSE, "Skipping ConfigurePerfmonManifestUnregister() because Wix4PerfmonManifest table not present");
149 ExitFunction1(hr = S_FALSE); 149 ExitFunction1(hr = S_FALSE);
150 } 150 }
151 151
152 hr = WcaOpenExecuteView(vcsPerfmonManifestQuery, &hView); 152 hr = WcaOpenExecuteView(vcsPerfmonManifestQuery, &hView);
153 ExitOnFailure(hr, "failed to open view on PerfMonManifest table"); 153 ExitOnFailure(hr, "failed to open view on Wix4PerfmonManifest table");
154 while ((hr = WcaFetchRecord(hView, &hRec)) == S_OK) 154 while ((hr = WcaFetchRecord(hView, &hRec)) == S_OK)
155 { 155 {
156 // get component install state 156 // get component install state
157 hr = WcaGetRecordString(hRec, pfmComponent, &pwzData); 157 hr = WcaGetRecordString(hRec, pfmComponent, &pwzData);
158 ExitOnFailure(hr, "failed to get Component for PerfMonManifest"); 158 ExitOnFailure(hr, "failed to get Component for Wix4PerfmonManifest");
159 er = ::MsiGetComponentStateW(hInstall, pwzData, &isInstalled, &isAction); 159 er = ::MsiGetComponentStateW(hInstall, pwzData, &isInstalled, &isAction);
160 hr = HRESULT_FROM_WIN32(er); 160 hr = HRESULT_FROM_WIN32(er);
161 ExitOnFailure(hr, "failed to get Component state for PerfMonManifest"); 161 ExitOnFailure(hr, "failed to get Component state for Wix4PerfmonManifest");
162 if (!WcaIsUninstalling(isInstalled, isAction)) 162 if (!WcaIsUninstalling(isInstalled, isAction))
163 { 163 {
164 continue; 164 continue;
165 } 165 }
166 166
167 hr = WcaGetRecordFormattedString(hRec, pfmFile, &pwzFile); 167 hr = WcaGetRecordFormattedString(hRec, pfmFile, &pwzFile);
168 ExitOnFailure(hr, "failed to get File for PerfMonManifest"); 168 ExitOnFailure(hr, "failed to get File for Wix4PerfmonManifest");
169 169
170 hr = WcaGetRecordFormattedString(hRec, pfmResourceFileDir, &pwzResourceFilePath); 170 hr = WcaGetRecordFormattedString(hRec, pfmResourceFileDir, &pwzResourceFilePath);
171 ExitOnFailure(hr, "failed to get ApplicationIdentity for PerfMonManifest"); 171 ExitOnFailure(hr, "failed to get ApplicationIdentity for Wix4PerfmonManifest");
172 size_t iResourcePath = lstrlenW(pwzResourceFilePath); 172 size_t iResourcePath = lstrlenW(pwzResourceFilePath);
173 if ( iResourcePath > 0 && *(pwzResourceFilePath + iResourcePath -1) == L'\\') 173 if ( iResourcePath > 0 && *(pwzResourceFilePath + iResourcePath -1) == L'\\')
174 *(pwzResourceFilePath + iResourcePath -1) = 0; //remove the trailing '\' 174 *(pwzResourceFilePath + iResourcePath -1) = 0; //remove the trailing '\'
175 175
176 hr = StrAllocFormatted(&pwzCommand, L"\"lodctr.exe\" /m:\"%s\" \"%s\"", pwzFile, pwzResourceFilePath); 176 hr = StrAllocFormatted(&pwzCommand, L"\"lodctr.exe\" /m:\"%s\" \"%s\"", pwzFile, pwzResourceFilePath);
177 ExitOnFailure(hr, "failed to copy string in PerfMonManifest"); 177 ExitOnFailure(hr, "failed to copy string in Wix4PerfmonManifest");
178 178
179 hr = WcaDoDeferredAction(PLATFORM_DECORATION(L"RollbackUnregisterPerfmonManifest"), pwzCommand, COST_PERFMONMANIFEST_REGISTER); 179 hr = WcaDoDeferredAction(CUSTOM_ACTION_DECORATION(L"RollbackUnregisterPerfmonManifest"), pwzCommand, COST_PERFMONMANIFEST_REGISTER);
180 ExitOnFailure(hr, "failed to schedule RollbackUnregisterPerfmonManifest action"); 180 ExitOnFailure(hr, "failed to schedule RollbackUnregisterPerfmonManifest action");
181 181
182 hr = StrAllocFormatted(&pwzCommand, L"\"unlodctr.exe\" /m:\"%s\"", pwzFile); 182 hr = StrAllocFormatted(&pwzCommand, L"\"unlodctr.exe\" /m:\"%s\"", pwzFile);
@@ -184,7 +184,7 @@ extern "C" UINT __stdcall ConfigurePerfmonManifestUnregister(
184 184
185 WcaLog(LOGMSG_VERBOSE, "UnRegisterPerfmonManifest's CustomActionData: '%ls'", pwzCommand); 185 WcaLog(LOGMSG_VERBOSE, "UnRegisterPerfmonManifest's CustomActionData: '%ls'", pwzCommand);
186 186
187 hr = WcaDoDeferredAction(PLATFORM_DECORATION(L"UnregisterPerfmonManifest"), pwzCommand, COST_PERFMONMANIFEST_UNREGISTER); 187 hr = WcaDoDeferredAction(CUSTOM_ACTION_DECORATION(L"UnregisterPerfmonManifest"), pwzCommand, COST_PERFMONMANIFEST_UNREGISTER);
188 ExitOnFailure(hr, "failed to schedule UnregisterPerfmonManifest action"); 188 ExitOnFailure(hr, "failed to schedule UnregisterPerfmonManifest action");
189 } 189 }
190 190
@@ -231,41 +231,41 @@ extern "C" UINT __stdcall ConfigureEventManifestRegister(
231 ExitFunction1(hr = S_FALSE); 231 ExitFunction1(hr = S_FALSE);
232 } 232 }
233 // check to see if necessary tables are specified 233 // check to see if necessary tables are specified
234 if (S_OK != WcaTableExists(L"EventManifest")) 234 if (S_OK != WcaTableExists(L"Wix4EventManifest"))
235 { 235 {
236 WcaLog(LOGMSG_VERBOSE, "Skipping ConfigureEventManifestRegister() because EventManifest table not present"); 236 WcaLog(LOGMSG_VERBOSE, "Skipping ConfigureEventManifestRegister() because Wix4EventManifest table not present");
237 ExitFunction1(hr = S_FALSE); 237 ExitFunction1(hr = S_FALSE);
238 } 238 }
239 239
240 hr = WcaOpenExecuteView(vcsEventManifestQuery, &hView); 240 hr = WcaOpenExecuteView(vcsEventManifestQuery, &hView);
241 ExitOnFailure(hr, "failed to open view on EventManifest table"); 241 ExitOnFailure(hr, "failed to open view on Wix4EventManifest table");
242 while ((hr = WcaFetchRecord(hView, &hRec)) == S_OK) 242 while ((hr = WcaFetchRecord(hView, &hRec)) == S_OK)
243 { 243 {
244 // get component install state 244 // get component install state
245 hr = WcaGetRecordString(hRec, emComponent, &pwzData); 245 hr = WcaGetRecordString(hRec, emComponent, &pwzData);
246 ExitOnFailure(hr, "failed to get Component for EventManifest"); 246 ExitOnFailure(hr, "failed to get Component for Wix4EventManifest");
247 er = ::MsiGetComponentStateW(hInstall, pwzData, &isInstalled, &isAction); 247 er = ::MsiGetComponentStateW(hInstall, pwzData, &isInstalled, &isAction);
248 hr = HRESULT_FROM_WIN32(er); 248 hr = HRESULT_FROM_WIN32(er);
249 ExitOnFailure(hr, "failed to get Component state for EventManifest"); 249 ExitOnFailure(hr, "failed to get Component state for Wix4EventManifest");
250 if (!WcaIsInstalling(isInstalled, isAction)) 250 if (!WcaIsInstalling(isInstalled, isAction))
251 { 251 {
252 continue; 252 continue;
253 } 253 }
254 254
255 hr = WcaGetRecordFormattedString(hRec, emFile, &pwzFile); 255 hr = WcaGetRecordFormattedString(hRec, emFile, &pwzFile);
256 ExitOnFailure(hr, "failed to get File for EventManifest"); 256 ExitOnFailure(hr, "failed to get File for Wix4EventManifest");
257 257
258 hr = StrAllocFormatted(&pwzCommand, L"\"wevtutil.exe\" um \"%s\"", pwzFile); 258 hr = StrAllocFormatted(&pwzCommand, L"\"wevtutil.exe\" um \"%s\"", pwzFile);
259 ExitOnFailure(hr, "failed to copy string in EventManifest"); 259 ExitOnFailure(hr, "failed to copy string in Wix4EventManifest");
260 260
261 hr = WcaDoDeferredAction(PLATFORM_DECORATION(L"RollbackRegisterEventManifest"), pwzCommand, COST_PERFMONMANIFEST_UNREGISTER); 261 hr = WcaDoDeferredAction(CUSTOM_ACTION_DECORATION(L"RollbackRegisterEventManifest"), pwzCommand, COST_PERFMONMANIFEST_UNREGISTER);
262 ExitOnFailure(hr, "failed to schedule RollbackRegisterEventManifest action"); 262 ExitOnFailure(hr, "failed to schedule RollbackRegisterEventManifest action");
263 263
264 hr = StrAllocFormatted(&pwzCommand, L"\"wevtutil.exe\" im \"%s\"", pwzFile); 264 hr = StrAllocFormatted(&pwzCommand, L"\"wevtutil.exe\" im \"%s\"", pwzFile);
265 ExitOnFailure(hr, "failed to copy string in EventManifest"); 265 ExitOnFailure(hr, "failed to copy string in Wix4EventManifest");
266 WcaLog(LOGMSG_VERBOSE, "RegisterEventManifest's CustomActionData: '%ls'", pwzCommand); 266 WcaLog(LOGMSG_VERBOSE, "RegisterEventManifest's CustomActionData: '%ls'", pwzCommand);
267 267
268 hr = WcaDoDeferredAction(PLATFORM_DECORATION(L"RegisterEventManifest"), pwzCommand, COST_EVENTMANIFEST_REGISTER); 268 hr = WcaDoDeferredAction(CUSTOM_ACTION_DECORATION(L"RegisterEventManifest"), pwzCommand, COST_EVENTMANIFEST_REGISTER);
269 ExitOnFailure(hr, "failed to schedule RegisterEventManifest action"); 269 ExitOnFailure(hr, "failed to schedule RegisterEventManifest action");
270 } 270 }
271 271
@@ -273,7 +273,7 @@ extern "C" UINT __stdcall ConfigureEventManifestRegister(
273 { 273 {
274 hr = S_OK; 274 hr = S_OK;
275 } 275 }
276 ExitOnFailure(hr, "Failure while processing EventManifest"); 276 ExitOnFailure(hr, "Failure while processing Wix4EventManifest");
277 277
278 hr = S_OK; 278 hr = S_OK;
279 279
@@ -313,22 +313,22 @@ extern "C" UINT __stdcall ConfigureEventManifestUnregister(
313 ExitFunction1(hr = S_FALSE); 313 ExitFunction1(hr = S_FALSE);
314 } 314 }
315 // check to see if necessary tables are specified 315 // check to see if necessary tables are specified
316 if (S_OK != WcaTableExists(L"EventManifest")) 316 if (S_OK != WcaTableExists(L"Wix4EventManifest"))
317 { 317 {
318 WcaLog(LOGMSG_VERBOSE, "Skipping ConfigureEventManifestUnregister() because EventManifest table not present"); 318 WcaLog(LOGMSG_VERBOSE, "Skipping ConfigureEventManifestUnregister() because Wix4EventManifest table not present");
319 ExitFunction1(hr = S_FALSE); 319 ExitFunction1(hr = S_FALSE);
320 } 320 }
321 321
322 hr = WcaOpenExecuteView(vcsEventManifestQuery, &hView); 322 hr = WcaOpenExecuteView(vcsEventManifestQuery, &hView);
323 ExitOnFailure(hr, "failed to open view on EventManifest table"); 323 ExitOnFailure(hr, "failed to open view on Wix4EventManifest table");
324 while ((hr = WcaFetchRecord(hView, &hRec)) == S_OK) 324 while ((hr = WcaFetchRecord(hView, &hRec)) == S_OK)
325 { 325 {
326 // get component install state 326 // get component install state
327 hr = WcaGetRecordString(hRec, emComponent, &pwzData); 327 hr = WcaGetRecordString(hRec, emComponent, &pwzData);
328 ExitOnFailure(hr, "failed to get Component for EventManifest"); 328 ExitOnFailure(hr, "failed to get Component for Wix4EventManifest");
329 er = ::MsiGetComponentStateW(hInstall, pwzData, &isInstalled, &isAction); 329 er = ::MsiGetComponentStateW(hInstall, pwzData, &isInstalled, &isAction);
330 hr = HRESULT_FROM_WIN32(er); 330 hr = HRESULT_FROM_WIN32(er);
331 ExitOnFailure(hr, "failed to get Component state for EventManifest"); 331 ExitOnFailure(hr, "failed to get Component state for Wix4EventManifest");
332 332
333 // nothing to do on an install 333 // nothing to do on an install
334 // schedule the rollback action when reinstalling to re-register pre-patch manifest 334 // schedule the rollback action when reinstalling to re-register pre-patch manifest
@@ -338,22 +338,22 @@ extern "C" UINT __stdcall ConfigureEventManifestUnregister(
338 } 338 }
339 339
340 hr = WcaGetRecordFormattedString(hRec, emFile, &pwzFile); 340 hr = WcaGetRecordFormattedString(hRec, emFile, &pwzFile);
341 ExitOnFailure(hr, "failed to get File for EventManifest"); 341 ExitOnFailure(hr, "failed to get File for Wix4EventManifest");
342 342
343 hr = StrAllocFormatted(&pwzCommand, L"\"wevtutil.exe\" im \"%s\"", pwzFile); 343 hr = StrAllocFormatted(&pwzCommand, L"\"wevtutil.exe\" im \"%s\"", pwzFile);
344 ExitOnFailure(hr, "failed to copy string in EventManifest"); 344 ExitOnFailure(hr, "failed to copy string in Wix4EventManifest");
345 345
346 hr = WcaDoDeferredAction(PLATFORM_DECORATION(L"RollbackUnregisterEventManifest"), pwzCommand, COST_PERFMONMANIFEST_REGISTER); 346 hr = WcaDoDeferredAction(CUSTOM_ACTION_DECORATION(L"RollbackUnregisterEventManifest"), pwzCommand, COST_PERFMONMANIFEST_REGISTER);
347 ExitOnFailure(hr, "failed to schedule RollbackUnregisterEventManifest action"); 347 ExitOnFailure(hr, "failed to schedule RollbackUnregisterEventManifest action");
348 348
349 // no need to uninstall on a repair/patch. Register action will re-register and update the manifest. 349 // no need to uninstall on a repair/patch. Register action will re-register and update the manifest.
350 if (!WcaIsReInstalling(isInstalled, isAction)) 350 if (!WcaIsReInstalling(isInstalled, isAction))
351 { 351 {
352 hr = StrAllocFormatted(&pwzCommand, L"\"wevtutil.exe\" um \"%s\"", pwzFile); 352 hr = StrAllocFormatted(&pwzCommand, L"\"wevtutil.exe\" um \"%s\"", pwzFile);
353 ExitOnFailure(hr, "failed to copy string in EventManifest"); 353 ExitOnFailure(hr, "failed to copy string in Wix4EventManifest");
354 WcaLog(LOGMSG_VERBOSE, "UnregisterEventManifest's CustomActionData: '%ls'", pwzCommand); 354 WcaLog(LOGMSG_VERBOSE, "UnregisterEventManifest's CustomActionData: '%ls'", pwzCommand);
355 355
356 hr = WcaDoDeferredAction(PLATFORM_DECORATION(L"UnregisterEventManifest"), pwzCommand, COST_PERFMONMANIFEST_UNREGISTER); 356 hr = WcaDoDeferredAction(CUSTOM_ACTION_DECORATION(L"UnregisterEventManifest"), pwzCommand, COST_PERFMONMANIFEST_UNREGISTER);
357 ExitOnFailure(hr, "failed to schedule UnregisterEventManifest action"); 357 ExitOnFailure(hr, "failed to schedule UnregisterEventManifest action");
358 } 358 }
359 } 359 }
@@ -362,7 +362,7 @@ extern "C" UINT __stdcall ConfigureEventManifestUnregister(
362 { 362 {
363 hr = S_OK; 363 hr = S_OK;
364 } 364 }
365 ExitOnFailure(hr, "Failure while processing EventManifest"); 365 ExitOnFailure(hr, "Failure while processing Wix4EventManifest");
366 366
367 hr = S_OK; 367 hr = S_OK;
368 368
diff --git a/src/ca/scaperf.cpp b/src/ca/scaperf.cpp
index 82f458af..fd301278 100644
--- a/src/ca/scaperf.cpp
+++ b/src/ca/scaperf.cpp
@@ -2,10 +2,10 @@
2 2
3#include "precomp.h" 3#include "precomp.h"
4 4
5LPCWSTR vcsPerfCounterDataQuery = L"SELECT `PerformanceCategory`, `Component_`, `Name`, `IniData`, `ConstantData` FROM `PerformanceCategory`"; 5LPCWSTR vcsPerfCounterDataQuery = L"SELECT `Wix4PerformanceCategory`, `Component_`, `Name`, `IniData`, `ConstantData` FROM `Wix4PerformanceCategory`";
6enum ePerfCounterDataQuery { pcdqId = 1, pcdqComponent, pcdqName, pcdqIniData, pcdqConstantData }; 6enum ePerfCounterDataQuery { pcdqId = 1, pcdqComponent, pcdqName, pcdqIniData, pcdqConstantData };
7 7
8LPCWSTR vcsPerfMonQuery = L"SELECT `Component_`, `File`, `Name` FROM `Perfmon`"; 8LPCWSTR vcsPerfMonQuery = L"SELECT `Component_`, `File`, `Name` FROM `Wix4Perfmon`";
9enum ePerfMonQuery { pmqComponent = 1, pmqFile, pmqName }; 9enum ePerfMonQuery { pmqComponent = 1, pmqFile, pmqName };
10 10
11 11
@@ -32,7 +32,7 @@ extern "C" UINT __stdcall InstallPerfCounterData(
32 ExitOnFailure(hr, "Failed to initialize InstallPerfCounterData."); 32 ExitOnFailure(hr, "Failed to initialize InstallPerfCounterData.");
33 33
34 hr = ProcessPerformanceCategory(hInstall, TRUE); 34 hr = ProcessPerformanceCategory(hInstall, TRUE);
35 MessageExitOnFailure(hr, msierrInstallPerfCounterData, "Failed to process PerformanceCategory table."); 35 MessageExitOnFailure(hr, msierrInstallPerfCounterData, "Failed to process Wix4PerformanceCategory table.");
36 36
37LExit: 37LExit:
38 er = SUCCEEDED(hr) ? ERROR_SUCCESS : ERROR_INSTALL_FAILURE; 38 er = SUCCEEDED(hr) ? ERROR_SUCCESS : ERROR_INSTALL_FAILURE;
@@ -57,7 +57,7 @@ extern "C" UINT __stdcall UninstallPerfCounterData(
57 ExitOnFailure(hr, "Failed to initialize UninstallPerfCounterData."); 57 ExitOnFailure(hr, "Failed to initialize UninstallPerfCounterData.");
58 58
59 hr = ProcessPerformanceCategory(hInstall, FALSE); 59 hr = ProcessPerformanceCategory(hInstall, FALSE);
60 MessageExitOnFailure(hr, msierrUninstallPerfCounterData, "Failed to process PerformanceCategory table."); 60 MessageExitOnFailure(hr, msierrUninstallPerfCounterData, "Failed to process Wix4PerformanceCategory table.");
61 61
62LExit: 62LExit:
63 er = SUCCEEDED(hr) ? ERROR_SUCCESS : ERROR_INSTALL_FAILURE; 63 er = SUCCEEDED(hr) ? ERROR_SUCCESS : ERROR_INSTALL_FAILURE;
@@ -85,9 +85,9 @@ extern "C" UINT __stdcall ConfigurePerfmonInstall(
85 ExitOnFailure(hr, "Failed to initialize"); 85 ExitOnFailure(hr, "Failed to initialize");
86 86
87 // check to see if necessary tables are specified 87 // check to see if necessary tables are specified
88 if (S_OK != WcaTableExists(L"Perfmon")) 88 if (S_OK != WcaTableExists(L"Wix4Perfmon"))
89 { 89 {
90 WcaLog(LOGMSG_VERBOSE, "Skipping RegisterPerfmon() because Perfmon table not present"); 90 WcaLog(LOGMSG_VERBOSE, "Skipping RegisterPerfmon() because Wix4Perfmon table not present");
91 ExitFunction1(hr = S_FALSE); 91 ExitFunction1(hr = S_FALSE);
92 } 92 }
93 93
@@ -113,9 +113,9 @@ extern "C" UINT __stdcall ConfigurePerfmonInstall(
113 ExitOnFailure(hr, "failed to get File for PerfMon"); 113 ExitOnFailure(hr, "failed to get File for PerfMon");
114 114
115 WcaLog(LOGMSG_VERBOSE, "ConfigurePerfmonInstall's CustomActionData: '%ls', '%ls'", pwzName, pwzFile); 115 WcaLog(LOGMSG_VERBOSE, "ConfigurePerfmonInstall's CustomActionData: '%ls', '%ls'", pwzName, pwzFile);
116 hr = WcaDoDeferredAction(PLATFORM_DECORATION(L"RegisterPerfmon"), pwzFile, COST_PERFMON_REGISTER); 116 hr = WcaDoDeferredAction(CUSTOM_ACTION_DECORATION(L"RegisterPerfmon"), pwzFile, COST_PERFMON_REGISTER);
117 ExitOnFailure(hr, "failed to schedule RegisterPerfmon action"); 117 ExitOnFailure(hr, "failed to schedule RegisterPerfmon action");
118 hr = WcaDoDeferredAction(PLATFORM_DECORATION(L"RollbackRegisterPerfmon"), pwzName, COST_PERFMON_UNREGISTER); 118 hr = WcaDoDeferredAction(CUSTOM_ACTION_DECORATION(L"RollbackRegisterPerfmon"), pwzName, COST_PERFMON_UNREGISTER);
119 ExitOnFailure(hr, "failed to schedule RollbackRegisterPerfmon action"); 119 ExitOnFailure(hr, "failed to schedule RollbackRegisterPerfmon action");
120 } 120 }
121 121
@@ -158,9 +158,9 @@ extern "C" UINT __stdcall ConfigurePerfmonUninstall(
158 ExitOnFailure(hr, "Failed to initialize"); 158 ExitOnFailure(hr, "Failed to initialize");
159 159
160 // check to see if necessary tables are specified 160 // check to see if necessary tables are specified
161 if (WcaTableExists(L"Perfmon") != S_OK) 161 if (WcaTableExists(L"Wix4Perfmon") != S_OK)
162 { 162 {
163 WcaLog(LOGMSG_VERBOSE, "Skipping UnregisterPerfmon() because Perfmon table not present"); 163 WcaLog(LOGMSG_VERBOSE, "Skipping UnregisterPerfmon() because Wix4Perfmon table not present");
164 ExitFunction1(hr = S_FALSE); 164 ExitFunction1(hr = S_FALSE);
165 } 165 }
166 166
@@ -186,9 +186,9 @@ extern "C" UINT __stdcall ConfigurePerfmonUninstall(
186 ExitOnFailure(hr, "failed to get File for PerfMon"); 186 ExitOnFailure(hr, "failed to get File for PerfMon");
187 187
188 WcaLog(LOGMSG_VERBOSE, "ConfigurePerfmonUninstall's CustomActionData: '%ls', '%ls'", pwzName, pwzFile); 188 WcaLog(LOGMSG_VERBOSE, "ConfigurePerfmonUninstall's CustomActionData: '%ls', '%ls'", pwzName, pwzFile);
189 hr = WcaDoDeferredAction(PLATFORM_DECORATION(L"UnregisterPerfmon"), pwzName, COST_PERFMON_UNREGISTER); 189 hr = WcaDoDeferredAction(CUSTOM_ACTION_DECORATION(L"UnregisterPerfmon"), pwzName, COST_PERFMON_UNREGISTER);
190 ExitOnFailure(hr, "failed to schedule UnregisterPerfmon action"); 190 ExitOnFailure(hr, "failed to schedule UnregisterPerfmon action");
191 hr = WcaDoDeferredAction(PLATFORM_DECORATION(L"RollbackUnregisterPerfmon"), pwzFile, COST_PERFMON_REGISTER); 191 hr = WcaDoDeferredAction(CUSTOM_ACTION_DECORATION(L"RollbackUnregisterPerfmon"), pwzFile, COST_PERFMON_REGISTER);
192 ExitOnFailure(hr, "failed to schedule RollbackUnregisterPerfmon action"); 192 ExitOnFailure(hr, "failed to schedule RollbackUnregisterPerfmon action");
193 } 193 }
194 194
@@ -229,26 +229,26 @@ static HRESULT ProcessPerformanceCategory(
229 LPWSTR pwzCustomActionData = NULL; 229 LPWSTR pwzCustomActionData = NULL;
230 230
231 // check to see if necessary tables are specified 231 // check to see if necessary tables are specified
232 if (S_OK != WcaTableExists(L"PerformanceCategory")) 232 if (S_OK != WcaTableExists(L"Wix4PerformanceCategory"))
233 { 233 {
234 ExitFunction1(hr = S_FALSE); 234 ExitFunction1(hr = S_FALSE);
235 } 235 }
236 236
237 hr = WcaOpenExecuteView(vcsPerfCounterDataQuery, &hView); 237 hr = WcaOpenExecuteView(vcsPerfCounterDataQuery, &hView);
238 ExitOnFailure(hr, "failed to open view on PerformanceCategory table"); 238 ExitOnFailure(hr, "failed to open view on Wix4PerformanceCategory table");
239 while (S_OK == (hr = WcaFetchRecord(hView, &hRec))) 239 while (S_OK == (hr = WcaFetchRecord(hView, &hRec)))
240 { 240 {
241 hr = WcaGetRecordString(hRec, pcdqId, &pwzId); 241 hr = WcaGetRecordString(hRec, pcdqId, &pwzId);
242 ExitOnFailure(hr, "Failed to get id for PerformanceCategory."); 242 ExitOnFailure(hr, "Failed to get id for Wix4PerformanceCategory.");
243 243
244 // Check to see if the Component is being installed or uninstalled 244 // Check to see if the Component is being installed or uninstalled
245 // when we are processing the same. 245 // when we are processing the same.
246 hr = WcaGetRecordString(hRec, pcdqComponent, &pwzComponent); 246 hr = WcaGetRecordString(hRec, pcdqComponent, &pwzComponent);
247 ExitOnFailure(hr, "Failed to get Component for PerformanceCategory: %ls", pwzId); 247 ExitOnFailure(hr, "Failed to get Component for Wix4PerformanceCategory: %ls", pwzId);
248 248
249 er = ::MsiGetComponentStateW(hInstall, pwzComponent, &isInstalled, &isAction); 249 er = ::MsiGetComponentStateW(hInstall, pwzComponent, &isInstalled, &isAction);
250 hr = HRESULT_FROM_WIN32(er); 250 hr = HRESULT_FROM_WIN32(er);
251 ExitOnFailure(hr, "Failed to get Component state for PerformanceCategory: %ls", pwzId); 251 ExitOnFailure(hr, "Failed to get Component state for Wix4PerformanceCategory: %ls", pwzId);
252 252
253 if ((fInstall && !WcaIsInstalling(isInstalled, isAction)) || 253 if ((fInstall && !WcaIsInstalling(isInstalled, isAction)) ||
254 (!fInstall && !WcaIsUninstalling(isInstalled, isAction))) 254 (!fInstall && !WcaIsUninstalling(isInstalled, isAction)))
@@ -257,45 +257,45 @@ static HRESULT ProcessPerformanceCategory(
257 } 257 }
258 258
259 hr = WcaGetRecordString(hRec, pcdqName, &pwzName); 259 hr = WcaGetRecordString(hRec, pcdqName, &pwzName);
260 ExitOnFailure(hr, "Failed to get Name for PerformanceCategory: %ls", pwzId); 260 ExitOnFailure(hr, "Failed to get Name for Wix4PerformanceCategory: %ls", pwzId);
261 hr = WcaWriteStringToCaData(pwzName, &pwzCustomActionData); 261 hr = WcaWriteStringToCaData(pwzName, &pwzCustomActionData);
262 ExitOnFailure(hr, "Failed to add Name to CustomActionData for PerformanceCategory: %ls", pwzId); 262 ExitOnFailure(hr, "Failed to add Name to CustomActionData for Wix4PerformanceCategory: %ls", pwzId);
263 263
264 hr = WcaGetRecordString(hRec, pcdqIniData, &pwzData); 264 hr = WcaGetRecordString(hRec, pcdqIniData, &pwzData);
265 ExitOnFailure(hr, "Failed to get IniData for PerformanceCategory: %ls", pwzId); 265 ExitOnFailure(hr, "Failed to get IniData for Wix4PerformanceCategory: %ls", pwzId);
266 hr = WcaWriteStringToCaData(pwzData, &pwzCustomActionData); 266 hr = WcaWriteStringToCaData(pwzData, &pwzCustomActionData);
267 ExitOnFailure(hr, "Failed to add IniData to CustomActionData for PerformanceCategory: %ls", pwzId); 267 ExitOnFailure(hr, "Failed to add IniData to CustomActionData for Wix4PerformanceCategory: %ls", pwzId);
268 268
269 hr = WcaGetRecordString(hRec, pcdqConstantData, &pwzData); 269 hr = WcaGetRecordString(hRec, pcdqConstantData, &pwzData);
270 ExitOnFailure(hr, "Failed to get ConstantData for PerformanceCategory: %ls", pwzId); 270 ExitOnFailure(hr, "Failed to get ConstantData for Wix4PerformanceCategory: %ls", pwzId);
271 hr = WcaWriteStringToCaData(pwzData, &pwzCustomActionData); 271 hr = WcaWriteStringToCaData(pwzData, &pwzCustomActionData);
272 ExitOnFailure(hr, "Failed to add ConstantData to CustomActionData for PerformanceCategory: %ls", pwzId); 272 ExitOnFailure(hr, "Failed to add ConstantData to CustomActionData for Wix4PerformanceCategory: %ls", pwzId);
273 } 273 }
274 274
275 if (hr == E_NOMOREITEMS) 275 if (hr == E_NOMOREITEMS)
276 { 276 {
277 hr = S_OK; 277 hr = S_OK;
278 } 278 }
279 ExitOnFailure(hr, "Failure while processing PerformanceCategory table."); 279 ExitOnFailure(hr, "Failure while processing Wix4PerformanceCategory table.");
280 280
281 // If there was any data built up, schedule it for execution. 281 // If there was any data built up, schedule it for execution.
282 if (pwzCustomActionData) 282 if (pwzCustomActionData)
283 { 283 {
284 if (fInstall) 284 if (fInstall)
285 { 285 {
286 hr = WcaDoDeferredAction(PLATFORM_DECORATION(L"RollbackRegisterPerfCounterData"), pwzCustomActionData, COST_PERFMON_UNREGISTER); 286 hr = WcaDoDeferredAction(CUSTOM_ACTION_DECORATION(L"RollbackRegisterPerfCounterData"), pwzCustomActionData, COST_PERFMON_UNREGISTER);
287 ExitOnFailure(hr, "Failed to schedule RollbackRegisterPerfCounterData action for PerformanceCategory: %ls", pwzId); 287 ExitOnFailure(hr, "Failed to schedule RollbackRegisterPerfCounterData action for Wix4PerformanceCategory: %ls", pwzId);
288 288
289 hr = WcaDoDeferredAction(PLATFORM_DECORATION(L"RegisterPerfCounterData"), pwzCustomActionData, COST_PERFMON_REGISTER); 289 hr = WcaDoDeferredAction(CUSTOM_ACTION_DECORATION(L"RegisterPerfCounterData"), pwzCustomActionData, COST_PERFMON_REGISTER);
290 ExitOnFailure(hr, "Failed to schedule RegisterPerfCounterData action for PerformanceCategory: %ls", pwzId); 290 ExitOnFailure(hr, "Failed to schedule RegisterPerfCounterData action for Wix4PerformanceCategory: %ls", pwzId);
291 } 291 }
292 else 292 else
293 { 293 {
294 hr = WcaDoDeferredAction(PLATFORM_DECORATION(L"RollbackUnregisterPerfCounterData"), pwzCustomActionData, COST_PERFMON_REGISTER); 294 hr = WcaDoDeferredAction(CUSTOM_ACTION_DECORATION(L"RollbackUnregisterPerfCounterData"), pwzCustomActionData, COST_PERFMON_REGISTER);
295 ExitOnFailure(hr, "Failed to schedule RollbackUnregisterPerfCounterData action for PerformanceCategory: %ls", pwzId); 295 ExitOnFailure(hr, "Failed to schedule RollbackUnregisterPerfCounterData action for Wix4PerformanceCategory: %ls", pwzId);
296 296
297 hr = WcaDoDeferredAction(PLATFORM_DECORATION(L"UnregisterPerfCounterData"), pwzCustomActionData, COST_PERFMON_UNREGISTER); 297 hr = WcaDoDeferredAction(CUSTOM_ACTION_DECORATION(L"UnregisterPerfCounterData"), pwzCustomActionData, COST_PERFMON_UNREGISTER);
298 ExitOnFailure(hr, "Failed to schedule UnregisterPerfCounterData action for PerformanceCategory: %ls", pwzId); 298 ExitOnFailure(hr, "Failed to schedule UnregisterPerfCounterData action for Wix4PerformanceCategory: %ls", pwzId);
299 } 299 }
300 } 300 }
301 301
diff --git a/src/ca/scaperfexec.cpp b/src/ca/scaperfexec.cpp
index bf58c8d0..04c0648a 100644
--- a/src/ca/scaperfexec.cpp
+++ b/src/ca/scaperfexec.cpp
@@ -35,7 +35,7 @@ extern "C" UINT __stdcall RegisterPerfCounterData(
35 ExitOnFailure(hr, "Failed to initialize RegisterPerfCounterData."); 35 ExitOnFailure(hr, "Failed to initialize RegisterPerfCounterData.");
36 36
37 hr = ExecutePerfCounterData(hInstall, TRUE); 37 hr = ExecutePerfCounterData(hInstall, TRUE);
38 MessageExitOnFailure(hr, msierrInstallPerfCounterData, "Failed to execute PerformanceCategory table."); 38 MessageExitOnFailure(hr, msierrInstallPerfCounterData, "Failed to execute Wix4PerformanceCategory table.");
39 39
40LExit: 40LExit:
41 er = SUCCEEDED(hr) ? ERROR_SUCCESS : ERROR_INSTALL_FAILURE; 41 er = SUCCEEDED(hr) ? ERROR_SUCCESS : ERROR_INSTALL_FAILURE;
@@ -61,7 +61,7 @@ extern "C" UINT __stdcall UnregisterPerfCounterData(
61 ExitOnFailure(hr, "Failed to initialize UnregisterPerfCounterData."); 61 ExitOnFailure(hr, "Failed to initialize UnregisterPerfCounterData.");
62 62
63 hr = ExecutePerfCounterData(hInstall, FALSE); 63 hr = ExecutePerfCounterData(hInstall, FALSE);
64 MessageExitOnFailure(hr, msierrUninstallPerfCounterData, "Failed to execute PerformanceCategory table."); 64 MessageExitOnFailure(hr, msierrUninstallPerfCounterData, "Failed to execute Wix4PerformanceCategory table.");
65 65
66LExit: 66LExit:
67 er = SUCCEEDED(hr) ? ERROR_SUCCESS : ERROR_INSTALL_FAILURE; 67 er = SUCCEEDED(hr) ? ERROR_SUCCESS : ERROR_INSTALL_FAILURE;
diff --git a/src/ca/scasched.cpp b/src/ca/scasched.cpp
index ba230a9e..d81b1f14 100644
--- a/src/ca/scasched.cpp
+++ b/src/ca/scasched.cpp
@@ -21,14 +21,14 @@ extern "C" UINT __stdcall ConfigureSmbInstall(
21 ExitOnFailure(hr, "Failed to initialize"); 21 ExitOnFailure(hr, "Failed to initialize");
22 22
23 // check to see if necessary tables are specified 23 // check to see if necessary tables are specified
24 if (WcaTableExists(L"FileShare") != S_OK) 24 if (WcaTableExists(L"Wix4FileShare") != S_OK)
25 { 25 {
26 WcaLog(LOGMSG_VERBOSE, "Skipping SMB CustomAction, no FileShare table"); 26 WcaLog(LOGMSG_VERBOSE, "Skipping SMB CustomAction, no Wix4FileShare table");
27 ExitFunction1(hr = S_FALSE); 27 ExitFunction1(hr = S_FALSE);
28 } 28 }
29 29
30 hr = ScaSmbRead(&pssList); 30 hr = ScaSmbRead(&pssList);
31 ExitOnFailure(hr, "failed to read FileShare table"); 31 ExitOnFailure(hr, "failed to read Wix4FileShare table");
32 32
33 hr = ScaSmbInstall(pssList); 33 hr = ScaSmbInstall(pssList);
34 ExitOnFailure(hr, "failed to install FileShares"); 34 ExitOnFailure(hr, "failed to install FileShares");
@@ -43,7 +43,7 @@ LExit:
43 43
44 44
45/******************************************************************** 45/********************************************************************
46ConfigureSmb - CUSTOM ACTION ENTRY POINT for installing fileshare settings 46ConfigureSmb - CUSTOM ACTION ENTRY POINT for uninstalling fileshare settings
47 47
48********************************************************************/ 48********************************************************************/
49extern "C" UINT __stdcall ConfigureSmbUninstall( 49extern "C" UINT __stdcall ConfigureSmbUninstall(
@@ -60,14 +60,14 @@ extern "C" UINT __stdcall ConfigureSmbUninstall(
60 ExitOnFailure(hr, "Failed to initialize"); 60 ExitOnFailure(hr, "Failed to initialize");
61 61
62 // check to see if necessary tables are specified 62 // check to see if necessary tables are specified
63 if (WcaTableExists(L"FileShare") != S_OK) 63 if (WcaTableExists(L"Wix4FileShare") != S_OK)
64 { 64 {
65 WcaLog(LOGMSG_VERBOSE, "Skipping SMB CustomAction, no FileShare table"); 65 WcaLog(LOGMSG_VERBOSE, "Skipping SMB CustomAction, no Wix4FileShare table");
66 ExitFunction1(hr = S_FALSE); 66 ExitFunction1(hr = S_FALSE);
67 } 67 }
68 68
69 hr = ScaSmbRead(&pssList); 69 hr = ScaSmbRead(&pssList);
70 ExitOnFailure(hr, "failed to read FileShare table"); 70 ExitOnFailure(hr, "failed to read Wix4FileShare table");
71 71
72 hr = ScaSmbUninstall(pssList); 72 hr = ScaSmbUninstall(pssList);
73 ExitOnFailure(hr, "failed to uninstall FileShares"); 73 ExitOnFailure(hr, "failed to uninstall FileShares");
@@ -106,7 +106,7 @@ extern "C" UINT __stdcall ConfigureUsers(
106 fInitializedCom = TRUE; 106 fInitializedCom = TRUE;
107 107
108 hr = ScaUserRead(&psuList); 108 hr = ScaUserRead(&psuList);
109 ExitOnFailure(hr, "failed to read User table"); 109 ExitOnFailure(hr, "failed to read Wix4User table");
110 110
111 hr = ScaUserExecute(psuList); 111 hr = ScaUserExecute(psuList);
112 ExitOnFailure(hr, "failed to add/remove User actions"); 112 ExitOnFailure(hr, "failed to add/remove User actions");
diff --git a/src/ca/scasmb.h b/src/ca/scasmb.h
index 7dbeb14d..f2a4b53c 100644
--- a/src/ca/scasmb.h
+++ b/src/ca/scasmb.h
@@ -5,7 +5,7 @@
5#include "scauser.h" 5#include "scauser.h"
6 6
7// structs 7// structs
8// Structure used to hold and extra user/permission pairs from the FileSharePermissions Table 8// Structure used to hold and extra user/permission pairs from the Wix4FileSharePermissions Table
9struct SCA_SMB_EX_USER_PERMS 9struct SCA_SMB_EX_USER_PERMS
10{ 10{
11 int nPermissions; 11 int nPermissions;
diff --git a/src/ca/scasmbsched.cpp b/src/ca/scasmbsched.cpp
index 72536d6d..e29f7f51 100644
--- a/src/ca/scasmbsched.cpp
+++ b/src/ca/scasmbsched.cpp
@@ -92,8 +92,8 @@ void ScaExUserPermsSmbFreeList(SCA_SMB_EX_USER_PERMS* pExUserPermsList)
92} 92}
93 93
94// sql query constants 94// sql query constants
95LPCWSTR vcsSmbQuery = L"SELECT `FileShare`, `ShareName`, `Description`, `Directory_`, " 95LPCWSTR vcsSmbQuery = L"SELECT `Wix4FileShare`, `ShareName`, `Description`, `Directory_`, "
96 L"`Component_`, `User_`, `Permissions` FROM `FileShare`"; 96 L"`Component_`, `User_`, `Permissions` FROM `Wix4FileShare`";
97 97
98enum eSmbQuery { 98enum eSmbQuery {
99 ssqFileShare = 1, 99 ssqFileShare = 1,
@@ -122,26 +122,26 @@ HRESULT ScaSmbRead(SCA_SMB** ppssList)
122 SCA_SMB* pss = NULL; 122 SCA_SMB* pss = NULL;
123 BOOL bUserPermissionsTableExists = FALSE; 123 BOOL bUserPermissionsTableExists = FALSE;
124 124
125 if (S_OK != WcaTableExists(L"FileShare")) 125 if (S_OK != WcaTableExists(L"Wix4FileShare"))
126 { 126 {
127 WcaLog(LOGMSG_VERBOSE, "Skipping ScaSmbCreateShare() - FileShare table not present"); 127 WcaLog(LOGMSG_VERBOSE, "Skipping ScaSmbCreateShare() - Wix4FileShare table not present");
128 ExitFunction1(hr = S_FALSE); 128 ExitFunction1(hr = S_FALSE);
129 } 129 }
130 130
131 if (S_OK == WcaTableExists(L"FileSharePermissions")) 131 if (S_OK == WcaTableExists(L"Wix4FileSharePermissions"))
132 { 132 {
133 bUserPermissionsTableExists = TRUE; 133 bUserPermissionsTableExists = TRUE;
134 } 134 }
135 else 135 else
136 { 136 {
137 WcaLog(LOGMSG_VERBOSE, "No Additional Permissions - FileSharePermissions table not present"); 137 WcaLog(LOGMSG_VERBOSE, "No Additional Permissions - Wix4FileSharePermissions table not present");
138 } 138 }
139 139
140 WcaLog(LOGMSG_VERBOSE, "Reading File Share Tables"); 140 WcaLog(LOGMSG_VERBOSE, "Reading File Share Tables");
141 141
142 // loop through all the fileshares 142 // loop through all the fileshares
143 hr = WcaOpenExecuteView(vcsSmbQuery, &hView); 143 hr = WcaOpenExecuteView(vcsSmbQuery, &hView);
144 ExitOnFailure(hr, "Failed to open view on FileShare table"); 144 ExitOnFailure(hr, "Failed to open view on Wix4FileShare table");
145 while (S_OK == (hr = WcaFetchRecord(hView, &hRec))) 145 while (S_OK == (hr = WcaFetchRecord(hView, &hRec)))
146 { 146 {
147 pss = NewSmb(); 147 pss = NewSmb();
@@ -154,33 +154,33 @@ HRESULT ScaSmbRead(SCA_SMB** ppssList)
154 ::ZeroMemory(pss, sizeof(*pss)); 154 ::ZeroMemory(pss, sizeof(*pss));
155 155
156 hr = WcaGetRecordString(hRec, ssqFileShare, &pwzData); 156 hr = WcaGetRecordString(hRec, ssqFileShare, &pwzData);
157 ExitOnFailure(hr, "Failed to get FileShare.FileShare"); 157 ExitOnFailure(hr, "Failed to get Wix4FileShare.Wix4FileShare");
158 hr = ::StringCchCopyW(pss->wzId, countof(pss->wzId), pwzData); 158 hr = ::StringCchCopyW(pss->wzId, countof(pss->wzId), pwzData);
159 ExitOnFailure(hr, "Failed to copy ID string to smb object"); 159 ExitOnFailure(hr, "Failed to copy ID string to smb object");
160 160
161 hr = WcaGetRecordFormattedString(hRec, ssqShareName, &pwzData); 161 hr = WcaGetRecordFormattedString(hRec, ssqShareName, &pwzData);
162 ExitOnFailure(hr, "Failed to get FileShare.ShareName"); 162 ExitOnFailure(hr, "Failed to get Wix4FileShare.ShareName");
163 hr = ::StringCchCopyW(pss->wzShareName, countof(pss->wzShareName), pwzData); 163 hr = ::StringCchCopyW(pss->wzShareName, countof(pss->wzShareName), pwzData);
164 ExitOnFailure(hr, "Failed to copy share name string to smb object"); 164 ExitOnFailure(hr, "Failed to copy share name string to smb object");
165 165
166 hr = WcaGetRecordString(hRec, ssqComponent, &pwzData); 166 hr = WcaGetRecordString(hRec, ssqComponent, &pwzData);
167 ExitOnFailure(hr, "Failed to get Component for FileShare: '%ls'", pss->wzShareName); 167 ExitOnFailure(hr, "Failed to get Component for Wix4FileShare: '%ls'", pss->wzShareName);
168 hr = ::StringCchCopyW(pss->wzComponent, countof(pss->wzComponent), pwzData); 168 hr = ::StringCchCopyW(pss->wzComponent, countof(pss->wzComponent), pwzData);
169 ExitOnFailure(hr, "Failed to copy component string to smb object"); 169 ExitOnFailure(hr, "Failed to copy component string to smb object");
170 170
171 hr = WcaGetRecordFormattedString(hRec, ssqDescription, &pwzData); 171 hr = WcaGetRecordFormattedString(hRec, ssqDescription, &pwzData);
172 ExitOnFailure(hr, "Failed to get Share Description for FileShare: '%ls'", pss->wzShareName); 172 ExitOnFailure(hr, "Failed to get Share Description for Wix4FileShare: '%ls'", pss->wzShareName);
173 hr = ::StringCchCopyW(pss->wzDescription, countof(pss->wzDescription), pwzData); 173 hr = ::StringCchCopyW(pss->wzDescription, countof(pss->wzDescription), pwzData);
174 ExitOnFailure(hr, "Failed to copy description string to smb object"); 174 ExitOnFailure(hr, "Failed to copy description string to smb object");
175 175
176 // get user info from the user table 176 // get user info from the user table
177 hr = WcaGetRecordFormattedString(hRec, ssqUser, &pwzData); 177 hr = WcaGetRecordFormattedString(hRec, ssqUser, &pwzData);
178 ExitOnFailure(hr, "Failed to get User record for FileShare: '%ls'", pss->wzShareName); 178 ExitOnFailure(hr, "Failed to get Wix4User record for Wix4FileShare: '%ls'", pss->wzShareName);
179 179
180 // get component install state 180 // get component install state
181 er = ::MsiGetComponentStateW(WcaGetInstallHandle(), pss->wzComponent, &pss->isInstalled, &pss->isAction); 181 er = ::MsiGetComponentStateW(WcaGetInstallHandle(), pss->wzComponent, &pss->isInstalled, &pss->isAction);
182 hr = HRESULT_FROM_WIN32(er); 182 hr = HRESULT_FROM_WIN32(er);
183 ExitOnFailure(hr, "Failed to get Component state for FileShare"); 183 ExitOnFailure(hr, "Failed to get Component state for Wix4FileShare");
184 184
185 // if a user was specified 185 // if a user was specified
186 if (*pwzData) 186 if (*pwzData)
@@ -200,7 +200,7 @@ HRESULT ScaSmbRead(SCA_SMB** ppssList)
200 200
201 // get the share's directory 201 // get the share's directory
202 hr = WcaGetRecordString(hRec, ssqDirectory, &pwzData); 202 hr = WcaGetRecordString(hRec, ssqDirectory, &pwzData);
203 ExitOnFailure(hr, "Failed to get directory for FileShare: '%ls'", pss->wzShareName); 203 ExitOnFailure(hr, "Failed to get directory for Wix4FileShare: '%ls'", pss->wzShareName);
204 204
205 WCHAR wzPath[MAX_PATH]; 205 WCHAR wzPath[MAX_PATH];
206 DWORD dwLen; 206 DWORD dwLen;
@@ -236,7 +236,7 @@ HRESULT ScaSmbRead(SCA_SMB** ppssList)
236 ExitOnFailure(hr, "Failed to copy directory string to smb object"); 236 ExitOnFailure(hr, "Failed to copy directory string to smb object");
237 237
238 hr = WcaGetRecordInteger(hRec, ssqPermissions, &pss->nPermissions); 238 hr = WcaGetRecordInteger(hRec, ssqPermissions, &pss->nPermissions);
239 ExitOnFailure(hr, "Failed to get FileShare.Permissions"); 239 ExitOnFailure(hr, "Failed to get Wix4FileShare.Permissions");
240 240
241 // Check to see if additional user & permissions are specified for this share 241 // Check to see if additional user & permissions are specified for this share
242 if (bUserPermissionsTableExists) 242 if (bUserPermissionsTableExists)
@@ -253,7 +253,7 @@ HRESULT ScaSmbRead(SCA_SMB** ppssList)
253 { 253 {
254 hr = S_OK; 254 hr = S_OK;
255 } 255 }
256 ExitOnFailure(hr, "Failure occured while processing FileShare table"); 256 ExitOnFailure(hr, "Failure occured while processing Wix4FileShare table");
257 257
258LExit: 258LExit:
259 // if anything was left over after an error clean it all up 259 // if anything was left over after an error clean it all up
@@ -420,10 +420,10 @@ HRESULT SchedCreateSmb(SCA_SMB* pss)
420 } 420 }
421 421
422 // Schedule the rollback first 422 // Schedule the rollback first
423 hr = WcaDoDeferredAction(PLATFORM_DECORATION(L"CreateSmbRollback"), pwzRollbackCustomActionData, COST_SMB_DROPSMB); 423 hr = WcaDoDeferredAction(CUSTOM_ACTION_DECORATION(L"CreateSmbRollback"), pwzRollbackCustomActionData, COST_SMB_DROPSMB);
424 ExitOnFailure(hr, "Failed to schedule DropSmb action"); 424 ExitOnFailure(hr, "Failed to schedule DropSmb action");
425 425
426 hr = WcaDoDeferredAction(PLATFORM_DECORATION(L"CreateSmb"), pwzCustomActionData, COST_SMB_CREATESMB); 426 hr = WcaDoDeferredAction(CUSTOM_ACTION_DECORATION(L"CreateSmb"), pwzCustomActionData, COST_SMB_CREATESMB);
427 ExitOnFailure(hr, "Failed to schedule CreateSmb action"); 427 ExitOnFailure(hr, "Failed to schedule CreateSmb action");
428 428
429LExit: 429LExit:
@@ -511,14 +511,14 @@ HRESULT SchedDropSmb(SCA_SMB* pss)
511 ExitOnFailure(hr, "Failed to add permissions to CustomActionData"); 511 ExitOnFailure(hr, "Failed to add permissions to CustomActionData");
512 } 512 }
513 513
514 hr = WcaDoDeferredAction(PLATFORM_DECORATION(L"DropSmbRollback"), pwzRollbackCustomActionData, COST_SMB_CREATESMB); 514 hr = WcaDoDeferredAction(CUSTOM_ACTION_DECORATION(L"DropSmbRollback"), pwzRollbackCustomActionData, COST_SMB_CREATESMB);
515 ExitOnFailure(hr, "Failed to schedule DropSmbRollback action"); 515 ExitOnFailure(hr, "Failed to schedule DropSmbRollback action");
516 516
517 // DropSMB 517 // DropSMB
518 hr = WcaWriteStringToCaData(pss->wzShareName, &pwzCustomActionData); 518 hr = WcaWriteStringToCaData(pss->wzShareName, &pwzCustomActionData);
519 ExitOnFailure(hr, "failed to add ShareName to CustomActionData"); 519 ExitOnFailure(hr, "failed to add ShareName to CustomActionData");
520 520
521 hr = WcaDoDeferredAction(PLATFORM_DECORATION(L"DropSmb"), pwzCustomActionData, COST_SMB_DROPSMB); 521 hr = WcaDoDeferredAction(CUSTOM_ACTION_DECORATION(L"DropSmb"), pwzCustomActionData, COST_SMB_DROPSMB);
522 ExitOnFailure(hr, "Failed to schedule DropSmb action"); 522 ExitOnFailure(hr, "Failed to schedule DropSmb action");
523 523
524LExit: 524LExit:
@@ -558,7 +558,7 @@ LExit:
558} 558}
559 559
560LPCWSTR vcsSmbExUserPermsQuery = L"SELECT `FileShare_`,`User_`,`Permissions` " 560LPCWSTR vcsSmbExUserPermsQuery = L"SELECT `FileShare_`,`User_`,`Permissions` "
561 L"FROM `FileSharePermissions` WHERE `FileShare_`=?"; 561 L"FROM `Wix4FileSharePermissions` WHERE `FileShare_`=?";
562 562
563enum eSmbUserPermsQuery { 563enum eSmbUserPermsQuery {
564 ssupqFileShare = 1, 564 ssupqFileShare = 1,
@@ -588,9 +588,9 @@ HRESULT ScaSmbExPermsRead(SCA_SMB* pss)
588 ExitOnFailure(hr, "Failed to look up FileShare"); 588 ExitOnFailure(hr, "Failed to look up FileShare");
589 589
590 hr = WcaOpenView(vcsSmbExUserPermsQuery, &hView); 590 hr = WcaOpenView(vcsSmbExUserPermsQuery, &hView);
591 ExitOnFailure(hr, "Failed to open view on FileSharePermissions table"); 591 ExitOnFailure(hr, "Failed to open view on Wix4FileSharePermissions table");
592 hr = WcaExecuteView(hView, hRec); 592 hr = WcaExecuteView(hView, hRec);
593 ExitOnFailure(hr, "Failed to execute view on FileSharePermissions table"); 593 ExitOnFailure(hr, "Failed to execute view on Wix4FileSharePermissions table");
594 594
595 // loop through all User/Permissions paris returned 595 // loop through all User/Permissions paris returned
596 while (S_OK == (hr = WcaFetchRecord(hView, &hRec))) 596 while (S_OK == (hr = WcaFetchRecord(hView, &hRec)))
@@ -605,12 +605,12 @@ HRESULT ScaSmbExPermsRead(SCA_SMB* pss)
605 ::ZeroMemory(pExUserPerms, sizeof(*pExUserPerms)); 605 ::ZeroMemory(pExUserPerms, sizeof(*pExUserPerms));
606 606
607 hr = WcaGetRecordString(hRec, ssupqUser, &pwzData); 607 hr = WcaGetRecordString(hRec, ssupqUser, &pwzData);
608 ExitOnFailure(hr, "Failed to get FileSharePermissions.User"); 608 ExitOnFailure(hr, "Failed to get Wix4FileSharePermissions.User");
609 hr = ScaGetUser(pwzData, &pExUserPerms->scau); 609 hr = ScaGetUser(pwzData, &pExUserPerms->scau);
610 ExitOnFailure(hr, "Failed to get user information for fileshare: '%ls'", pss->wzShareName); 610 ExitOnFailure(hr, "Failed to get user information for fileshare: '%ls'", pss->wzShareName);
611 611
612 hr = WcaGetRecordInteger(hRec, ssupqPermissions, &pExUserPerms->nPermissions); 612 hr = WcaGetRecordInteger(hRec, ssupqPermissions, &pExUserPerms->nPermissions);
613 ExitOnFailure(hr, "Failed to get FileSharePermissions.Permissions"); 613 ExitOnFailure(hr, "Failed to get Wix4FileSharePermissions.Permissions");
614 pExUserPerms->accessMode = SET_ACCESS; // we only support SET_ACCESS here 614 pExUserPerms->accessMode = SET_ACCESS; // we only support SET_ACCESS here
615 615
616 pExUserPermsList = AddExUserPermsSmbToList(pExUserPermsList, pExUserPerms); 616 pExUserPermsList = AddExUserPermsSmbToList(pExUserPermsList, pExUserPerms);
diff --git a/src/ca/scauser.cpp b/src/ca/scauser.cpp
index 43317bdc..0d87301f 100644
--- a/src/ca/scauser.cpp
+++ b/src/ca/scauser.cpp
@@ -2,16 +2,16 @@
2 2
3#include "precomp.h" 3#include "precomp.h"
4 4
5LPCWSTR vcsUserQuery = L"SELECT `User`, `Component_`, `Name`, `Domain`, `Password` FROM `User` WHERE `User`=?"; 5LPCWSTR vcsUserQuery = L"SELECT `Wix4User`, `Component_`, `Name`, `Domain`, `Password` FROM `Wix4User` WHERE `Wix4User`=?";
6enum eUserQuery { vuqUser = 1, vuqComponent, vuqName, vuqDomain, vuqPassword }; 6enum eUserQuery { vuqUser = 1, vuqComponent, vuqName, vuqDomain, vuqPassword };
7 7
8LPCWSTR vcsGroupQuery = L"SELECT `Group`, `Component_`, `Name`, `Domain` FROM `Group` WHERE `Group`=?"; 8LPCWSTR vcsGroupQuery = L"SELECT `Wix4Group`, `Component_`, `Name`, `Domain` FROM `Wix4Group` WHERE `Wix4Group`=?";
9enum eGroupQuery { vgqGroup = 1, vgqComponent, vgqName, vgqDomain }; 9enum eGroupQuery { vgqGroup = 1, vgqComponent, vgqName, vgqDomain };
10 10
11LPCWSTR vcsUserGroupQuery = L"SELECT `User_`, `Group_` FROM `UserGroup` WHERE `User_`=?"; 11LPCWSTR vcsUserGroupQuery = L"SELECT `Wix4User_`, `Wix4Group_` FROM `Wix4UserGroup` WHERE `Wix4User_`=?";
12enum eUserGroupQuery { vugqUser = 1, vugqGroup }; 12enum eUserGroupQuery { vugqUser = 1, vugqGroup };
13 13
14LPCWSTR vActionableQuery = L"SELECT `User`,`Component_`,`Name`,`Domain`,`Password`,`Attributes` FROM `User` WHERE `Component_` IS NOT NULL"; 14LPCWSTR vActionableQuery = L"SELECT `Wix4User`,`Component_`,`Name`,`Domain`,`Password`,`Attributes` FROM `Wix4User` WHERE `Component_` IS NOT NULL";
15enum eActionableQuery { vaqUser = 1, vaqComponent, vaqName, vaqDomain, vaqPassword, vaqAttributes }; 15enum eActionableQuery { vaqUser = 1, vaqComponent, vaqName, vaqDomain, vaqPassword, vaqAttributes };
16 16
17 17
@@ -51,46 +51,46 @@ HRESULT __stdcall ScaGetUser(
51 ExitOnFailure(hr, "Failed to look up User"); 51 ExitOnFailure(hr, "Failed to look up User");
52 52
53 hr = WcaOpenView(vcsUserQuery, &hView); 53 hr = WcaOpenView(vcsUserQuery, &hView);
54 ExitOnFailure(hr, "Failed to open view on User table"); 54 ExitOnFailure(hr, "Failed to open view on Wix4User table");
55 hr = WcaExecuteView(hView, hRec); 55 hr = WcaExecuteView(hView, hRec);
56 ExitOnFailure(hr, "Failed to execute view on User table"); 56 ExitOnFailure(hr, "Failed to execute view on Wix4User table");
57 57
58 hr = WcaFetchSingleRecord(hView, &hRec); 58 hr = WcaFetchSingleRecord(hView, &hRec);
59 if (S_OK == hr) 59 if (S_OK == hr)
60 { 60 {
61 hr = WcaGetRecordString(hRec, vuqUser, &pwzData); 61 hr = WcaGetRecordString(hRec, vuqUser, &pwzData);
62 ExitOnFailure(hr, "Failed to get User.User"); 62 ExitOnFailure(hr, "Failed to get Wix4User.User");
63 hr = ::StringCchCopyW(pscau->wzKey, countof(pscau->wzKey), pwzData); 63 hr = ::StringCchCopyW(pscau->wzKey, countof(pscau->wzKey), pwzData);
64 ExitOnFailure(hr, "Failed to copy key string to user object"); 64 ExitOnFailure(hr, "Failed to copy key string to user object");
65 65
66 hr = WcaGetRecordString(hRec, vuqComponent, &pwzData); 66 hr = WcaGetRecordString(hRec, vuqComponent, &pwzData);
67 ExitOnFailure(hr, "Failed to get User.Component_"); 67 ExitOnFailure(hr, "Failed to get Wix4User.Component_");
68 hr = ::StringCchCopyW(pscau->wzComponent, countof(pscau->wzComponent), pwzData); 68 hr = ::StringCchCopyW(pscau->wzComponent, countof(pscau->wzComponent), pwzData);
69 ExitOnFailure(hr, "Failed to copy component string to user object"); 69 ExitOnFailure(hr, "Failed to copy component string to user object");
70 70
71 hr = WcaGetRecordFormattedString(hRec, vuqName, &pwzData); 71 hr = WcaGetRecordFormattedString(hRec, vuqName, &pwzData);
72 ExitOnFailure(hr, "Failed to get User.Name"); 72 ExitOnFailure(hr, "Failed to get Wix4User.Name");
73 hr = ::StringCchCopyW(pscau->wzName, countof(pscau->wzName), pwzData); 73 hr = ::StringCchCopyW(pscau->wzName, countof(pscau->wzName), pwzData);
74 ExitOnFailure(hr, "Failed to copy name string to user object"); 74 ExitOnFailure(hr, "Failed to copy name string to user object");
75 75
76 hr = WcaGetRecordFormattedString(hRec, vuqDomain, &pwzData); 76 hr = WcaGetRecordFormattedString(hRec, vuqDomain, &pwzData);
77 ExitOnFailure(hr, "Failed to get User.Domain"); 77 ExitOnFailure(hr, "Failed to get Wix4User.Domain");
78 hr = ::StringCchCopyW(pscau->wzDomain, countof(pscau->wzDomain), pwzData); 78 hr = ::StringCchCopyW(pscau->wzDomain, countof(pscau->wzDomain), pwzData);
79 ExitOnFailure(hr, "Failed to copy domain string to user object"); 79 ExitOnFailure(hr, "Failed to copy domain string to user object");
80 80
81 hr = WcaGetRecordFormattedString(hRec, vuqPassword, &pwzData); 81 hr = WcaGetRecordFormattedString(hRec, vuqPassword, &pwzData);
82 ExitOnFailure(hr, "Failed to get User.Password"); 82 ExitOnFailure(hr, "Failed to get Wix4User.Password");
83 hr = ::StringCchCopyW(pscau->wzPassword, countof(pscau->wzPassword), pwzData); 83 hr = ::StringCchCopyW(pscau->wzPassword, countof(pscau->wzPassword), pwzData);
84 ExitOnFailure(hr, "Failed to copy password string to user object"); 84 ExitOnFailure(hr, "Failed to copy password string to user object");
85 } 85 }
86 else if (E_NOMOREITEMS == hr) 86 else if (E_NOMOREITEMS == hr)
87 { 87 {
88 WcaLog(LOGMSG_STANDARD, "Error: Cannot locate User.User='%ls'", wzUser); 88 WcaLog(LOGMSG_STANDARD, "Error: Cannot locate Wix4User.User='%ls'", wzUser);
89 hr = E_FAIL; 89 hr = E_FAIL;
90 } 90 }
91 else 91 else
92 { 92 {
93 ExitOnFailure(hr, "Error or found multiple matching User rows"); 93 ExitOnFailure(hr, "Error or found multiple matching Wix4User rows");
94 } 94 }
95 95
96LExit: 96LExit:
@@ -131,42 +131,42 @@ HRESULT __stdcall ScaGetUserDeferred(
131 hr = WcaFetchWrappedRecordWhereString(hUserQuery, vuqUser, wzUser, &hRecTest); 131 hr = WcaFetchWrappedRecordWhereString(hUserQuery, vuqUser, wzUser, &hRecTest);
132 if (S_OK == hr) 132 if (S_OK == hr)
133 { 133 {
134 AssertSz(FALSE, "Found multiple matching User rows"); 134 AssertSz(FALSE, "Found multiple matching Wix4User rows");
135 } 135 }
136 136
137 hr = WcaGetRecordString(hRec, vuqUser, &pwzData); 137 hr = WcaGetRecordString(hRec, vuqUser, &pwzData);
138 ExitOnFailure(hr, "Failed to get User.User"); 138 ExitOnFailure(hr, "Failed to get Wix4User.User");
139 hr = ::StringCchCopyW(pscau->wzKey, countof(pscau->wzKey), pwzData); 139 hr = ::StringCchCopyW(pscau->wzKey, countof(pscau->wzKey), pwzData);
140 ExitOnFailure(hr, "Failed to copy key string to user object (in deferred CA)"); 140 ExitOnFailure(hr, "Failed to copy key string to user object (in deferred CA)");
141 141
142 hr = WcaGetRecordString(hRec, vuqComponent, &pwzData); 142 hr = WcaGetRecordString(hRec, vuqComponent, &pwzData);
143 ExitOnFailure(hr, "Failed to get User.Component_"); 143 ExitOnFailure(hr, "Failed to get Wix4User.Component_");
144 hr = ::StringCchCopyW(pscau->wzComponent, countof(pscau->wzComponent), pwzData); 144 hr = ::StringCchCopyW(pscau->wzComponent, countof(pscau->wzComponent), pwzData);
145 ExitOnFailure(hr, "Failed to copy component string to user object (in deferred CA)"); 145 ExitOnFailure(hr, "Failed to copy component string to user object (in deferred CA)");
146 146
147 hr = WcaGetRecordString(hRec, vuqName, &pwzData); 147 hr = WcaGetRecordString(hRec, vuqName, &pwzData);
148 ExitOnFailure(hr, "Failed to get User.Name"); 148 ExitOnFailure(hr, "Failed to get Wix4User.Name");
149 hr = ::StringCchCopyW(pscau->wzName, countof(pscau->wzName), pwzData); 149 hr = ::StringCchCopyW(pscau->wzName, countof(pscau->wzName), pwzData);
150 ExitOnFailure(hr, "Failed to copy name string to user object (in deferred CA)"); 150 ExitOnFailure(hr, "Failed to copy name string to user object (in deferred CA)");
151 151
152 hr = WcaGetRecordString(hRec, vuqDomain, &pwzData); 152 hr = WcaGetRecordString(hRec, vuqDomain, &pwzData);
153 ExitOnFailure(hr, "Failed to get User.Domain"); 153 ExitOnFailure(hr, "Failed to get Wix4User.Domain");
154 hr = ::StringCchCopyW(pscau->wzDomain, countof(pscau->wzDomain), pwzData); 154 hr = ::StringCchCopyW(pscau->wzDomain, countof(pscau->wzDomain), pwzData);
155 ExitOnFailure(hr, "Failed to copy domain string to user object (in deferred CA)"); 155 ExitOnFailure(hr, "Failed to copy domain string to user object (in deferred CA)");
156 156
157 hr = WcaGetRecordString(hRec, vuqPassword, &pwzData); 157 hr = WcaGetRecordString(hRec, vuqPassword, &pwzData);
158 ExitOnFailure(hr, "Failed to get User.Password"); 158 ExitOnFailure(hr, "Failed to get Wix4User.Password");
159 hr = ::StringCchCopyW(pscau->wzPassword, countof(pscau->wzPassword), pwzData); 159 hr = ::StringCchCopyW(pscau->wzPassword, countof(pscau->wzPassword), pwzData);
160 ExitOnFailure(hr, "Failed to copy password string to user object (in deferred CA)"); 160 ExitOnFailure(hr, "Failed to copy password string to user object (in deferred CA)");
161 } 161 }
162 else if (E_NOMOREITEMS == hr) 162 else if (E_NOMOREITEMS == hr)
163 { 163 {
164 WcaLog(LOGMSG_STANDARD, "Error: Cannot locate User.User='%ls'", wzUser); 164 WcaLog(LOGMSG_STANDARD, "Error: Cannot locate Wix4User.User='%ls'", wzUser);
165 hr = E_FAIL; 165 hr = E_FAIL;
166 } 166 }
167 else 167 else
168 { 168 {
169 ExitOnFailure(hr, "Error fetching single User row"); 169 ExitOnFailure(hr, "Error fetching single Wix4User row");
170 } 170 }
171 171
172LExit: 172LExit:
@@ -196,41 +196,41 @@ HRESULT __stdcall ScaGetGroup(
196 ExitOnFailure(hr, "Failed to look up Group"); 196 ExitOnFailure(hr, "Failed to look up Group");
197 197
198 hr = WcaOpenView(vcsGroupQuery, &hView); 198 hr = WcaOpenView(vcsGroupQuery, &hView);
199 ExitOnFailure(hr, "Failed to open view on Group table"); 199 ExitOnFailure(hr, "Failed to open view on Wix4Group table");
200 hr = WcaExecuteView(hView, hRec); 200 hr = WcaExecuteView(hView, hRec);
201 ExitOnFailure(hr, "Failed to execute view on Group table"); 201 ExitOnFailure(hr, "Failed to execute view on Wix4Group table");
202 202
203 hr = WcaFetchSingleRecord(hView, &hRec); 203 hr = WcaFetchSingleRecord(hView, &hRec);
204 if (S_OK == hr) 204 if (S_OK == hr)
205 { 205 {
206 hr = WcaGetRecordString(hRec, vgqGroup, &pwzData); 206 hr = WcaGetRecordString(hRec, vgqGroup, &pwzData);
207 ExitOnFailure(hr, "Failed to get Group.Group"); 207 ExitOnFailure(hr, "Failed to get Wix4Group.Wix4Group.");
208 hr = ::StringCchCopyW(pscag->wzKey, countof(pscag->wzKey), pwzData); 208 hr = ::StringCchCopyW(pscag->wzKey, countof(pscag->wzKey), pwzData);
209 ExitOnFailure(hr, "Failed to copy Group.Group."); 209 ExitOnFailure(hr, "Failed to copy Wix4Group.Wix4Group.");
210 210
211 hr = WcaGetRecordString(hRec, vgqComponent, &pwzData); 211 hr = WcaGetRecordString(hRec, vgqComponent, &pwzData);
212 ExitOnFailure(hr, "Failed to get Group.Component_"); 212 ExitOnFailure(hr, "Failed to get Wix4Group.Component_");
213 hr = ::StringCchCopyW(pscag->wzComponent, countof(pscag->wzComponent), pwzData); 213 hr = ::StringCchCopyW(pscag->wzComponent, countof(pscag->wzComponent), pwzData);
214 ExitOnFailure(hr, "Failed to copy Group.Component_."); 214 ExitOnFailure(hr, "Failed to copy Wix4Group.Component_.");
215 215
216 hr = WcaGetRecordFormattedString(hRec, vgqName, &pwzData); 216 hr = WcaGetRecordFormattedString(hRec, vgqName, &pwzData);
217 ExitOnFailure(hr, "Failed to get Group.Name"); 217 ExitOnFailure(hr, "Failed to get Wix4Group.Name");
218 hr = ::StringCchCopyW(pscag->wzName, countof(pscag->wzName), pwzData); 218 hr = ::StringCchCopyW(pscag->wzName, countof(pscag->wzName), pwzData);
219 ExitOnFailure(hr, "Failed to copy Group.Name."); 219 ExitOnFailure(hr, "Failed to copy Wix4Group.Name.");
220 220
221 hr = WcaGetRecordFormattedString(hRec, vgqDomain, &pwzData); 221 hr = WcaGetRecordFormattedString(hRec, vgqDomain, &pwzData);
222 ExitOnFailure(hr, "Failed to get Group.Domain"); 222 ExitOnFailure(hr, "Failed to get Wix4Group.Domain");
223 hr = ::StringCchCopyW(pscag->wzDomain, countof(pscag->wzDomain), pwzData); 223 hr = ::StringCchCopyW(pscag->wzDomain, countof(pscag->wzDomain), pwzData);
224 ExitOnFailure(hr, "Failed to copy Group.Domain."); 224 ExitOnFailure(hr, "Failed to copy Wix4Group.Domain.");
225 } 225 }
226 else if (E_NOMOREITEMS == hr) 226 else if (E_NOMOREITEMS == hr)
227 { 227 {
228 WcaLog(LOGMSG_STANDARD, "Error: Cannot locate Group.Group='%ls'", wzGroup); 228 WcaLog(LOGMSG_STANDARD, "Error: Cannot locate Wix4Group.Wix4Group='%ls'", wzGroup);
229 hr = E_FAIL; 229 hr = E_FAIL;
230 } 230 }
231 else 231 else
232 { 232 {
233 ExitOnFailure(hr, "Error or found multiple matching Group rows"); 233 ExitOnFailure(hr, "Error or found multiple matching Wix4Group rows");
234 } 234 }
235 235
236LExit: 236LExit:
@@ -284,19 +284,19 @@ HRESULT ScaUserRead(
284 284
285 LPWSTR pwzData = NULL; 285 LPWSTR pwzData = NULL;
286 286
287 BOOL fUserGroupExists = FALSE; 287 BOOL fUserGroupExists = FALSE;
288 288
289 SCA_USER *psu = NULL; 289 SCA_USER *psu = NULL;
290 290
291 INSTALLSTATE isInstalled, isAction; 291 INSTALLSTATE isInstalled, isAction;
292 292
293 if (S_OK != WcaTableExists(L"User")) 293 if (S_OK != WcaTableExists(L"Wix4User"))
294 { 294 {
295 WcaLog(LOGMSG_VERBOSE, "User Table does not exist, exiting"); 295 WcaLog(LOGMSG_VERBOSE, "Wix4User Table does not exist, exiting");
296 ExitFunction1(hr = S_FALSE); 296 ExitFunction1(hr = S_FALSE);
297 } 297 }
298 298
299 if (S_OK == WcaTableExists(L"UserGroup")) 299 if (S_OK == WcaTableExists(L"Wix4UserGroup"))
300 { 300 {
301 fUserGroupExists = TRUE; 301 fUserGroupExists = TRUE;
302 } 302 }
@@ -305,15 +305,15 @@ HRESULT ScaUserRead(
305 // loop through all the users 305 // loop through all the users
306 // 306 //
307 hr = WcaOpenExecuteView(vActionableQuery, &hView); 307 hr = WcaOpenExecuteView(vActionableQuery, &hView);
308 ExitOnFailure(hr, "failed to open view on User table"); 308 ExitOnFailure(hr, "failed to open view on Wix4User table");
309 while (S_OK == (hr = WcaFetchRecord(hView, &hRec))) 309 while (S_OK == (hr = WcaFetchRecord(hView, &hRec)))
310 { 310 {
311 hr = WcaGetRecordString(hRec, vaqComponent, &pwzData); 311 hr = WcaGetRecordString(hRec, vaqComponent, &pwzData);
312 ExitOnFailure(hr, "failed to get User.Component"); 312 ExitOnFailure(hr, "failed to get Wix4User.Component");
313 313
314 er = ::MsiGetComponentStateW(WcaGetInstallHandle(), pwzData, &isInstalled, &isAction); 314 er = ::MsiGetComponentStateW(WcaGetInstallHandle(), pwzData, &isInstalled, &isAction);
315 hr = HRESULT_FROM_WIN32(er); 315 hr = HRESULT_FROM_WIN32(er);
316 ExitOnFailure(hr, "failed to get Component state for User"); 316 ExitOnFailure(hr, "failed to get Component state for Wix4User");
317 317
318 // don't bother if we aren't installing or uninstalling this component 318 // don't bother if we aren't installing or uninstalling this component
319 if (WcaIsInstalling(isInstalled, isAction) || WcaIsUninstalling(isInstalled, isAction)) 319 if (WcaIsInstalling(isInstalled, isAction) || WcaIsUninstalling(isInstalled, isAction))
@@ -332,44 +332,44 @@ HRESULT ScaUserRead(
332 ExitOnFailure(hr, "failed to copy component name: %ls", pwzData); 332 ExitOnFailure(hr, "failed to copy component name: %ls", pwzData);
333 333
334 hr = WcaGetRecordString(hRec, vaqUser, &pwzData); 334 hr = WcaGetRecordString(hRec, vaqUser, &pwzData);
335 ExitOnFailure(hr, "failed to get User.User"); 335 ExitOnFailure(hr, "failed to get Wix4User.User");
336 hr = ::StringCchCopyW(psu->wzKey, countof(psu->wzKey), pwzData); 336 hr = ::StringCchCopyW(psu->wzKey, countof(psu->wzKey), pwzData);
337 ExitOnFailure(hr, "failed to copy user key: %ls", pwzData); 337 ExitOnFailure(hr, "failed to copy user key: %ls", pwzData);
338 338
339 hr = WcaGetRecordFormattedString(hRec, vaqName, &pwzData); 339 hr = WcaGetRecordFormattedString(hRec, vaqName, &pwzData);
340 ExitOnFailure(hr, "failed to get User.Name"); 340 ExitOnFailure(hr, "failed to get Wix4User.Name");
341 hr = ::StringCchCopyW(psu->wzName, countof(psu->wzName), pwzData); 341 hr = ::StringCchCopyW(psu->wzName, countof(psu->wzName), pwzData);
342 ExitOnFailure(hr, "failed to copy user name: %ls", pwzData); 342 ExitOnFailure(hr, "failed to copy user name: %ls", pwzData);
343 343
344 hr = WcaGetRecordFormattedString(hRec, vaqDomain, &pwzData); 344 hr = WcaGetRecordFormattedString(hRec, vaqDomain, &pwzData);
345 ExitOnFailure(hr, "failed to get User.Domain"); 345 ExitOnFailure(hr, "failed to get Wix4User.Domain");
346 hr = ::StringCchCopyW(psu->wzDomain, countof(psu->wzDomain), pwzData); 346 hr = ::StringCchCopyW(psu->wzDomain, countof(psu->wzDomain), pwzData);
347 ExitOnFailure(hr, "failed to copy user domain: %ls", pwzData); 347 ExitOnFailure(hr, "failed to copy user domain: %ls", pwzData);
348 348
349 hr = WcaGetRecordFormattedString(hRec, vaqPassword, &pwzData); 349 hr = WcaGetRecordFormattedString(hRec, vaqPassword, &pwzData);
350 ExitOnFailure(hr, "failed to get User.Password"); 350 ExitOnFailure(hr, "failed to get Wix4User.Password");
351 hr = ::StringCchCopyW(psu->wzPassword, countof(psu->wzPassword), pwzData); 351 hr = ::StringCchCopyW(psu->wzPassword, countof(psu->wzPassword), pwzData);
352 ExitOnFailure(hr, "failed to copy user password"); 352 ExitOnFailure(hr, "failed to copy user password");
353 353
354 hr = WcaGetRecordInteger(hRec, vaqAttributes, &psu->iAttributes); 354 hr = WcaGetRecordInteger(hRec, vaqAttributes, &psu->iAttributes);
355 ExitOnFailure(hr, "failed to get User.Attributes"); 355 ExitOnFailure(hr, "failed to get Wix4User.Attributes");
356 356
357 // Check if this user is to be added to any groups 357 // Check if this user is to be added to any groups
358 if (fUserGroupExists) 358 if (fUserGroupExists)
359 { 359 {
360 hUserRec = ::MsiCreateRecord(1); 360 hUserRec = ::MsiCreateRecord(1);
361 hr = WcaSetRecordString(hUserRec, 1, psu->wzKey); 361 hr = WcaSetRecordString(hUserRec, 1, psu->wzKey);
362 ExitOnFailure(hr, "Failed to create user record for querying UserGroup table"); 362 ExitOnFailure(hr, "Failed to create user record for querying Wix4UserGroup table");
363 363
364 hr = WcaOpenView(vcsUserGroupQuery, &hUserGroupView); 364 hr = WcaOpenView(vcsUserGroupQuery, &hUserGroupView);
365 ExitOnFailure(hr, "Failed to open view on UserGroup table for user %ls", psu->wzKey); 365 ExitOnFailure(hr, "Failed to open view on Wix4UserGroup table for user %ls", psu->wzKey);
366 hr = WcaExecuteView(hUserGroupView, hUserRec); 366 hr = WcaExecuteView(hUserGroupView, hUserRec);
367 ExitOnFailure(hr, "Failed to execute view on UserGroup table for user: %ls", psu->wzKey); 367 ExitOnFailure(hr, "Failed to execute view on Wix4UserGroup table for user: %ls", psu->wzKey);
368 368
369 while (S_OK == (hr = WcaFetchRecord(hUserGroupView, &hRec))) 369 while (S_OK == (hr = WcaFetchRecord(hUserGroupView, &hRec)))
370 { 370 {
371 hr = WcaGetRecordString(hRec, vugqGroup, &pwzData); 371 hr = WcaGetRecordString(hRec, vugqGroup, &pwzData);
372 ExitOnFailure(hr, "failed to get UserGroup.Group"); 372 ExitOnFailure(hr, "failed to get Wix4UserGroup.Group");
373 373
374 hr = AddGroupToList(&(psu->psgGroups)); 374 hr = AddGroupToList(&(psu->psgGroups));
375 ExitOnFailure(hr, "failed to add group to list"); 375 ExitOnFailure(hr, "failed to add group to list");
@@ -382,7 +382,7 @@ HRESULT ScaUserRead(
382 { 382 {
383 hr = S_OK; 383 hr = S_OK;
384 } 384 }
385 ExitOnFailure(hr, "failed to enumerate selected rows from UserGroup table"); 385 ExitOnFailure(hr, "failed to enumerate selected rows from Wix4UserGroup table");
386 } 386 }
387 } 387 }
388 } 388 }
@@ -391,7 +391,7 @@ HRESULT ScaUserRead(
391 { 391 {
392 hr = S_OK; 392 hr = S_OK;
393 } 393 }
394 ExitOnFailure(hr, "failed to enumerate selected rows from User table"); 394 ExitOnFailure(hr, "failed to enumerate selected rows from Wix4User table");
395 395
396LExit: 396LExit:
397 ReleaseStr(pwzData); 397 ReleaseStr(pwzData);
@@ -581,7 +581,7 @@ HRESULT ScaUserExecute(
581 ExitOnFailure(hr, "failed to add group information to rollback custom action data"); 581 ExitOnFailure(hr, "failed to add group information to rollback custom action data");
582 } 582 }
583 583
584 hr = WcaDoDeferredAction(PLATFORM_DECORATION(L"CreateUserRollback"), pwzRollbackData, COST_USER_DELETE); 584 hr = WcaDoDeferredAction(CUSTOM_ACTION_DECORATION(L"CreateUserRollback"), pwzRollbackData, COST_USER_DELETE);
585 ExitOnFailure(hr, "failed to schedule CreateUserRollback"); 585 ExitOnFailure(hr, "failed to schedule CreateUserRollback");
586 } 586 }
587 587
@@ -595,7 +595,7 @@ HRESULT ScaUserExecute(
595 hr = WriteGroupInfo(psu->psgGroups, &pwzActionData); 595 hr = WriteGroupInfo(psu->psgGroups, &pwzActionData);
596 ExitOnFailure(hr, "failed to add group information to custom action data"); 596 ExitOnFailure(hr, "failed to add group information to custom action data");
597 597
598 hr = WcaDoDeferredAction(PLATFORM_DECORATION(L"CreateUser"), pwzActionData, COST_USER_ADD); 598 hr = WcaDoDeferredAction(CUSTOM_ACTION_DECORATION(L"CreateUser"), pwzActionData, COST_USER_ADD);
599 ExitOnFailure(hr, "failed to schedule CreateUser"); 599 ExitOnFailure(hr, "failed to schedule CreateUser");
600 } 600 }
601 else if (((USER_EXISTS_YES == ueUserExists) || (USER_EXISTS_INDETERMINATE == ueUserExists)) && WcaIsUninstalling(psu->isInstalled, psu->isAction) && !(psu->iAttributes & SCAU_DONT_REMOVE_ON_UNINSTALL)) 601 else if (((USER_EXISTS_YES == ueUserExists) || (USER_EXISTS_INDETERMINATE == ueUserExists)) && WcaIsUninstalling(psu->isInstalled, psu->isAction) && !(psu->iAttributes & SCAU_DONT_REMOVE_ON_UNINSTALL))
@@ -610,7 +610,7 @@ HRESULT ScaUserExecute(
610 // 610 //
611 // Note: We can't rollback the removal of a user which is why RemoveUser is a commit 611 // Note: We can't rollback the removal of a user which is why RemoveUser is a commit
612 // CustomAction. 612 // CustomAction.
613 hr = WcaDoDeferredAction(PLATFORM_DECORATION(L"RemoveUser"), pwzActionData, COST_USER_DELETE); 613 hr = WcaDoDeferredAction(CUSTOM_ACTION_DECORATION(L"RemoveUser"), pwzActionData, COST_USER_DELETE);
614 ExitOnFailure(hr, "failed to schedule RemoveUser"); 614 ExitOnFailure(hr, "failed to schedule RemoveUser");
615 } 615 }
616 616
diff --git a/src/ca/secureobj.cpp b/src/ca/secureobj.cpp
index f6d1406a..392945d9 100644
--- a/src/ca/secureobj.cpp
+++ b/src/ca/secureobj.cpp
@@ -3,9 +3,9 @@
3#include "precomp.h" 3#include "precomp.h"
4 4
5// structs 5// structs
6LPCWSTR wzQUERY_SECUREOBJECTS = L"SELECT `SecureObjects`.`SecureObject`, `SecureObjects`.`Table`, `SecureObjects`.`Domain`, `SecureObjects`.`User`, " 6LPCWSTR wzQUERY_SECUREOBJECTS = L"SELECT `Wix4SecureObject`.`Wix4SecureObject`, `Wix4SecureObject`.`Table`, `Wix4SecureObject`.`Domain`, `Wix4SecureObject`.`User`, "
7 L"`SecureObjects`.`Permission`, `SecureObjects`.`Component_`, `Component`.`Attributes` FROM `SecureObjects`,`Component` WHERE " 7 L"`Wix4SecureObject`.`Permission`, `Wix4SecureObject`.`Component_`, `Component`.`Attributes` FROM `Wix4SecureObject`,`Component` WHERE "
8 L"`SecureObjects`.`Component_`=`Component`.`Component`"; 8 L"`Wix4SecureObject`.`Component_`=`Component`.`Component`";
9enum eQUERY_SECUREOBJECTS { QSO_SECUREOBJECT = 1, QSO_TABLE, QSO_DOMAIN, QSO_USER, QSO_PERMISSION, QSO_COMPONENT, QSO_COMPATTRIBUTES }; 9enum eQUERY_SECUREOBJECTS { QSO_SECUREOBJECT = 1, QSO_TABLE, QSO_DOMAIN, QSO_USER, QSO_PERMISSION, QSO_COMPONENT, QSO_COMPATTRIBUTES };
10 10
11LPCWSTR wzQUERY_REGISTRY = L"SELECT `Registry`.`Registry`, `Registry`.`Root`, `Registry`.`Key` FROM `Registry` WHERE `Registry`.`Registry`=?"; 11LPCWSTR wzQUERY_REGISTRY = L"SELECT `Registry`.`Registry`, `Registry`.`Root`, `Registry`.`Key` FROM `Registry` WHERE `Registry`.`Registry`=?";
@@ -142,7 +142,7 @@ static HRESULT StoreACLRollbackInfo(
142 ExitOnFailure(hr, "failed to add data to rollback CustomActionData"); 142 ExitOnFailure(hr, "failed to add data to rollback CustomActionData");
143 } 143 }
144 144
145 hr = WcaDoDeferredAction(PLATFORM_DECORATION(L"ExecSecureObjectsRollback"), pwzCustomActionData, COST_SECUREOBJECT); 145 hr = WcaDoDeferredAction(CUSTOM_ACTION_DECORATION(L"ExecSecureObjectsRollback"), pwzCustomActionData, COST_SECUREOBJECT);
146 ExitOnFailure(hr, "failed to schedule ExecSecureObjectsRollback for item: %ls of type: %ls", pwzObject, pwzTable); 146 ExitOnFailure(hr, "failed to schedule ExecSecureObjectsRollback for item: %ls of type: %ls", pwzObject, pwzTable);
147 147
148 ReleaseStr(pwzCustomActionData); 148 ReleaseStr(pwzCustomActionData);
@@ -343,9 +343,9 @@ extern "C" UINT __stdcall SchedSecureObjects(
343 ExitOnFailure(hr, "failed to initialize"); 343 ExitOnFailure(hr, "failed to initialize");
344 344
345 // anything to do? 345 // anything to do?
346 if (S_OK != WcaTableExists(L"SecureObjects")) 346 if (S_OK != WcaTableExists(L"Wix4SecureObject"))
347 { 347 {
348 WcaLog(LOGMSG_STANDARD, "SecureObjects table doesn't exist, so there are no objects to secure."); 348 WcaLog(LOGMSG_STANDARD, "Wix4SecureObject table doesn't exist, so there are no objects to secure.");
349 ExitFunction(); 349 ExitFunction();
350 } 350 }
351 351
@@ -353,7 +353,7 @@ extern "C" UINT __stdcall SchedSecureObjects(
353 // loop through all the objects to be secured 353 // loop through all the objects to be secured
354 // 354 //
355 hr = WcaOpenExecuteView(wzQUERY_SECUREOBJECTS, &hView); 355 hr = WcaOpenExecuteView(wzQUERY_SECUREOBJECTS, &hView);
356 ExitOnFailure(hr, "failed to open view on SecureObjects table"); 356 ExitOnFailure(hr, "failed to open view on Wix4SecureObject table");
357 while (S_OK == (hr = WcaFetchRecord(hView, &hRec))) 357 while (S_OK == (hr = WcaFetchRecord(hView, &hRec)))
358 { 358 {
359 hr = WcaGetRecordString(hRec, QSO_TABLE, &pwzTable); 359 hr = WcaGetRecordString(hRec, QSO_TABLE, &pwzTable);
@@ -372,7 +372,7 @@ extern "C" UINT __stdcall SchedSecureObjects(
372 372
373 BOOL fIs64Bit = iCompAttributes & msidbComponentAttributes64bit; 373 BOOL fIs64Bit = iCompAttributes & msidbComponentAttributes64bit;
374 374
375 // Only process entries in the SecureObjects table whose components match the bitness of this CA 375 // Only process entries in the Wix4SecureObject table whose components match the bitness of this CA
376#ifdef _WIN64 376#ifdef _WIN64
377 if (!fIs64Bit) 377 if (!fIs64Bit)
378 { 378 {
@@ -444,7 +444,7 @@ extern "C" UINT __stdcall SchedSecureObjects(
444 { 444 {
445 Assert(0 < cObjects); 445 Assert(0 < cObjects);
446 446
447 hr = WcaDoDeferredAction(PLATFORM_DECORATION(L"ExecSecureObjects"), pwzCustomActionData, cObjects * COST_SECUREOBJECT); 447 hr = WcaDoDeferredAction(CUSTOM_ACTION_DECORATION(L"ExecSecureObjects"), pwzCustomActionData, cObjects * COST_SECUREOBJECT);
448 ExitOnFailure(hr, "failed to schedule ExecSecureObjects action"); 448 ExitOnFailure(hr, "failed to schedule ExecSecureObjects action");
449 } 449 }
450 450
@@ -497,7 +497,7 @@ extern "C" UINT __stdcall SchedSecureObjectsRollback(
497 // loop through all the objects to be secured 497 // loop through all the objects to be secured
498 // 498 //
499 hr = WcaOpenExecuteView(wzQUERY_SECUREOBJECTS, &hView); 499 hr = WcaOpenExecuteView(wzQUERY_SECUREOBJECTS, &hView);
500 ExitOnFailure(hr, "failed to open view on SecureObjects table"); 500 ExitOnFailure(hr, "failed to open view on Wix4SecureObject table");
501 while (S_OK == (hr = WcaFetchRecord(hView, &hRec))) 501 while (S_OK == (hr = WcaFetchRecord(hView, &hRec)))
502 { 502 {
503 hr = WcaGetRecordString(hRec, QSO_TABLE, &pwzTable); 503 hr = WcaGetRecordString(hRec, QSO_TABLE, &pwzTable);
@@ -516,7 +516,7 @@ extern "C" UINT __stdcall SchedSecureObjectsRollback(
516 516
517 BOOL fIs64Bit = iCompAttributes & msidbComponentAttributes64bit; 517 BOOL fIs64Bit = iCompAttributes & msidbComponentAttributes64bit;
518 518
519 // Only process entries in the SecureObjects table whose components match the bitness of this CA 519 // Only process entries in the Wix4SecureObject table whose components match the bitness of this CA
520#ifdef _WIN64 520#ifdef _WIN64
521 if (!fIs64Bit) 521 if (!fIs64Bit)
522 { 522 {
diff --git a/src/ca/serviceconfig.cpp b/src/ca/serviceconfig.cpp
index c2b77035..04b25ffa 100644
--- a/src/ca/serviceconfig.cpp
+++ b/src/ca/serviceconfig.cpp
@@ -3,7 +3,7 @@
3#include "precomp.h" 3#include "precomp.h"
4 4
5// structs 5// structs
6LPCWSTR wzQUERY_SERVICECONFIG = L"SELECT `ServiceName`, `Component_`, `NewService`, `FirstFailureActionType`, `SecondFailureActionType`, `ThirdFailureActionType`, `ResetPeriodInDays`, `RestartServiceDelayInSeconds`, `ProgramCommandLine`, `RebootMessage` FROM `ServiceConfig`"; 6LPCWSTR wzQUERY_SERVICECONFIG = L"SELECT `ServiceName`, `Component_`, `NewService`, `FirstFailureActionType`, `SecondFailureActionType`, `ThirdFailureActionType`, `ResetPeriodInDays`, `RestartServiceDelayInSeconds`, `ProgramCommandLine`, `RebootMessage` FROM `Wix4ServiceConfig`";
7enum eQUERY_SERVICECONFIG { QSC_SERVICENAME = 1, QSC_COMPONENT, QSC_NEWSERVICE, QSC_FIRSTFAILUREACTIONTYPE, QSC_SECONDFAILUREACTIONTYPE, QSC_THIRDFAILUREACTIONTYPE, QSC_RESETPERIODINDAYS, QSC_RESTARTSERVICEDELAYINSECONDS, QSC_PROGRAMCOMMANDLINE, QSC_REBOOTMESSAGE }; 7enum eQUERY_SERVICECONFIG { QSC_SERVICENAME = 1, QSC_COMPONENT, QSC_NEWSERVICE, QSC_FIRSTFAILUREACTIONTYPE, QSC_SECONDFAILUREACTIONTYPE, QSC_THIRDFAILUREACTIONTYPE, QSC_RESETPERIODINDAYS, QSC_RESTARTSERVICEDELAYINSECONDS, QSC_PROGRAMCOMMANDLINE, QSC_REBOOTMESSAGE };
8 8
9// consts 9// consts
@@ -81,7 +81,7 @@ extern "C" UINT __stdcall SchedServiceConfig(
81 81
82 // Loop through all the services to be configured. 82 // Loop through all the services to be configured.
83 hr = WcaOpenExecuteView(wzQUERY_SERVICECONFIG, &hView); 83 hr = WcaOpenExecuteView(wzQUERY_SERVICECONFIG, &hView);
84 ExitOnFailure(hr, "Failed to open view on ServiceConfig table."); 84 ExitOnFailure(hr, "Failed to open view on Wix4ServiceConfig table.");
85 85
86 while (S_OK == (hr = WcaFetchRecord(hView, &hRec))) 86 while (S_OK == (hr = WcaFetchRecord(hView, &hRec)))
87 { 87 {
@@ -106,7 +106,7 @@ extern "C" UINT __stdcall SchedServiceConfig(
106 ExitOnFailure(hr, "Failed to add name to CustomActionData."); 106 ExitOnFailure(hr, "Failed to add name to CustomActionData.");
107 107
108 hr = WcaGetRecordInteger(hRec, QSC_NEWSERVICE, &iData); 108 hr = WcaGetRecordInteger(hRec, QSC_NEWSERVICE, &iData);
109 ExitOnFailure(hr, "Failed to get ServiceConfig.NewService."); 109 ExitOnFailure(hr, "Failed to get Wix4ServiceConfig.NewService.");
110 hr = WcaWriteIntegerToCaData(0 != iData, &pwzCustomActionData); 110 hr = WcaWriteIntegerToCaData(0 != iData, &pwzCustomActionData);
111 ExitOnFailure(hr, "Failed to add NewService data to CustomActionData"); 111 ExitOnFailure(hr, "Failed to add NewService data to CustomActionData");
112 112
@@ -167,10 +167,10 @@ extern "C" UINT __stdcall SchedServiceConfig(
167 // setup CustomActionData and add to progress bar for download 167 // setup CustomActionData and add to progress bar for download
168 if (0 < cServices) 168 if (0 < cServices)
169 { 169 {
170 hr = WcaDoDeferredAction(PLATFORM_DECORATION(L"RollbackServiceConfig"), pwzScriptKey, cServices * COST_SERVICECONFIG); 170 hr = WcaDoDeferredAction(CUSTOM_ACTION_DECORATION(L"RollbackServiceConfig"), pwzScriptKey, cServices * COST_SERVICECONFIG);
171 ExitOnFailure(hr, "failed to schedule RollbackServiceConfig action"); 171 ExitOnFailure(hr, "failed to schedule RollbackServiceConfig action");
172 172
173 hr = WcaDoDeferredAction(PLATFORM_DECORATION(L"ExecServiceConfig"), pwzCustomActionData, cServices * COST_SERVICECONFIG); 173 hr = WcaDoDeferredAction(CUSTOM_ACTION_DECORATION(L"ExecServiceConfig"), pwzCustomActionData, cServices * COST_SERVICECONFIG);
174 ExitOnFailure(hr, "failed to schedule ExecServiceConfig action"); 174 ExitOnFailure(hr, "failed to schedule ExecServiceConfig action");
175 } 175 }
176 176
diff --git a/src/ca/utilca.vcxproj b/src/ca/utilca.vcxproj
index 2ec0c706..45a7f278 100644
--- a/src/ca/utilca.vcxproj
+++ b/src/ca/utilca.vcxproj
@@ -66,7 +66,7 @@
66 </ItemGroup> 66 </ItemGroup>
67 67
68 <ItemGroup> 68 <ItemGroup>
69 <ClInclude Include="caSuffix.h" /> 69 <ClInclude Include="caDecor.h" />
70 <ClInclude Include="cost.h" /> 70 <ClInclude Include="cost.h" />
71 <ClInclude Include="CustomMsiErrors.h" /> 71 <ClInclude Include="CustomMsiErrors.h" />
72 <ClInclude Include="precomp.h" /> 72 <ClInclude Include="precomp.h" />
diff --git a/src/test/WixToolsetTest.Util/TestData/CloseApplication/Package.en-us.wxl b/src/test/WixToolsetTest.Util/TestData/CloseApplication/Package.en-us.wxl
new file mode 100644
index 00000000..38c12ac1
--- /dev/null
+++ b/src/test/WixToolsetTest.Util/TestData/CloseApplication/Package.en-us.wxl
@@ -0,0 +1,11 @@
1<?xml version="1.0" encoding="utf-8"?>
2
3<!--
4This file contains the declaration of all the localizable strings.
5-->
6<WixLocalization xmlns="http://wixtoolset.org/schemas/v4/wxl" Culture="en-US">
7
8 <String Id="DowngradeError">A newer version of [ProductName] is already installed.</String>
9 <String Id="FeatureTitle">MsiPackage</String>
10
11</WixLocalization>
diff --git a/src/test/WixToolsetTest.Util/TestData/CloseApplication/Package.wxs b/src/test/WixToolsetTest.Util/TestData/CloseApplication/Package.wxs
new file mode 100644
index 00000000..688ce39d
--- /dev/null
+++ b/src/test/WixToolsetTest.Util/TestData/CloseApplication/Package.wxs
@@ -0,0 +1,24 @@
1<?xml version="1.0" encoding="utf-8"?>
2<Wix xmlns="http://wixtoolset.org/schemas/v4/wxs"
3 xmlns:util="http://wixtoolset.org/schemas/v4/wxs/util">
4 <Product Id="*" Name="MsiPackage" Language="1033" Version="1.0.0.0" Manufacturer="Example Corporation" UpgradeCode="047730a5-30fe-4a62-a520-da9381b8226a">
5 <Package InstallerVersion="200" Compressed="no" InstallScope="perMachine" />
6
7 <MajorUpgrade DowngradeErrorMessage="!(loc.DowngradeError)" />
8 <MediaTemplate />
9
10 <Feature Id="ProductFeature" Title="!(loc.FeatureTitle)">
11 <ComponentGroupRef Id="ProductComponents" />
12 </Feature>
13
14 <util:CloseApplication Id="CloseMyApp" CloseMessage="yes" Property="MYAPPISRUNNING" Target="explorer.exe" />
15 </Product>
16
17 <Fragment>
18 <Directory Id="TARGETDIR" Name="SourceDir">
19 <Directory Id="ProgramFilesFolder">
20 <Directory Id="INSTALLFOLDER" Name="MsiPackage" />
21 </Directory>
22 </Directory>
23 </Fragment>
24</Wix>
diff --git a/src/test/WixToolsetTest.Util/TestData/CloseApplication/PackageComponents.wxs b/src/test/WixToolsetTest.Util/TestData/CloseApplication/PackageComponents.wxs
new file mode 100644
index 00000000..4f9e6a9d
--- /dev/null
+++ b/src/test/WixToolsetTest.Util/TestData/CloseApplication/PackageComponents.wxs
@@ -0,0 +1,11 @@
1<?xml version="1.0" encoding="utf-8"?>
2<Wix xmlns="http://wixtoolset.org/schemas/v4/wxs"
3 xmlns:util="http://wixtoolset.org/schemas/v4/wxs/util">
4 <Fragment>
5 <ComponentGroup Id="ProductComponents" Directory="INSTALLFOLDER">
6 <Component>
7 <File Source="example.txt" />
8 </Component>
9 </ComponentGroup>
10 </Fragment>
11</Wix>
diff --git a/src/test/WixToolsetTest.Util/TestData/CloseApplication/example.txt b/src/test/WixToolsetTest.Util/TestData/CloseApplication/example.txt
new file mode 100644
index 00000000..1b4ffe8a
--- /dev/null
+++ b/src/test/WixToolsetTest.Util/TestData/CloseApplication/example.txt
@@ -0,0 +1 @@
This is example.txt. \ No newline at end of file
diff --git a/src/test/WixToolsetTest.Util/TestData/EventManifest/Package.en-us.wxl b/src/test/WixToolsetTest.Util/TestData/EventManifest/Package.en-us.wxl
new file mode 100644
index 00000000..38c12ac1
--- /dev/null
+++ b/src/test/WixToolsetTest.Util/TestData/EventManifest/Package.en-us.wxl
@@ -0,0 +1,11 @@
1<?xml version="1.0" encoding="utf-8"?>
2
3<!--
4This file contains the declaration of all the localizable strings.
5-->
6<WixLocalization xmlns="http://wixtoolset.org/schemas/v4/wxl" Culture="en-US">
7
8 <String Id="DowngradeError">A newer version of [ProductName] is already installed.</String>
9 <String Id="FeatureTitle">MsiPackage</String>
10
11</WixLocalization>
diff --git a/src/test/WixToolsetTest.Util/TestData/EventManifest/Package.wxs b/src/test/WixToolsetTest.Util/TestData/EventManifest/Package.wxs
new file mode 100644
index 00000000..fc1018ae
--- /dev/null
+++ b/src/test/WixToolsetTest.Util/TestData/EventManifest/Package.wxs
@@ -0,0 +1,22 @@
1<?xml version="1.0" encoding="utf-8"?>
2<Wix xmlns="http://wixtoolset.org/schemas/v4/wxs"
3 xmlns:util="http://wixtoolset.org/schemas/v4/wxs/util">
4 <Product Id="*" Name="MsiPackage" Language="1033" Version="1.0.0.0" Manufacturer="Example Corporation" UpgradeCode="047730a5-30fe-4a62-a520-da9381b8226a">
5 <Package InstallerVersion="200" Compressed="no" InstallScope="perMachine" />
6
7 <MajorUpgrade DowngradeErrorMessage="!(loc.DowngradeError)" />
8 <MediaTemplate />
9
10 <Feature Id="ProductFeature" Title="!(loc.FeatureTitle)">
11 <ComponentGroupRef Id="ProductComponents" />
12 </Feature>
13 </Product>
14
15 <Fragment>
16 <Directory Id="TARGETDIR" Name="SourceDir">
17 <Directory Id="ProgramFilesFolder">
18 <Directory Id="INSTALLFOLDER" Name="MsiPackage" />
19 </Directory>
20 </Directory>
21 </Fragment>
22</Wix>
diff --git a/src/test/WixToolsetTest.Util/TestData/EventManifest/PackageComponents.wxs b/src/test/WixToolsetTest.Util/TestData/EventManifest/PackageComponents.wxs
new file mode 100644
index 00000000..75af3f59
--- /dev/null
+++ b/src/test/WixToolsetTest.Util/TestData/EventManifest/PackageComponents.wxs
@@ -0,0 +1,13 @@
1<?xml version="1.0" encoding="utf-8"?>
2<Wix xmlns="http://wixtoolset.org/schemas/v4/wxs"
3 xmlns:util="http://wixtoolset.org/schemas/v4/wxs/util">
4 <Fragment>
5 <ComponentGroup Id="ProductComponents" Directory="INSTALLFOLDER">
6 <Component>
7 <File Id="Manifest.dll" Source="example.txt">
8 <util:EventManifest MessageFile="[Manifest.dll]" ResourceFile="[Manifest.dll]" />
9 </File>
10 </Component>
11 </ComponentGroup>
12 </Fragment>
13</Wix>
diff --git a/src/test/WixToolsetTest.Util/TestData/EventManifest/example.txt b/src/test/WixToolsetTest.Util/TestData/EventManifest/example.txt
new file mode 100644
index 00000000..1b4ffe8a
--- /dev/null
+++ b/src/test/WixToolsetTest.Util/TestData/EventManifest/example.txt
@@ -0,0 +1 @@
This is example.txt. \ No newline at end of file
diff --git a/src/test/WixToolsetTest.Util/TestData/InternetShortcut/Package.en-us.wxl b/src/test/WixToolsetTest.Util/TestData/InternetShortcut/Package.en-us.wxl
new file mode 100644
index 00000000..38c12ac1
--- /dev/null
+++ b/src/test/WixToolsetTest.Util/TestData/InternetShortcut/Package.en-us.wxl
@@ -0,0 +1,11 @@
1<?xml version="1.0" encoding="utf-8"?>
2
3<!--
4This file contains the declaration of all the localizable strings.
5-->
6<WixLocalization xmlns="http://wixtoolset.org/schemas/v4/wxl" Culture="en-US">
7
8 <String Id="DowngradeError">A newer version of [ProductName] is already installed.</String>
9 <String Id="FeatureTitle">MsiPackage</String>
10
11</WixLocalization>
diff --git a/src/test/WixToolsetTest.Util/TestData/InternetShortcut/Package.wxs b/src/test/WixToolsetTest.Util/TestData/InternetShortcut/Package.wxs
new file mode 100644
index 00000000..fc1018ae
--- /dev/null
+++ b/src/test/WixToolsetTest.Util/TestData/InternetShortcut/Package.wxs
@@ -0,0 +1,22 @@
1<?xml version="1.0" encoding="utf-8"?>
2<Wix xmlns="http://wixtoolset.org/schemas/v4/wxs"
3 xmlns:util="http://wixtoolset.org/schemas/v4/wxs/util">
4 <Product Id="*" Name="MsiPackage" Language="1033" Version="1.0.0.0" Manufacturer="Example Corporation" UpgradeCode="047730a5-30fe-4a62-a520-da9381b8226a">
5 <Package InstallerVersion="200" Compressed="no" InstallScope="perMachine" />
6
7 <MajorUpgrade DowngradeErrorMessage="!(loc.DowngradeError)" />
8 <MediaTemplate />
9
10 <Feature Id="ProductFeature" Title="!(loc.FeatureTitle)">
11 <ComponentGroupRef Id="ProductComponents" />
12 </Feature>
13 </Product>
14
15 <Fragment>
16 <Directory Id="TARGETDIR" Name="SourceDir">
17 <Directory Id="ProgramFilesFolder">
18 <Directory Id="INSTALLFOLDER" Name="MsiPackage" />
19 </Directory>
20 </Directory>
21 </Fragment>
22</Wix>
diff --git a/src/test/WixToolsetTest.Util/TestData/InternetShortcut/PackageComponents.wxs b/src/test/WixToolsetTest.Util/TestData/InternetShortcut/PackageComponents.wxs
new file mode 100644
index 00000000..23b172f8
--- /dev/null
+++ b/src/test/WixToolsetTest.Util/TestData/InternetShortcut/PackageComponents.wxs
@@ -0,0 +1,12 @@
1<?xml version="1.0" encoding="utf-8"?>
2<Wix xmlns="http://wixtoolset.org/schemas/v4/wxs"
3 xmlns:util="http://wixtoolset.org/schemas/v4/wxs/util">
4 <Fragment>
5 <ComponentGroup Id="ProductComponents" Directory="INSTALLFOLDER">
6 <Component>
7 <File Source="example.txt" />
8 <util:InternetShortcut Id="wixshortcut" Name="WiX Toolset" Target="https://wixtoolset.org" />
9 </Component>
10 </ComponentGroup>
11 </Fragment>
12</Wix>
diff --git a/src/test/WixToolsetTest.Util/TestData/InternetShortcut/example.txt b/src/test/WixToolsetTest.Util/TestData/InternetShortcut/example.txt
new file mode 100644
index 00000000..1b4ffe8a
--- /dev/null
+++ b/src/test/WixToolsetTest.Util/TestData/InternetShortcut/example.txt
@@ -0,0 +1 @@
This is example.txt. \ No newline at end of file
diff --git a/src/test/WixToolsetTest.Util/TestData/PermissionEx/Package.en-us.wxl b/src/test/WixToolsetTest.Util/TestData/PermissionEx/Package.en-us.wxl
new file mode 100644
index 00000000..38c12ac1
--- /dev/null
+++ b/src/test/WixToolsetTest.Util/TestData/PermissionEx/Package.en-us.wxl
@@ -0,0 +1,11 @@
1<?xml version="1.0" encoding="utf-8"?>
2
3<!--
4This file contains the declaration of all the localizable strings.
5-->
6<WixLocalization xmlns="http://wixtoolset.org/schemas/v4/wxl" Culture="en-US">
7
8 <String Id="DowngradeError">A newer version of [ProductName] is already installed.</String>
9 <String Id="FeatureTitle">MsiPackage</String>
10
11</WixLocalization>
diff --git a/src/test/WixToolsetTest.Util/TestData/PermissionEx/Package.wxs b/src/test/WixToolsetTest.Util/TestData/PermissionEx/Package.wxs
new file mode 100644
index 00000000..fc1018ae
--- /dev/null
+++ b/src/test/WixToolsetTest.Util/TestData/PermissionEx/Package.wxs
@@ -0,0 +1,22 @@
1<?xml version="1.0" encoding="utf-8"?>
2<Wix xmlns="http://wixtoolset.org/schemas/v4/wxs"
3 xmlns:util="http://wixtoolset.org/schemas/v4/wxs/util">
4 <Product Id="*" Name="MsiPackage" Language="1033" Version="1.0.0.0" Manufacturer="Example Corporation" UpgradeCode="047730a5-30fe-4a62-a520-da9381b8226a">
5 <Package InstallerVersion="200" Compressed="no" InstallScope="perMachine" />
6
7 <MajorUpgrade DowngradeErrorMessage="!(loc.DowngradeError)" />
8 <MediaTemplate />
9
10 <Feature Id="ProductFeature" Title="!(loc.FeatureTitle)">
11 <ComponentGroupRef Id="ProductComponents" />
12 </Feature>
13 </Product>
14
15 <Fragment>
16 <Directory Id="TARGETDIR" Name="SourceDir">
17 <Directory Id="ProgramFilesFolder">
18 <Directory Id="INSTALLFOLDER" Name="MsiPackage" />
19 </Directory>
20 </Directory>
21 </Fragment>
22</Wix>
diff --git a/src/test/WixToolsetTest.Util/TestData/PermissionEx/PackageComponents.wxs b/src/test/WixToolsetTest.Util/TestData/PermissionEx/PackageComponents.wxs
new file mode 100644
index 00000000..22438a2b
--- /dev/null
+++ b/src/test/WixToolsetTest.Util/TestData/PermissionEx/PackageComponents.wxs
@@ -0,0 +1,14 @@
1<?xml version="1.0" encoding="utf-8"?>
2<Wix xmlns="http://wixtoolset.org/schemas/v4/wxs"
3 xmlns:util="http://wixtoolset.org/schemas/v4/wxs/util">
4 <Fragment>
5 <ComponentGroup Id="ProductComponents" Directory="INSTALLFOLDER">
6 <Component>
7 <File Source="example.txt" />
8 <CreateFolder>
9 <util:PermissionEx User="Everyone" GenericAll="yes" />
10 </CreateFolder>
11 </Component>
12 </ComponentGroup>
13 </Fragment>
14</Wix>
diff --git a/src/test/WixToolsetTest.Util/TestData/PermissionEx/example.txt b/src/test/WixToolsetTest.Util/TestData/PermissionEx/example.txt
new file mode 100644
index 00000000..1b4ffe8a
--- /dev/null
+++ b/src/test/WixToolsetTest.Util/TestData/PermissionEx/example.txt
@@ -0,0 +1 @@
This is example.txt. \ No newline at end of file
diff --git a/src/test/WixToolsetTest.Util/UtilExtensionFixture.cs b/src/test/WixToolsetTest.Util/UtilExtensionFixture.cs
index f2f06af8..750098d6 100644
--- a/src/test/WixToolsetTest.Util/UtilExtensionFixture.cs
+++ b/src/test/WixToolsetTest.Util/UtilExtensionFixture.cs
@@ -19,11 +19,118 @@ namespace WixToolsetTest.Util
19 var folder = TestData.Get(@"TestData\UsingFileShare"); 19 var folder = TestData.Get(@"TestData\UsingFileShare");
20 var build = new Builder(folder, typeof(UtilExtensionFactory), new[] { folder }); 20 var build = new Builder(folder, typeof(UtilExtensionFactory), new[] { folder });
21 21
22 var results = build.BuildAndQuery(Build, "FileShare", "FileSharePermissions"); 22 var results = build.BuildAndQuery(Build, "Binary", "CustomAction", "Wix4FileShare", "Wix4FileSharePermissions");
23 Assert.Equal(new[] 23 Assert.Equal(new[]
24 { 24 {
25 "FileShare:ExampleFileShare\texample\tfilF5_pLhBuF5b4N9XEo52g_hUM5Lo\tAn example file share\tINSTALLFOLDER\t\t", 25 "Binary:Wix4UtilCA_X86\t[Binary data]",
26 "FileSharePermissions:ExampleFileShare\tEveryone\t1", 26 "CustomAction:Wix4ConfigureSmbInstall_X86\t1\tWix4UtilCA_X86\tConfigureSmbInstall\t",
27 "CustomAction:Wix4ConfigureSmbUninstall_X86\t1\tWix4UtilCA_X86\tConfigureSmbUninstall\t",
28 "CustomAction:Wix4CreateSmb_X86\t11265\tWix4UtilCA_X86\tCreateSmb\t",
29 "CustomAction:Wix4CreateSmbRollback_X86\t11585\tWix4UtilCA_X86\tDropSmb\t",
30 "CustomAction:Wix4DropSmb_X86\t11265\tWix4UtilCA_X86\tDropSmb\t",
31 "CustomAction:Wix4DropSmbRollback_X86\t11585\tWix4UtilCA_X86\tCreateSmb\t",
32 "Wix4FileShare:ExampleFileShare\texample\tfilF5_pLhBuF5b4N9XEo52g_hUM5Lo\tAn example file share\tINSTALLFOLDER",
33 "Wix4FileSharePermissions:ExampleFileShare\tEveryone\t1",
34 }, results.OrderBy(s => s).ToArray());
35 }
36
37 [Fact]
38 public void CanBuildUsingFileShareX64()
39 {
40 var folder = TestData.Get(@"TestData\UsingFileShare");
41 var build = new Builder(folder, typeof(UtilExtensionFactory), new[] { folder });
42
43 var results = build.BuildAndQuery(BuildX64, "Binary", "CustomAction", "Wix4FileShare", "Wix4FileSharePermissions");
44 Assert.Equal(new[]
45 {
46 "Binary:Wix4UtilCA_X86\t[Binary data]",
47 "CustomAction:Wix4ConfigureSmbInstall_X86\t1\tWix4UtilCA_X86\tConfigureSmbInstall\t",
48 "CustomAction:Wix4ConfigureSmbUninstall_X86\t1\tWix4UtilCA_X86\tConfigureSmbUninstall\t",
49 "CustomAction:Wix4CreateSmb_X86\t11265\tWix4UtilCA_X86\tCreateSmb\t",
50 "CustomAction:Wix4CreateSmbRollback_X86\t11585\tWix4UtilCA_X86\tDropSmb\t",
51 "CustomAction:Wix4DropSmb_X86\t11265\tWix4UtilCA_X86\tDropSmb\t",
52 "CustomAction:Wix4DropSmbRollback_X86\t11585\tWix4UtilCA_X86\tCreateSmb\t",
53 "Wix4FileShare:ExampleFileShare\texample\tfilF5_pLhBuF5b4N9XEo52g_hUM5Lo\tAn example file share\tINSTALLFOLDER",
54 "Wix4FileSharePermissions:ExampleFileShare\tEveryone\t1",
55 }, results.OrderBy(s => s).ToArray());
56 }
57
58 [Fact]
59 public void CanBuildCloseApplication()
60 {
61 var folder = TestData.Get(@"TestData\CloseApplication");
62 var build = new Builder(folder, typeof(UtilExtensionFactory), new[] { folder });
63
64 var results = build.BuildAndQuery(BuildX64, "Binary", "CustomAction", "Wix4CloseApplication");
65 Assert.Equal(new[]
66 {
67 "Binary:Wix4UtilCA_X86\t[Binary data]",
68 "CustomAction:Wix4CheckRebootRequired_X86\t65\tWix4UtilCA_X86\tWixCheckRebootRequired\t",
69 "CustomAction:Wix4CloseApplications_X86\t1\tWix4UtilCA_X86\tWixCloseApplications\t",
70 "CustomAction:Wix4CloseApplicationsDeferred_X86\t3073\tWix4UtilCA_X86\tWixCloseApplicationsDeferred\t",
71 "Wix4CloseApplication:CloseMyApp\texplorer.exe\t\t\t3\t\tMYAPPISRUNNING\t\t",
72 }, results.OrderBy(s => s).ToArray());
73 }
74
75 [Fact]
76 public void CanBuildInternetShortcut()
77 {
78 var folder = TestData.Get(@"TestData\InternetShortcut");
79 var build = new Builder(folder, typeof(UtilExtensionFactory), new[] { folder });
80
81 var results = build.BuildAndQuery(BuildX64, "Binary", "CustomAction", "RemoveFile", "Wix4InternetShortcut");
82 Assert.Equal(new[]
83 {
84 "Binary:Wix4UtilCA_X86\t[Binary data]",
85 "CustomAction:Wix4CreateInternetShortcuts_X86\t3073\tWix4UtilCA_X86\tWixCreateInternetShortcuts\t",
86 "CustomAction:Wix4RollbackInternetShortcuts_X86\t3329\tWix4UtilCA_X86\tWixRollbackInternetShortcuts\t",
87 "CustomAction:Wix4SchedInternetShortcuts_X86\t1\tWix4UtilCA_X86\tWixSchedInternetShortcuts\t",
88 "RemoveFile:wixshortcut\tfilF5_pLhBuF5b4N9XEo52g_hUM5Lo\tvtpzs3bw.lnk|WiX Toolset.lnk\tINSTALLFOLDER\t2",
89 "Wix4InternetShortcut:wixshortcut\tfilF5_pLhBuF5b4N9XEo52g_hUM5Lo\tINSTALLFOLDER\tWiX Toolset.lnk\thttps://wixtoolset.org\t0\t\t0",
90 }, results.OrderBy(s => s).ToArray());
91 }
92
93 [Fact]
94 public void CanBuildWithPermissionEx()
95 {
96 var folder = TestData.Get(@"TestData\PermissionEx");
97 var build = new Builder(folder, typeof(UtilExtensionFactory), new[] { folder });
98
99 var results = build.BuildAndQuery(BuildX64, "Binary", "CreateFolder", "CustomAction", "Wix4SecureObject");
100 Assert.Equal(new[]
101 {
102 "Binary:Wix4UtilCA_X64\t[Binary data]",
103 "CreateFolder:INSTALLFOLDER\tfilF5_pLhBuF5b4N9XEo52g_hUM5Lo",
104 "CustomAction:Wix4ExecSecureObjects_X64\t11265\tWix4UtilCA_X64\tExecSecureObjects\t",
105 "CustomAction:Wix4ExecSecureObjectsRollback_X64\t11521\tWix4UtilCA_X64\tExecSecureObjectsRollback\t",
106 "CustomAction:Wix4SchedSecureObjects_X64\t1\tWix4UtilCA_X64\tSchedSecureObjects\t",
107 "CustomAction:Wix4SchedSecureObjectsRollback_X64\t1\tWix4UtilCA_X64\tSchedSecureObjectsRollback\t",
108 "Wix4SecureObject:INSTALLFOLDER\tCreateFolder\t\tEveryone\t268435456\tfilF5_pLhBuF5b4N9XEo52g_hUM5Lo",
109 }, results.OrderBy(s => s).ToArray());
110 }
111
112 [Fact]
113 public void CanBuildWithEventManifest()
114 {
115 var folder = TestData.Get(@"TestData\EventManifest");
116 var build = new Builder(folder, typeof(UtilExtensionFactory), new[] { folder });
117
118 var results = build.BuildAndQuery(BuildX64, "Binary", "CustomAction", "Wix4EventManifest", "Wix4XmlFile");
119 Assert.Equal(new[]
120 {
121 "Binary:Wix4UtilCA_X86\t[Binary data]",
122 "CustomAction:Wix4ConfigureEventManifestRegister_X86\t1\tWix4UtilCA_X86\tConfigureEventManifestRegister\t",
123 "CustomAction:Wix4ConfigureEventManifestUnregister_X86\t1\tWix4UtilCA_X86\tConfigureEventManifestUnregister\t",
124 "CustomAction:Wix4ExecXmlFile_X86\t11265\tWix4UtilCA_X86\tExecXmlFile\t",
125 "CustomAction:Wix4ExecXmlFileRollback_X86\t11521\tWix4UtilCA_X86\tExecXmlFileRollback\t",
126 "CustomAction:Wix4RegisterEventManifest_X86\t3073\tWix4UtilCA_X86\tCAQuietExec\t",
127 "CustomAction:Wix4RollbackRegisterEventManifest_X86\t3393\tWix4UtilCA_X86\tCAQuietExec\t",
128 "CustomAction:Wix4RollbackUnregisterEventManifest_X86\t3329\tWix4UtilCA_X86\tCAQuietExec\t",
129 "CustomAction:Wix4SchedXmlFile_X86\t1\tWix4UtilCA_X86\tSchedXmlFile\t",
130 "CustomAction:Wix4UnregisterEventManifest_X86\t3137\tWix4UtilCA_X86\tCAQuietExec\t",
131 "Wix4EventManifest:Manifest.dll\t[#Manifest.dll]",
132 "Wix4XmlFile:Config_Manifest.dllMessageFile\t[#Manifest.dll]\t/*/*/*/*[\\[]@messageFileName[\\]]\tmessageFileName\t[Manifest.dll]\t4100\tManifest.dll\t",
133 "Wix4XmlFile:Config_Manifest.dllResourceFile\t[#Manifest.dll]\t/*/*/*/*[\\[]@resourceFileName[\\]]\tresourceFileName\t[Manifest.dll]\t4100\tManifest.dll\t",
27 }, results.OrderBy(s => s).ToArray()); 134 }, results.OrderBy(s => s).ToArray());
28 } 135 }
29 136
@@ -93,8 +200,18 @@ namespace WixToolsetTest.Util
93 200
94 private static void Build(string[] args) 201 private static void Build(string[] args)
95 { 202 {
96 var result = WixRunner.Execute(args) 203 var result = WixRunner.Execute(args);
97 .AssertSuccess(); 204 result.AssertSuccess();
205 }
206
207 private static void BuildX64(string[] args)
208 {
209 var newArgs = args.ToList();
210 newArgs.Add("-platform");
211 newArgs.Add("x64");
212
213 var result = WixRunner.Execute(newArgs.ToArray());
214 result.AssertSuccess();
98 } 215 }
99 } 216 }
100} 217}
diff --git a/src/test/WixToolsetTest.Util/WixToolsetTest.Util.csproj b/src/test/WixToolsetTest.Util/WixToolsetTest.Util.csproj
index 6cf001a2..1635287d 100644
--- a/src/test/WixToolsetTest.Util/WixToolsetTest.Util.csproj
+++ b/src/test/WixToolsetTest.Util/WixToolsetTest.Util.csproj
@@ -23,6 +23,22 @@
23 <Content Include="TestData\UsingFileShare\Package.en-us.wxl" CopyToOutputDirectory="PreserveNewest" /> 23 <Content Include="TestData\UsingFileShare\Package.en-us.wxl" CopyToOutputDirectory="PreserveNewest" />
24 <Content Include="TestData\UsingFileShare\Package.wxs" CopyToOutputDirectory="PreserveNewest" /> 24 <Content Include="TestData\UsingFileShare\Package.wxs" CopyToOutputDirectory="PreserveNewest" />
25 <Content Include="TestData\UsingFileShare\PackageComponents.wxs" CopyToOutputDirectory="PreserveNewest" /> 25 <Content Include="TestData\UsingFileShare\PackageComponents.wxs" CopyToOutputDirectory="PreserveNewest" />
26 <Content Include="TestData\CloseApplication\example.txt" CopyToOutputDirectory="PreserveNewest" />
27 <Content Include="TestData\CloseApplication\Package.en-us.wxl" CopyToOutputDirectory="PreserveNewest" />
28 <Content Include="TestData\CloseApplication\Package.wxs" CopyToOutputDirectory="PreserveNewest" />
29 <Content Include="TestData\CloseApplication\PackageComponents.wxs" CopyToOutputDirectory="PreserveNewest" />
30 <Content Include="TestData\InternetShortcut\example.txt" CopyToOutputDirectory="PreserveNewest" />
31 <Content Include="TestData\InternetShortcut\Package.en-us.wxl" CopyToOutputDirectory="PreserveNewest" />
32 <Content Include="TestData\InternetShortcut\Package.wxs" CopyToOutputDirectory="PreserveNewest" />
33 <Content Include="TestData\InternetShortcut\PackageComponents.wxs" CopyToOutputDirectory="PreserveNewest" />
34 <Content Include="TestData\PermissionEx\example.txt" CopyToOutputDirectory="PreserveNewest" />
35 <Content Include="TestData\PermissionEx\Package.en-us.wxl" CopyToOutputDirectory="PreserveNewest" />
36 <Content Include="TestData\PermissionEx\Package.wxs" CopyToOutputDirectory="PreserveNewest" />
37 <Content Include="TestData\PermissionEx\PackageComponents.wxs" CopyToOutputDirectory="PreserveNewest" />
38 <Content Include="TestData\EventManifest\example.txt" CopyToOutputDirectory="PreserveNewest" />
39 <Content Include="TestData\EventManifest\Package.en-us.wxl" CopyToOutputDirectory="PreserveNewest" />
40 <Content Include="TestData\EventManifest\Package.wxs" CopyToOutputDirectory="PreserveNewest" />
41 <Content Include="TestData\EventManifest\PackageComponents.wxs" CopyToOutputDirectory="PreserveNewest" />
26 </ItemGroup> 42 </ItemGroup>
27 43
28 <ItemGroup> 44 <ItemGroup>
diff --git a/src/wixext/Tuples/EventManifestTuple.cs b/src/wixext/Tuples/EventManifestTuple.cs
index b74d2d59..364604be 100644
--- a/src/wixext/Tuples/EventManifestTuple.cs
+++ b/src/wixext/Tuples/EventManifestTuple.cs
@@ -11,7 +11,7 @@ namespace WixToolset.Util
11 UtilTupleDefinitionType.EventManifest.ToString(), 11 UtilTupleDefinitionType.EventManifest.ToString(),
12 new[] 12 new[]
13 { 13 {
14 new IntermediateFieldDefinition(nameof(EventManifestTupleFields.Component_), IntermediateFieldType.String), 14 new IntermediateFieldDefinition(nameof(EventManifestTupleFields.ComponentRef), IntermediateFieldType.String),
15 new IntermediateFieldDefinition(nameof(EventManifestTupleFields.File), IntermediateFieldType.String), 15 new IntermediateFieldDefinition(nameof(EventManifestTupleFields.File), IntermediateFieldType.String),
16 }, 16 },
17 typeof(EventManifestTuple)); 17 typeof(EventManifestTuple));
@@ -24,7 +24,7 @@ namespace WixToolset.Util.Tuples
24 24
25 public enum EventManifestTupleFields 25 public enum EventManifestTupleFields
26 { 26 {
27 Component_, 27 ComponentRef,
28 File, 28 File,
29 } 29 }
30 30
@@ -40,10 +40,10 @@ namespace WixToolset.Util.Tuples
40 40
41 public IntermediateField this[EventManifestTupleFields index] => this.Fields[(int)index]; 41 public IntermediateField this[EventManifestTupleFields index] => this.Fields[(int)index];
42 42
43 public string Component_ 43 public string ComponentRef
44 { 44 {
45 get => this.Fields[(int)EventManifestTupleFields.Component_].AsString(); 45 get => this.Fields[(int)EventManifestTupleFields.ComponentRef].AsString();
46 set => this.Set((int)EventManifestTupleFields.Component_, value); 46 set => this.Set((int)EventManifestTupleFields.ComponentRef, value);
47 } 47 }
48 48
49 public string File 49 public string File
diff --git a/src/wixext/Tuples/FileSharePermissionsTuple.cs b/src/wixext/Tuples/FileSharePermissionsTuple.cs
index 3f037e0e..1db01b98 100644
--- a/src/wixext/Tuples/FileSharePermissionsTuple.cs
+++ b/src/wixext/Tuples/FileSharePermissionsTuple.cs
@@ -11,8 +11,8 @@ namespace WixToolset.Util
11 UtilTupleDefinitionType.FileSharePermissions.ToString(), 11 UtilTupleDefinitionType.FileSharePermissions.ToString(),
12 new[] 12 new[]
13 { 13 {
14 new IntermediateFieldDefinition(nameof(FileSharePermissionsTupleFields.FileShare_), IntermediateFieldType.String), 14 new IntermediateFieldDefinition(nameof(FileSharePermissionsTupleFields.FileShareRef), IntermediateFieldType.String),
15 new IntermediateFieldDefinition(nameof(FileSharePermissionsTupleFields.User_), IntermediateFieldType.String), 15 new IntermediateFieldDefinition(nameof(FileSharePermissionsTupleFields.UserRef), IntermediateFieldType.String),
16 new IntermediateFieldDefinition(nameof(FileSharePermissionsTupleFields.Permissions), IntermediateFieldType.Number), 16 new IntermediateFieldDefinition(nameof(FileSharePermissionsTupleFields.Permissions), IntermediateFieldType.Number),
17 }, 17 },
18 typeof(FileSharePermissionsTuple)); 18 typeof(FileSharePermissionsTuple));
@@ -25,8 +25,8 @@ namespace WixToolset.Util.Tuples
25 25
26 public enum FileSharePermissionsTupleFields 26 public enum FileSharePermissionsTupleFields
27 { 27 {
28 FileShare_, 28 FileShareRef,
29 User_, 29 UserRef,
30 Permissions, 30 Permissions,
31 } 31 }
32 32
@@ -42,16 +42,16 @@ namespace WixToolset.Util.Tuples
42 42
43 public IntermediateField this[FileSharePermissionsTupleFields index] => this.Fields[(int)index]; 43 public IntermediateField this[FileSharePermissionsTupleFields index] => this.Fields[(int)index];
44 44
45 public string FileShare_ 45 public string FileShareRef
46 { 46 {
47 get => this.Fields[(int)FileSharePermissionsTupleFields.FileShare_].AsString(); 47 get => this.Fields[(int)FileSharePermissionsTupleFields.FileShareRef].AsString();
48 set => this.Set((int)FileSharePermissionsTupleFields.FileShare_, value); 48 set => this.Set((int)FileSharePermissionsTupleFields.FileShareRef, value);
49 } 49 }
50 50
51 public string User_ 51 public string UserRef
52 { 52 {
53 get => this.Fields[(int)FileSharePermissionsTupleFields.User_].AsString(); 53 get => this.Fields[(int)FileSharePermissionsTupleFields.UserRef].AsString();
54 set => this.Set((int)FileSharePermissionsTupleFields.User_, value); 54 set => this.Set((int)FileSharePermissionsTupleFields.UserRef, value);
55 } 55 }
56 56
57 public int Permissions 57 public int Permissions
diff --git a/src/wixext/Tuples/FileShareTuple.cs b/src/wixext/Tuples/FileShareTuple.cs
index 5a31b6fa..6a04f6af 100644
--- a/src/wixext/Tuples/FileShareTuple.cs
+++ b/src/wixext/Tuples/FileShareTuple.cs
@@ -11,13 +11,10 @@ namespace WixToolset.Util
11 UtilTupleDefinitionType.FileShare.ToString(), 11 UtilTupleDefinitionType.FileShare.ToString(),
12 new[] 12 new[]
13 { 13 {
14 new IntermediateFieldDefinition(nameof(FileShareTupleFields.FileShare), IntermediateFieldType.String),
15 new IntermediateFieldDefinition(nameof(FileShareTupleFields.ShareName), IntermediateFieldType.String), 14 new IntermediateFieldDefinition(nameof(FileShareTupleFields.ShareName), IntermediateFieldType.String),
16 new IntermediateFieldDefinition(nameof(FileShareTupleFields.Component_), IntermediateFieldType.String), 15 new IntermediateFieldDefinition(nameof(FileShareTupleFields.ComponentRef), IntermediateFieldType.String),
17 new IntermediateFieldDefinition(nameof(FileShareTupleFields.Description), IntermediateFieldType.String), 16 new IntermediateFieldDefinition(nameof(FileShareTupleFields.Description), IntermediateFieldType.String),
18 new IntermediateFieldDefinition(nameof(FileShareTupleFields.Directory_), IntermediateFieldType.String), 17 new IntermediateFieldDefinition(nameof(FileShareTupleFields.DirectoryRef), IntermediateFieldType.String),
19 new IntermediateFieldDefinition(nameof(FileShareTupleFields.User_), IntermediateFieldType.String),
20 new IntermediateFieldDefinition(nameof(FileShareTupleFields.Permissions), IntermediateFieldType.Number),
21 }, 18 },
22 typeof(FileShareTuple)); 19 typeof(FileShareTuple));
23 } 20 }
@@ -29,13 +26,10 @@ namespace WixToolset.Util.Tuples
29 26
30 public enum FileShareTupleFields 27 public enum FileShareTupleFields
31 { 28 {
32 FileShare,
33 ShareName, 29 ShareName,
34 Component_, 30 ComponentRef,
35 Description, 31 Description,
36 Directory_, 32 DirectoryRef,
37 User_,
38 Permissions,
39 } 33 }
40 34
41 public class FileShareTuple : IntermediateTuple 35 public class FileShareTuple : IntermediateTuple
@@ -50,22 +44,16 @@ namespace WixToolset.Util.Tuples
50 44
51 public IntermediateField this[FileShareTupleFields index] => this.Fields[(int)index]; 45 public IntermediateField this[FileShareTupleFields index] => this.Fields[(int)index];
52 46
53 public string FileShare
54 {
55 get => this.Fields[(int)FileShareTupleFields.FileShare].AsString();
56 set => this.Set((int)FileShareTupleFields.FileShare, value);
57 }
58
59 public string ShareName 47 public string ShareName
60 { 48 {
61 get => this.Fields[(int)FileShareTupleFields.ShareName].AsString(); 49 get => this.Fields[(int)FileShareTupleFields.ShareName].AsString();
62 set => this.Set((int)FileShareTupleFields.ShareName, value); 50 set => this.Set((int)FileShareTupleFields.ShareName, value);
63 } 51 }
64 52
65 public string Component_ 53 public string ComponentRef
66 { 54 {
67 get => this.Fields[(int)FileShareTupleFields.Component_].AsString(); 55 get => this.Fields[(int)FileShareTupleFields.ComponentRef].AsString();
68 set => this.Set((int)FileShareTupleFields.Component_, value); 56 set => this.Set((int)FileShareTupleFields.ComponentRef, value);
69 } 57 }
70 58
71 public string Description 59 public string Description
@@ -74,22 +62,10 @@ namespace WixToolset.Util.Tuples
74 set => this.Set((int)FileShareTupleFields.Description, value); 62 set => this.Set((int)FileShareTupleFields.Description, value);
75 } 63 }
76 64
77 public string Directory_ 65 public string DirectoryRef
78 {
79 get => this.Fields[(int)FileShareTupleFields.Directory_].AsString();
80 set => this.Set((int)FileShareTupleFields.Directory_, value);
81 }
82
83 public string User_
84 {
85 get => this.Fields[(int)FileShareTupleFields.User_].AsString();
86 set => this.Set((int)FileShareTupleFields.User_, value);
87 }
88
89 public int? Permissions
90 { 66 {
91 get => this.Fields[(int)FileShareTupleFields.Permissions].AsNullableNumber(); 67 get => this.Fields[(int)FileShareTupleFields.DirectoryRef].AsString();
92 set => this.Set((int)FileShareTupleFields.Permissions, value); 68 set => this.Set((int)FileShareTupleFields.DirectoryRef, value);
93 } 69 }
94 } 70 }
95} \ No newline at end of file 71} \ No newline at end of file
diff --git a/src/wixext/Tuples/GroupTuple.cs b/src/wixext/Tuples/GroupTuple.cs
index 97335714..6061b1f4 100644
--- a/src/wixext/Tuples/GroupTuple.cs
+++ b/src/wixext/Tuples/GroupTuple.cs
@@ -12,7 +12,7 @@ namespace WixToolset.Util
12 new[] 12 new[]
13 { 13 {
14 new IntermediateFieldDefinition(nameof(GroupTupleFields.Group), IntermediateFieldType.String), 14 new IntermediateFieldDefinition(nameof(GroupTupleFields.Group), IntermediateFieldType.String),
15 new IntermediateFieldDefinition(nameof(GroupTupleFields.Component_), IntermediateFieldType.String), 15 new IntermediateFieldDefinition(nameof(GroupTupleFields.ComponentRef), IntermediateFieldType.String),
16 new IntermediateFieldDefinition(nameof(GroupTupleFields.Name), IntermediateFieldType.String), 16 new IntermediateFieldDefinition(nameof(GroupTupleFields.Name), IntermediateFieldType.String),
17 new IntermediateFieldDefinition(nameof(GroupTupleFields.Domain), IntermediateFieldType.String), 17 new IntermediateFieldDefinition(nameof(GroupTupleFields.Domain), IntermediateFieldType.String),
18 }, 18 },
@@ -27,7 +27,7 @@ namespace WixToolset.Util.Tuples
27 public enum GroupTupleFields 27 public enum GroupTupleFields
28 { 28 {
29 Group, 29 Group,
30 Component_, 30 ComponentRef,
31 Name, 31 Name,
32 Domain, 32 Domain,
33 } 33 }
@@ -50,10 +50,10 @@ namespace WixToolset.Util.Tuples
50 set => this.Set((int)GroupTupleFields.Group, value); 50 set => this.Set((int)GroupTupleFields.Group, value);
51 } 51 }
52 52
53 public string Component_ 53 public string ComponentRef
54 { 54 {
55 get => this.Fields[(int)GroupTupleFields.Component_].AsString(); 55 get => this.Fields[(int)GroupTupleFields.ComponentRef].AsString();
56 set => this.Set((int)GroupTupleFields.Component_, value); 56 set => this.Set((int)GroupTupleFields.ComponentRef, value);
57 } 57 }
58 58
59 public string Name 59 public string Name
diff --git a/src/wixext/Tuples/PerfmonManifestTuple.cs b/src/wixext/Tuples/PerfmonManifestTuple.cs
index 3f6cb8cc..9520105a 100644
--- a/src/wixext/Tuples/PerfmonManifestTuple.cs
+++ b/src/wixext/Tuples/PerfmonManifestTuple.cs
@@ -11,7 +11,7 @@ namespace WixToolset.Util
11 UtilTupleDefinitionType.PerfmonManifest.ToString(), 11 UtilTupleDefinitionType.PerfmonManifest.ToString(),
12 new[] 12 new[]
13 { 13 {
14 new IntermediateFieldDefinition(nameof(PerfmonManifestTupleFields.Component_), IntermediateFieldType.String), 14 new IntermediateFieldDefinition(nameof(PerfmonManifestTupleFields.ComponentRef), IntermediateFieldType.String),
15 new IntermediateFieldDefinition(nameof(PerfmonManifestTupleFields.File), IntermediateFieldType.String), 15 new IntermediateFieldDefinition(nameof(PerfmonManifestTupleFields.File), IntermediateFieldType.String),
16 new IntermediateFieldDefinition(nameof(PerfmonManifestTupleFields.ResourceFileDirectory), IntermediateFieldType.String), 16 new IntermediateFieldDefinition(nameof(PerfmonManifestTupleFields.ResourceFileDirectory), IntermediateFieldType.String),
17 }, 17 },
@@ -25,7 +25,7 @@ namespace WixToolset.Util.Tuples
25 25
26 public enum PerfmonManifestTupleFields 26 public enum PerfmonManifestTupleFields
27 { 27 {
28 Component_, 28 ComponentRef,
29 File, 29 File,
30 ResourceFileDirectory, 30 ResourceFileDirectory,
31 } 31 }
@@ -42,10 +42,10 @@ namespace WixToolset.Util.Tuples
42 42
43 public IntermediateField this[PerfmonManifestTupleFields index] => this.Fields[(int)index]; 43 public IntermediateField this[PerfmonManifestTupleFields index] => this.Fields[(int)index];
44 44
45 public string Component_ 45 public string ComponentRef
46 { 46 {
47 get => this.Fields[(int)PerfmonManifestTupleFields.Component_].AsString(); 47 get => this.Fields[(int)PerfmonManifestTupleFields.ComponentRef].AsString();
48 set => this.Set((int)PerfmonManifestTupleFields.Component_, value); 48 set => this.Set((int)PerfmonManifestTupleFields.ComponentRef, value);
49 } 49 }
50 50
51 public string File 51 public string File
diff --git a/src/wixext/Tuples/PerfmonTuple.cs b/src/wixext/Tuples/PerfmonTuple.cs
index 00ea818b..1fb6ef6b 100644
--- a/src/wixext/Tuples/PerfmonTuple.cs
+++ b/src/wixext/Tuples/PerfmonTuple.cs
@@ -11,7 +11,7 @@ namespace WixToolset.Util
11 UtilTupleDefinitionType.Perfmon.ToString(), 11 UtilTupleDefinitionType.Perfmon.ToString(),
12 new[] 12 new[]
13 { 13 {
14 new IntermediateFieldDefinition(nameof(PerfmonTupleFields.Component_), IntermediateFieldType.String), 14 new IntermediateFieldDefinition(nameof(PerfmonTupleFields.ComponentRef), IntermediateFieldType.String),
15 new IntermediateFieldDefinition(nameof(PerfmonTupleFields.File), IntermediateFieldType.String), 15 new IntermediateFieldDefinition(nameof(PerfmonTupleFields.File), IntermediateFieldType.String),
16 new IntermediateFieldDefinition(nameof(PerfmonTupleFields.Name), IntermediateFieldType.String), 16 new IntermediateFieldDefinition(nameof(PerfmonTupleFields.Name), IntermediateFieldType.String),
17 }, 17 },
@@ -25,7 +25,7 @@ namespace WixToolset.Util.Tuples
25 25
26 public enum PerfmonTupleFields 26 public enum PerfmonTupleFields
27 { 27 {
28 Component_, 28 ComponentRef,
29 File, 29 File,
30 Name, 30 Name,
31 } 31 }
@@ -42,10 +42,10 @@ namespace WixToolset.Util.Tuples
42 42
43 public IntermediateField this[PerfmonTupleFields index] => this.Fields[(int)index]; 43 public IntermediateField this[PerfmonTupleFields index] => this.Fields[(int)index];
44 44
45 public string Component_ 45 public string ComponentRef
46 { 46 {
47 get => this.Fields[(int)PerfmonTupleFields.Component_].AsString(); 47 get => this.Fields[(int)PerfmonTupleFields.ComponentRef].AsString();
48 set => this.Set((int)PerfmonTupleFields.Component_, value); 48 set => this.Set((int)PerfmonTupleFields.ComponentRef, value);
49 } 49 }
50 50
51 public string File 51 public string File
diff --git a/src/wixext/Tuples/PerformanceCategoryTuple.cs b/src/wixext/Tuples/PerformanceCategoryTuple.cs
index ec2ba73d..16705466 100644
--- a/src/wixext/Tuples/PerformanceCategoryTuple.cs
+++ b/src/wixext/Tuples/PerformanceCategoryTuple.cs
@@ -11,8 +11,7 @@ namespace WixToolset.Util
11 UtilTupleDefinitionType.PerformanceCategory.ToString(), 11 UtilTupleDefinitionType.PerformanceCategory.ToString(),
12 new[] 12 new[]
13 { 13 {
14 new IntermediateFieldDefinition(nameof(PerformanceCategoryTupleFields.PerformanceCategory), IntermediateFieldType.String), 14 new IntermediateFieldDefinition(nameof(PerformanceCategoryTupleFields.ComponentRef), IntermediateFieldType.String),
15 new IntermediateFieldDefinition(nameof(PerformanceCategoryTupleFields.Component_), IntermediateFieldType.String),
16 new IntermediateFieldDefinition(nameof(PerformanceCategoryTupleFields.Name), IntermediateFieldType.String), 15 new IntermediateFieldDefinition(nameof(PerformanceCategoryTupleFields.Name), IntermediateFieldType.String),
17 new IntermediateFieldDefinition(nameof(PerformanceCategoryTupleFields.IniData), IntermediateFieldType.String), 16 new IntermediateFieldDefinition(nameof(PerformanceCategoryTupleFields.IniData), IntermediateFieldType.String),
18 new IntermediateFieldDefinition(nameof(PerformanceCategoryTupleFields.ConstantData), IntermediateFieldType.String), 17 new IntermediateFieldDefinition(nameof(PerformanceCategoryTupleFields.ConstantData), IntermediateFieldType.String),
@@ -27,8 +26,7 @@ namespace WixToolset.Util.Tuples
27 26
28 public enum PerformanceCategoryTupleFields 27 public enum PerformanceCategoryTupleFields
29 { 28 {
30 PerformanceCategory, 29 ComponentRef,
31 Component_,
32 Name, 30 Name,
33 IniData, 31 IniData,
34 ConstantData, 32 ConstantData,
@@ -46,16 +44,10 @@ namespace WixToolset.Util.Tuples
46 44
47 public IntermediateField this[PerformanceCategoryTupleFields index] => this.Fields[(int)index]; 45 public IntermediateField this[PerformanceCategoryTupleFields index] => this.Fields[(int)index];
48 46
49 public string PerformanceCategory 47 public string ComponentRef
50 { 48 {
51 get => this.Fields[(int)PerformanceCategoryTupleFields.PerformanceCategory].AsString(); 49 get => this.Fields[(int)PerformanceCategoryTupleFields.ComponentRef].AsString();
52 set => this.Set((int)PerformanceCategoryTupleFields.PerformanceCategory, value); 50 set => this.Set((int)PerformanceCategoryTupleFields.ComponentRef, value);
53 }
54
55 public string Component_
56 {
57 get => this.Fields[(int)PerformanceCategoryTupleFields.Component_].AsString();
58 set => this.Set((int)PerformanceCategoryTupleFields.Component_, value);
59 } 51 }
60 52
61 public string Name 53 public string Name
diff --git a/src/wixext/Tuples/SecureObjectsTuple.cs b/src/wixext/Tuples/SecureObjectsTuple.cs
index f54b23d8..920fe7b3 100644
--- a/src/wixext/Tuples/SecureObjectsTuple.cs
+++ b/src/wixext/Tuples/SecureObjectsTuple.cs
@@ -11,12 +11,11 @@ namespace WixToolset.Util
11 UtilTupleDefinitionType.SecureObjects.ToString(), 11 UtilTupleDefinitionType.SecureObjects.ToString(),
12 new[] 12 new[]
13 { 13 {
14 new IntermediateFieldDefinition(nameof(SecureObjectsTupleFields.SecureObject), IntermediateFieldType.String),
15 new IntermediateFieldDefinition(nameof(SecureObjectsTupleFields.Table), IntermediateFieldType.String), 14 new IntermediateFieldDefinition(nameof(SecureObjectsTupleFields.Table), IntermediateFieldType.String),
16 new IntermediateFieldDefinition(nameof(SecureObjectsTupleFields.Domain), IntermediateFieldType.String), 15 new IntermediateFieldDefinition(nameof(SecureObjectsTupleFields.Domain), IntermediateFieldType.String),
17 new IntermediateFieldDefinition(nameof(SecureObjectsTupleFields.User), IntermediateFieldType.String), 16 new IntermediateFieldDefinition(nameof(SecureObjectsTupleFields.User), IntermediateFieldType.String),
18 new IntermediateFieldDefinition(nameof(SecureObjectsTupleFields.Permission), IntermediateFieldType.Number), 17 new IntermediateFieldDefinition(nameof(SecureObjectsTupleFields.Permission), IntermediateFieldType.Number),
19 new IntermediateFieldDefinition(nameof(SecureObjectsTupleFields.Component_), IntermediateFieldType.String), 18 new IntermediateFieldDefinition(nameof(SecureObjectsTupleFields.ComponentRef), IntermediateFieldType.String),
20 }, 19 },
21 typeof(SecureObjectsTuple)); 20 typeof(SecureObjectsTuple));
22 } 21 }
@@ -28,12 +27,11 @@ namespace WixToolset.Util.Tuples
28 27
29 public enum SecureObjectsTupleFields 28 public enum SecureObjectsTupleFields
30 { 29 {
31 SecureObject,
32 Table, 30 Table,
33 Domain, 31 Domain,
34 User, 32 User,
35 Permission, 33 Permission,
36 Component_, 34 ComponentRef,
37 } 35 }
38 36
39 public class SecureObjectsTuple : IntermediateTuple 37 public class SecureObjectsTuple : IntermediateTuple
@@ -48,12 +46,6 @@ namespace WixToolset.Util.Tuples
48 46
49 public IntermediateField this[SecureObjectsTupleFields index] => this.Fields[(int)index]; 47 public IntermediateField this[SecureObjectsTupleFields index] => this.Fields[(int)index];
50 48
51 public string SecureObject
52 {
53 get => this.Fields[(int)SecureObjectsTupleFields.SecureObject].AsString();
54 set => this.Set((int)SecureObjectsTupleFields.SecureObject, value);
55 }
56
57 public string Table 49 public string Table
58 { 50 {
59 get => this.Fields[(int)SecureObjectsTupleFields.Table].AsString(); 51 get => this.Fields[(int)SecureObjectsTupleFields.Table].AsString();
@@ -78,10 +70,10 @@ namespace WixToolset.Util.Tuples
78 set => this.Set((int)SecureObjectsTupleFields.Permission, value); 70 set => this.Set((int)SecureObjectsTupleFields.Permission, value);
79 } 71 }
80 72
81 public string Component_ 73 public string ComponentRef
82 { 74 {
83 get => this.Fields[(int)SecureObjectsTupleFields.Component_].AsString(); 75 get => this.Fields[(int)SecureObjectsTupleFields.ComponentRef].AsString();
84 set => this.Set((int)SecureObjectsTupleFields.Component_, value); 76 set => this.Set((int)SecureObjectsTupleFields.ComponentRef, value);
85 } 77 }
86 } 78 }
87} \ No newline at end of file 79} \ No newline at end of file
diff --git a/src/wixext/Tuples/ServiceConfigTuple.cs b/src/wixext/Tuples/ServiceConfigTuple.cs
index 74d96bca..e5fc3992 100644
--- a/src/wixext/Tuples/ServiceConfigTuple.cs
+++ b/src/wixext/Tuples/ServiceConfigTuple.cs
@@ -12,7 +12,7 @@ namespace WixToolset.Util
12 new[] 12 new[]
13 { 13 {
14 new IntermediateFieldDefinition(nameof(ServiceConfigTupleFields.ServiceName), IntermediateFieldType.String), 14 new IntermediateFieldDefinition(nameof(ServiceConfigTupleFields.ServiceName), IntermediateFieldType.String),
15 new IntermediateFieldDefinition(nameof(ServiceConfigTupleFields.Component_), IntermediateFieldType.String), 15 new IntermediateFieldDefinition(nameof(ServiceConfigTupleFields.ComponentRef), IntermediateFieldType.String),
16 new IntermediateFieldDefinition(nameof(ServiceConfigTupleFields.NewService), IntermediateFieldType.Number), 16 new IntermediateFieldDefinition(nameof(ServiceConfigTupleFields.NewService), IntermediateFieldType.Number),
17 new IntermediateFieldDefinition(nameof(ServiceConfigTupleFields.FirstFailureActionType), IntermediateFieldType.String), 17 new IntermediateFieldDefinition(nameof(ServiceConfigTupleFields.FirstFailureActionType), IntermediateFieldType.String),
18 new IntermediateFieldDefinition(nameof(ServiceConfigTupleFields.SecondFailureActionType), IntermediateFieldType.String), 18 new IntermediateFieldDefinition(nameof(ServiceConfigTupleFields.SecondFailureActionType), IntermediateFieldType.String),
@@ -33,7 +33,7 @@ namespace WixToolset.Util.Tuples
33 public enum ServiceConfigTupleFields 33 public enum ServiceConfigTupleFields
34 { 34 {
35 ServiceName, 35 ServiceName,
36 Component_, 36 ComponentRef,
37 NewService, 37 NewService,
38 FirstFailureActionType, 38 FirstFailureActionType,
39 SecondFailureActionType, 39 SecondFailureActionType,
@@ -62,10 +62,10 @@ namespace WixToolset.Util.Tuples
62 set => this.Set((int)ServiceConfigTupleFields.ServiceName, value); 62 set => this.Set((int)ServiceConfigTupleFields.ServiceName, value);
63 } 63 }
64 64
65 public string Component_ 65 public string ComponentRef
66 { 66 {
67 get => this.Fields[(int)ServiceConfigTupleFields.Component_].AsString(); 67 get => this.Fields[(int)ServiceConfigTupleFields.ComponentRef].AsString();
68 set => this.Set((int)ServiceConfigTupleFields.Component_, value); 68 set => this.Set((int)ServiceConfigTupleFields.ComponentRef, value);
69 } 69 }
70 70
71 public int NewService 71 public int NewService
diff --git a/src/wixext/Tuples/UserGroupTuple.cs b/src/wixext/Tuples/UserGroupTuple.cs
index 0386a26e..30c5e9ff 100644
--- a/src/wixext/Tuples/UserGroupTuple.cs
+++ b/src/wixext/Tuples/UserGroupTuple.cs
@@ -11,8 +11,8 @@ namespace WixToolset.Util
11 UtilTupleDefinitionType.UserGroup.ToString(), 11 UtilTupleDefinitionType.UserGroup.ToString(),
12 new[] 12 new[]
13 { 13 {
14 new IntermediateFieldDefinition(nameof(UserGroupTupleFields.User_), IntermediateFieldType.String), 14 new IntermediateFieldDefinition(nameof(UserGroupTupleFields.UserRef), IntermediateFieldType.String),
15 new IntermediateFieldDefinition(nameof(UserGroupTupleFields.Group_), IntermediateFieldType.String), 15 new IntermediateFieldDefinition(nameof(UserGroupTupleFields.GroupRef), IntermediateFieldType.String),
16 }, 16 },
17 typeof(UserGroupTuple)); 17 typeof(UserGroupTuple));
18 } 18 }
@@ -24,8 +24,8 @@ namespace WixToolset.Util.Tuples
24 24
25 public enum UserGroupTupleFields 25 public enum UserGroupTupleFields
26 { 26 {
27 User_, 27 UserRef,
28 Group_, 28 GroupRef,
29 } 29 }
30 30
31 public class UserGroupTuple : IntermediateTuple 31 public class UserGroupTuple : IntermediateTuple
@@ -40,16 +40,16 @@ namespace WixToolset.Util.Tuples
40 40
41 public IntermediateField this[UserGroupTupleFields index] => this.Fields[(int)index]; 41 public IntermediateField this[UserGroupTupleFields index] => this.Fields[(int)index];
42 42
43 public string User_ 43 public string UserRef
44 { 44 {
45 get => this.Fields[(int)UserGroupTupleFields.User_].AsString(); 45 get => this.Fields[(int)UserGroupTupleFields.UserRef].AsString();
46 set => this.Set((int)UserGroupTupleFields.User_, value); 46 set => this.Set((int)UserGroupTupleFields.UserRef, value);
47 } 47 }
48 48
49 public string Group_ 49 public string GroupRef
50 { 50 {
51 get => this.Fields[(int)UserGroupTupleFields.Group_].AsString(); 51 get => this.Fields[(int)UserGroupTupleFields.GroupRef].AsString();
52 set => this.Set((int)UserGroupTupleFields.Group_, value); 52 set => this.Set((int)UserGroupTupleFields.GroupRef, value);
53 } 53 }
54 } 54 }
55} \ No newline at end of file 55} \ No newline at end of file
diff --git a/src/wixext/Tuples/UserTuple.cs b/src/wixext/Tuples/UserTuple.cs
index e8c5315c..f11ed78b 100644
--- a/src/wixext/Tuples/UserTuple.cs
+++ b/src/wixext/Tuples/UserTuple.cs
@@ -11,8 +11,7 @@ namespace WixToolset.Util
11 UtilTupleDefinitionType.User.ToString(), 11 UtilTupleDefinitionType.User.ToString(),
12 new[] 12 new[]
13 { 13 {
14 new IntermediateFieldDefinition(nameof(UserTupleFields.User), IntermediateFieldType.String), 14 new IntermediateFieldDefinition(nameof(UserTupleFields.ComponentRef), IntermediateFieldType.String),
15 new IntermediateFieldDefinition(nameof(UserTupleFields.Component_), IntermediateFieldType.String),
16 new IntermediateFieldDefinition(nameof(UserTupleFields.Name), IntermediateFieldType.String), 15 new IntermediateFieldDefinition(nameof(UserTupleFields.Name), IntermediateFieldType.String),
17 new IntermediateFieldDefinition(nameof(UserTupleFields.Domain), IntermediateFieldType.String), 16 new IntermediateFieldDefinition(nameof(UserTupleFields.Domain), IntermediateFieldType.String),
18 new IntermediateFieldDefinition(nameof(UserTupleFields.Password), IntermediateFieldType.String), 17 new IntermediateFieldDefinition(nameof(UserTupleFields.Password), IntermediateFieldType.String),
@@ -28,8 +27,7 @@ namespace WixToolset.Util.Tuples
28 27
29 public enum UserTupleFields 28 public enum UserTupleFields
30 { 29 {
31 User, 30 ComponentRef,
32 Component_,
33 Name, 31 Name,
34 Domain, 32 Domain,
35 Password, 33 Password,
@@ -48,16 +46,10 @@ namespace WixToolset.Util.Tuples
48 46
49 public IntermediateField this[UserTupleFields index] => this.Fields[(int)index]; 47 public IntermediateField this[UserTupleFields index] => this.Fields[(int)index];
50 48
51 public string User 49 public string ComponentRef
52 { 50 {
53 get => this.Fields[(int)UserTupleFields.User].AsString(); 51 get => this.Fields[(int)UserTupleFields.ComponentRef].AsString();
54 set => this.Set((int)UserTupleFields.User, value); 52 set => this.Set((int)UserTupleFields.ComponentRef, value);
55 }
56
57 public string Component_
58 {
59 get => this.Fields[(int)UserTupleFields.Component_].AsString();
60 set => this.Set((int)UserTupleFields.Component_, value);
61 } 53 }
62 54
63 public string Name 55 public string Name
diff --git a/src/wixext/Tuples/WixCloseApplicationTuple.cs b/src/wixext/Tuples/WixCloseApplicationTuple.cs
index c2095d93..cc91c326 100644
--- a/src/wixext/Tuples/WixCloseApplicationTuple.cs
+++ b/src/wixext/Tuples/WixCloseApplicationTuple.cs
@@ -11,7 +11,6 @@ namespace WixToolset.Util
11 UtilTupleDefinitionType.WixCloseApplication.ToString(), 11 UtilTupleDefinitionType.WixCloseApplication.ToString(),
12 new[] 12 new[]
13 { 13 {
14 new IntermediateFieldDefinition(nameof(WixCloseApplicationTupleFields.WixCloseApplication), IntermediateFieldType.String),
15 new IntermediateFieldDefinition(nameof(WixCloseApplicationTupleFields.Target), IntermediateFieldType.String), 14 new IntermediateFieldDefinition(nameof(WixCloseApplicationTupleFields.Target), IntermediateFieldType.String),
16 new IntermediateFieldDefinition(nameof(WixCloseApplicationTupleFields.Description), IntermediateFieldType.String), 15 new IntermediateFieldDefinition(nameof(WixCloseApplicationTupleFields.Description), IntermediateFieldType.String),
17 new IntermediateFieldDefinition(nameof(WixCloseApplicationTupleFields.Condition), IntermediateFieldType.String), 16 new IntermediateFieldDefinition(nameof(WixCloseApplicationTupleFields.Condition), IntermediateFieldType.String),
@@ -31,7 +30,6 @@ namespace WixToolset.Util.Tuples
31 30
32 public enum WixCloseApplicationTupleFields 31 public enum WixCloseApplicationTupleFields
33 { 32 {
34 WixCloseApplication,
35 Target, 33 Target,
36 Description, 34 Description,
37 Condition, 35 Condition,
@@ -54,12 +52,6 @@ namespace WixToolset.Util.Tuples
54 52
55 public IntermediateField this[WixCloseApplicationTupleFields index] => this.Fields[(int)index]; 53 public IntermediateField this[WixCloseApplicationTupleFields index] => this.Fields[(int)index];
56 54
57 public string WixCloseApplication
58 {
59 get => this.Fields[(int)WixCloseApplicationTupleFields.WixCloseApplication].AsString();
60 set => this.Set((int)WixCloseApplicationTupleFields.WixCloseApplication, value);
61 }
62
63 public string Target 55 public string Target
64 { 56 {
65 get => this.Fields[(int)WixCloseApplicationTupleFields.Target].AsString(); 57 get => this.Fields[(int)WixCloseApplicationTupleFields.Target].AsString();
diff --git a/src/wixext/Tuples/WixFormatFilesTuple.cs b/src/wixext/Tuples/WixFormatFilesTuple.cs
index 7fc092b0..8e7db0c6 100644
--- a/src/wixext/Tuples/WixFormatFilesTuple.cs
+++ b/src/wixext/Tuples/WixFormatFilesTuple.cs
@@ -11,8 +11,8 @@ namespace WixToolset.Util
11 UtilTupleDefinitionType.WixFormatFiles.ToString(), 11 UtilTupleDefinitionType.WixFormatFiles.ToString(),
12 new[] 12 new[]
13 { 13 {
14 new IntermediateFieldDefinition(nameof(WixFormatFilesTupleFields.Binary_), IntermediateFieldType.String), 14 new IntermediateFieldDefinition(nameof(WixFormatFilesTupleFields.BinaryRef), IntermediateFieldType.String),
15 new IntermediateFieldDefinition(nameof(WixFormatFilesTupleFields.File_), IntermediateFieldType.String), 15 new IntermediateFieldDefinition(nameof(WixFormatFilesTupleFields.FileRef), IntermediateFieldType.String),
16 }, 16 },
17 typeof(WixFormatFilesTuple)); 17 typeof(WixFormatFilesTuple));
18 } 18 }
@@ -24,8 +24,8 @@ namespace WixToolset.Util.Tuples
24 24
25 public enum WixFormatFilesTupleFields 25 public enum WixFormatFilesTupleFields
26 { 26 {
27 Binary_, 27 BinaryRef,
28 File_, 28 FileRef,
29 } 29 }
30 30
31 public class WixFormatFilesTuple : IntermediateTuple 31 public class WixFormatFilesTuple : IntermediateTuple
@@ -40,16 +40,16 @@ namespace WixToolset.Util.Tuples
40 40
41 public IntermediateField this[WixFormatFilesTupleFields index] => this.Fields[(int)index]; 41 public IntermediateField this[WixFormatFilesTupleFields index] => this.Fields[(int)index];
42 42
43 public string Binary_ 43 public string BinaryRef
44 { 44 {
45 get => this.Fields[(int)WixFormatFilesTupleFields.Binary_].AsString(); 45 get => this.Fields[(int)WixFormatFilesTupleFields.BinaryRef].AsString();
46 set => this.Set((int)WixFormatFilesTupleFields.Binary_, value); 46 set => this.Set((int)WixFormatFilesTupleFields.BinaryRef, value);
47 } 47 }
48 48
49 public string File_ 49 public string FileRef
50 { 50 {
51 get => this.Fields[(int)WixFormatFilesTupleFields.File_].AsString(); 51 get => this.Fields[(int)WixFormatFilesTupleFields.FileRef].AsString();
52 set => this.Set((int)WixFormatFilesTupleFields.File_, value); 52 set => this.Set((int)WixFormatFilesTupleFields.FileRef, value);
53 } 53 }
54 } 54 }
55} \ No newline at end of file 55} \ No newline at end of file
diff --git a/src/wixext/Tuples/WixInternetShortcutTuple.cs b/src/wixext/Tuples/WixInternetShortcutTuple.cs
index 5c29cda6..935d9462 100644
--- a/src/wixext/Tuples/WixInternetShortcutTuple.cs
+++ b/src/wixext/Tuples/WixInternetShortcutTuple.cs
@@ -11,9 +11,8 @@ namespace WixToolset.Util
11 UtilTupleDefinitionType.WixInternetShortcut.ToString(), 11 UtilTupleDefinitionType.WixInternetShortcut.ToString(),
12 new[] 12 new[]
13 { 13 {
14 new IntermediateFieldDefinition(nameof(WixInternetShortcutTupleFields.WixInternetShortcut), IntermediateFieldType.String), 14 new IntermediateFieldDefinition(nameof(WixInternetShortcutTupleFields.ComponentRef), IntermediateFieldType.String),
15 new IntermediateFieldDefinition(nameof(WixInternetShortcutTupleFields.Component_), IntermediateFieldType.String), 15 new IntermediateFieldDefinition(nameof(WixInternetShortcutTupleFields.DirectoryRef), IntermediateFieldType.String),
16 new IntermediateFieldDefinition(nameof(WixInternetShortcutTupleFields.Directory_), IntermediateFieldType.String),
17 new IntermediateFieldDefinition(nameof(WixInternetShortcutTupleFields.Name), IntermediateFieldType.String), 16 new IntermediateFieldDefinition(nameof(WixInternetShortcutTupleFields.Name), IntermediateFieldType.String),
18 new IntermediateFieldDefinition(nameof(WixInternetShortcutTupleFields.Target), IntermediateFieldType.String), 17 new IntermediateFieldDefinition(nameof(WixInternetShortcutTupleFields.Target), IntermediateFieldType.String),
19 new IntermediateFieldDefinition(nameof(WixInternetShortcutTupleFields.Attributes), IntermediateFieldType.Number), 18 new IntermediateFieldDefinition(nameof(WixInternetShortcutTupleFields.Attributes), IntermediateFieldType.Number),
@@ -30,9 +29,8 @@ namespace WixToolset.Util.Tuples
30 29
31 public enum WixInternetShortcutTupleFields 30 public enum WixInternetShortcutTupleFields
32 { 31 {
33 WixInternetShortcut, 32 ComponentRef,
34 Component_, 33 DirectoryRef,
35 Directory_,
36 Name, 34 Name,
37 Target, 35 Target,
38 Attributes, 36 Attributes,
@@ -52,22 +50,16 @@ namespace WixToolset.Util.Tuples
52 50
53 public IntermediateField this[WixInternetShortcutTupleFields index] => this.Fields[(int)index]; 51 public IntermediateField this[WixInternetShortcutTupleFields index] => this.Fields[(int)index];
54 52
55 public string WixInternetShortcut 53 public string ComponentRef
56 { 54 {
57 get => this.Fields[(int)WixInternetShortcutTupleFields.WixInternetShortcut].AsString(); 55 get => this.Fields[(int)WixInternetShortcutTupleFields.ComponentRef].AsString();
58 set => this.Set((int)WixInternetShortcutTupleFields.WixInternetShortcut, value); 56 set => this.Set((int)WixInternetShortcutTupleFields.ComponentRef, value);
59 } 57 }
60 58
61 public string Component_ 59 public string DirectoryRef
62 { 60 {
63 get => this.Fields[(int)WixInternetShortcutTupleFields.Component_].AsString(); 61 get => this.Fields[(int)WixInternetShortcutTupleFields.DirectoryRef].AsString();
64 set => this.Set((int)WixInternetShortcutTupleFields.Component_, value); 62 set => this.Set((int)WixInternetShortcutTupleFields.DirectoryRef, value);
65 }
66
67 public string Directory_
68 {
69 get => this.Fields[(int)WixInternetShortcutTupleFields.Directory_].AsString();
70 set => this.Set((int)WixInternetShortcutTupleFields.Directory_, value);
71 } 63 }
72 64
73 public string Name 65 public string Name
diff --git a/src/wixext/Tuples/WixRemoveFolderExTuple.cs b/src/wixext/Tuples/WixRemoveFolderExTuple.cs
index 35e22e2d..d43c59c3 100644
--- a/src/wixext/Tuples/WixRemoveFolderExTuple.cs
+++ b/src/wixext/Tuples/WixRemoveFolderExTuple.cs
@@ -11,8 +11,7 @@ namespace WixToolset.Util
11 UtilTupleDefinitionType.WixRemoveFolderEx.ToString(), 11 UtilTupleDefinitionType.WixRemoveFolderEx.ToString(),
12 new[] 12 new[]
13 { 13 {
14 new IntermediateFieldDefinition(nameof(WixRemoveFolderExTupleFields.WixRemoveFolderEx), IntermediateFieldType.String), 14 new IntermediateFieldDefinition(nameof(WixRemoveFolderExTupleFields.ComponentRef), IntermediateFieldType.String),
15 new IntermediateFieldDefinition(nameof(WixRemoveFolderExTupleFields.Component_), IntermediateFieldType.String),
16 new IntermediateFieldDefinition(nameof(WixRemoveFolderExTupleFields.Property), IntermediateFieldType.String), 15 new IntermediateFieldDefinition(nameof(WixRemoveFolderExTupleFields.Property), IntermediateFieldType.String),
17 new IntermediateFieldDefinition(nameof(WixRemoveFolderExTupleFields.InstallMode), IntermediateFieldType.Number), 16 new IntermediateFieldDefinition(nameof(WixRemoveFolderExTupleFields.InstallMode), IntermediateFieldType.Number),
18 }, 17 },
@@ -26,8 +25,7 @@ namespace WixToolset.Util.Tuples
26 25
27 public enum WixRemoveFolderExTupleFields 26 public enum WixRemoveFolderExTupleFields
28 { 27 {
29 WixRemoveFolderEx, 28 ComponentRef,
30 Component_,
31 Property, 29 Property,
32 InstallMode, 30 InstallMode,
33 } 31 }
@@ -44,16 +42,10 @@ namespace WixToolset.Util.Tuples
44 42
45 public IntermediateField this[WixRemoveFolderExTupleFields index] => this.Fields[(int)index]; 43 public IntermediateField this[WixRemoveFolderExTupleFields index] => this.Fields[(int)index];
46 44
47 public string WixRemoveFolderEx 45 public string ComponentRef
48 { 46 {
49 get => this.Fields[(int)WixRemoveFolderExTupleFields.WixRemoveFolderEx].AsString(); 47 get => this.Fields[(int)WixRemoveFolderExTupleFields.ComponentRef].AsString();
50 set => this.Set((int)WixRemoveFolderExTupleFields.WixRemoveFolderEx, value); 48 set => this.Set((int)WixRemoveFolderExTupleFields.ComponentRef, value);
51 }
52
53 public string Component_
54 {
55 get => this.Fields[(int)WixRemoveFolderExTupleFields.Component_].AsString();
56 set => this.Set((int)WixRemoveFolderExTupleFields.Component_, value);
57 } 49 }
58 50
59 public string Property 51 public string Property
diff --git a/src/wixext/Tuples/WixRestartResourceTuple.cs b/src/wixext/Tuples/WixRestartResourceTuple.cs
index 828d9d15..92091c3d 100644
--- a/src/wixext/Tuples/WixRestartResourceTuple.cs
+++ b/src/wixext/Tuples/WixRestartResourceTuple.cs
@@ -11,8 +11,7 @@ namespace WixToolset.Util
11 UtilTupleDefinitionType.WixRestartResource.ToString(), 11 UtilTupleDefinitionType.WixRestartResource.ToString(),
12 new[] 12 new[]
13 { 13 {
14 new IntermediateFieldDefinition(nameof(WixRestartResourceTupleFields.WixRestartResource), IntermediateFieldType.String), 14 new IntermediateFieldDefinition(nameof(WixRestartResourceTupleFields.ComponentRef), IntermediateFieldType.String),
15 new IntermediateFieldDefinition(nameof(WixRestartResourceTupleFields.Component_), IntermediateFieldType.String),
16 new IntermediateFieldDefinition(nameof(WixRestartResourceTupleFields.Resource), IntermediateFieldType.String), 15 new IntermediateFieldDefinition(nameof(WixRestartResourceTupleFields.Resource), IntermediateFieldType.String),
17 new IntermediateFieldDefinition(nameof(WixRestartResourceTupleFields.Attributes), IntermediateFieldType.Number), 16 new IntermediateFieldDefinition(nameof(WixRestartResourceTupleFields.Attributes), IntermediateFieldType.Number),
18 }, 17 },
@@ -26,8 +25,7 @@ namespace WixToolset.Util.Tuples
26 25
27 public enum WixRestartResourceTupleFields 26 public enum WixRestartResourceTupleFields
28 { 27 {
29 WixRestartResource, 28 ComponentRef,
30 Component_,
31 Resource, 29 Resource,
32 Attributes, 30 Attributes,
33 } 31 }
@@ -44,16 +42,10 @@ namespace WixToolset.Util.Tuples
44 42
45 public IntermediateField this[WixRestartResourceTupleFields index] => this.Fields[(int)index]; 43 public IntermediateField this[WixRestartResourceTupleFields index] => this.Fields[(int)index];
46 44
47 public string WixRestartResource 45 public string ComponentRef
48 { 46 {
49 get => this.Fields[(int)WixRestartResourceTupleFields.WixRestartResource].AsString(); 47 get => this.Fields[(int)WixRestartResourceTupleFields.ComponentRef].AsString();
50 set => this.Set((int)WixRestartResourceTupleFields.WixRestartResource, value); 48 set => this.Set((int)WixRestartResourceTupleFields.ComponentRef, value);
51 }
52
53 public string Component_
54 {
55 get => this.Fields[(int)WixRestartResourceTupleFields.Component_].AsString();
56 set => this.Set((int)WixRestartResourceTupleFields.Component_, value);
57 } 49 }
58 50
59 public string Resource 51 public string Resource
diff --git a/src/wixext/Tuples/WixTouchFileTuple.cs b/src/wixext/Tuples/WixTouchFileTuple.cs
index f87f396e..0a152dec 100644
--- a/src/wixext/Tuples/WixTouchFileTuple.cs
+++ b/src/wixext/Tuples/WixTouchFileTuple.cs
@@ -11,8 +11,7 @@ namespace WixToolset.Util
11 UtilTupleDefinitionType.WixTouchFile.ToString(), 11 UtilTupleDefinitionType.WixTouchFile.ToString(),
12 new[] 12 new[]
13 { 13 {
14 new IntermediateFieldDefinition(nameof(WixTouchFileTupleFields.WixTouchFile), IntermediateFieldType.String), 14 new IntermediateFieldDefinition(nameof(WixTouchFileTupleFields.ComponentRef), IntermediateFieldType.String),
15 new IntermediateFieldDefinition(nameof(WixTouchFileTupleFields.Component_), IntermediateFieldType.String),
16 new IntermediateFieldDefinition(nameof(WixTouchFileTupleFields.Path), IntermediateFieldType.String), 15 new IntermediateFieldDefinition(nameof(WixTouchFileTupleFields.Path), IntermediateFieldType.String),
17 new IntermediateFieldDefinition(nameof(WixTouchFileTupleFields.Attributes), IntermediateFieldType.Number), 16 new IntermediateFieldDefinition(nameof(WixTouchFileTupleFields.Attributes), IntermediateFieldType.Number),
18 }, 17 },
@@ -26,8 +25,7 @@ namespace WixToolset.Util.Tuples
26 25
27 public enum WixTouchFileTupleFields 26 public enum WixTouchFileTupleFields
28 { 27 {
29 WixTouchFile, 28 ComponentRef,
30 Component_,
31 Path, 29 Path,
32 Attributes, 30 Attributes,
33 } 31 }
@@ -44,16 +42,10 @@ namespace WixToolset.Util.Tuples
44 42
45 public IntermediateField this[WixTouchFileTupleFields index] => this.Fields[(int)index]; 43 public IntermediateField this[WixTouchFileTupleFields index] => this.Fields[(int)index];
46 44
47 public string WixTouchFile 45 public string ComponentRef
48 { 46 {
49 get => this.Fields[(int)WixTouchFileTupleFields.WixTouchFile].AsString(); 47 get => this.Fields[(int)WixTouchFileTupleFields.ComponentRef].AsString();
50 set => this.Set((int)WixTouchFileTupleFields.WixTouchFile, value); 48 set => this.Set((int)WixTouchFileTupleFields.ComponentRef, value);
51 }
52
53 public string Component_
54 {
55 get => this.Fields[(int)WixTouchFileTupleFields.Component_].AsString();
56 set => this.Set((int)WixTouchFileTupleFields.Component_, value);
57 } 49 }
58 50
59 public string Path 51 public string Path
diff --git a/src/wixext/Tuples/XmlConfigTuple.cs b/src/wixext/Tuples/XmlConfigTuple.cs
index 093299b2..0eb49cac 100644
--- a/src/wixext/Tuples/XmlConfigTuple.cs
+++ b/src/wixext/Tuples/XmlConfigTuple.cs
@@ -11,14 +11,13 @@ namespace WixToolset.Util
11 UtilTupleDefinitionType.XmlConfig.ToString(), 11 UtilTupleDefinitionType.XmlConfig.ToString(),
12 new[] 12 new[]
13 { 13 {
14 new IntermediateFieldDefinition(nameof(XmlConfigTupleFields.XmlConfig), IntermediateFieldType.String),
15 new IntermediateFieldDefinition(nameof(XmlConfigTupleFields.File), IntermediateFieldType.String), 14 new IntermediateFieldDefinition(nameof(XmlConfigTupleFields.File), IntermediateFieldType.String),
16 new IntermediateFieldDefinition(nameof(XmlConfigTupleFields.ElementPath), IntermediateFieldType.String), 15 new IntermediateFieldDefinition(nameof(XmlConfigTupleFields.ElementPath), IntermediateFieldType.String),
17 new IntermediateFieldDefinition(nameof(XmlConfigTupleFields.VerifyPath), IntermediateFieldType.String), 16 new IntermediateFieldDefinition(nameof(XmlConfigTupleFields.VerifyPath), IntermediateFieldType.String),
18 new IntermediateFieldDefinition(nameof(XmlConfigTupleFields.Name), IntermediateFieldType.String), 17 new IntermediateFieldDefinition(nameof(XmlConfigTupleFields.Name), IntermediateFieldType.String),
19 new IntermediateFieldDefinition(nameof(XmlConfigTupleFields.Value), IntermediateFieldType.String), 18 new IntermediateFieldDefinition(nameof(XmlConfigTupleFields.Value), IntermediateFieldType.String),
20 new IntermediateFieldDefinition(nameof(XmlConfigTupleFields.Flags), IntermediateFieldType.Number), 19 new IntermediateFieldDefinition(nameof(XmlConfigTupleFields.Flags), IntermediateFieldType.Number),
21 new IntermediateFieldDefinition(nameof(XmlConfigTupleFields.Component_), IntermediateFieldType.String), 20 new IntermediateFieldDefinition(nameof(XmlConfigTupleFields.ComponentRef), IntermediateFieldType.String),
22 new IntermediateFieldDefinition(nameof(XmlConfigTupleFields.Sequence), IntermediateFieldType.Number), 21 new IntermediateFieldDefinition(nameof(XmlConfigTupleFields.Sequence), IntermediateFieldType.Number),
23 }, 22 },
24 typeof(XmlConfigTuple)); 23 typeof(XmlConfigTuple));
@@ -31,14 +30,13 @@ namespace WixToolset.Util.Tuples
31 30
32 public enum XmlConfigTupleFields 31 public enum XmlConfigTupleFields
33 { 32 {
34 XmlConfig,
35 File, 33 File,
36 ElementPath, 34 ElementPath,
37 VerifyPath, 35 VerifyPath,
38 Name, 36 Name,
39 Value, 37 Value,
40 Flags, 38 Flags,
41 Component_, 39 ComponentRef,
42 Sequence, 40 Sequence,
43 } 41 }
44 42
@@ -54,12 +52,6 @@ namespace WixToolset.Util.Tuples
54 52
55 public IntermediateField this[XmlConfigTupleFields index] => this.Fields[(int)index]; 53 public IntermediateField this[XmlConfigTupleFields index] => this.Fields[(int)index];
56 54
57 public string XmlConfig
58 {
59 get => this.Fields[(int)XmlConfigTupleFields.XmlConfig].AsString();
60 set => this.Set((int)XmlConfigTupleFields.XmlConfig, value);
61 }
62
63 public string File 55 public string File
64 { 56 {
65 get => this.Fields[(int)XmlConfigTupleFields.File].AsString(); 57 get => this.Fields[(int)XmlConfigTupleFields.File].AsString();
@@ -96,10 +88,10 @@ namespace WixToolset.Util.Tuples
96 set => this.Set((int)XmlConfigTupleFields.Flags, value); 88 set => this.Set((int)XmlConfigTupleFields.Flags, value);
97 } 89 }
98 90
99 public string Component_ 91 public string ComponentRef
100 { 92 {
101 get => this.Fields[(int)XmlConfigTupleFields.Component_].AsString(); 93 get => this.Fields[(int)XmlConfigTupleFields.ComponentRef].AsString();
102 set => this.Set((int)XmlConfigTupleFields.Component_, value); 94 set => this.Set((int)XmlConfigTupleFields.ComponentRef, value);
103 } 95 }
104 96
105 public int Sequence 97 public int Sequence
diff --git a/src/wixext/Tuples/XmlFileTuple.cs b/src/wixext/Tuples/XmlFileTuple.cs
index 27ea7119..e0b3bbd7 100644
--- a/src/wixext/Tuples/XmlFileTuple.cs
+++ b/src/wixext/Tuples/XmlFileTuple.cs
@@ -11,13 +11,12 @@ namespace WixToolset.Util
11 UtilTupleDefinitionType.XmlFile.ToString(), 11 UtilTupleDefinitionType.XmlFile.ToString(),
12 new[] 12 new[]
13 { 13 {
14 new IntermediateFieldDefinition(nameof(XmlFileTupleFields.XmlFile), IntermediateFieldType.String),
15 new IntermediateFieldDefinition(nameof(XmlFileTupleFields.File), IntermediateFieldType.String), 14 new IntermediateFieldDefinition(nameof(XmlFileTupleFields.File), IntermediateFieldType.String),
16 new IntermediateFieldDefinition(nameof(XmlFileTupleFields.ElementPath), IntermediateFieldType.String), 15 new IntermediateFieldDefinition(nameof(XmlFileTupleFields.ElementPath), IntermediateFieldType.String),
17 new IntermediateFieldDefinition(nameof(XmlFileTupleFields.Name), IntermediateFieldType.String), 16 new IntermediateFieldDefinition(nameof(XmlFileTupleFields.Name), IntermediateFieldType.String),
18 new IntermediateFieldDefinition(nameof(XmlFileTupleFields.Value), IntermediateFieldType.String), 17 new IntermediateFieldDefinition(nameof(XmlFileTupleFields.Value), IntermediateFieldType.String),
19 new IntermediateFieldDefinition(nameof(XmlFileTupleFields.Flags), IntermediateFieldType.Number), 18 new IntermediateFieldDefinition(nameof(XmlFileTupleFields.Flags), IntermediateFieldType.Number),
20 new IntermediateFieldDefinition(nameof(XmlFileTupleFields.Component_), IntermediateFieldType.String), 19 new IntermediateFieldDefinition(nameof(XmlFileTupleFields.ComponentRef), IntermediateFieldType.String),
21 new IntermediateFieldDefinition(nameof(XmlFileTupleFields.Sequence), IntermediateFieldType.Number), 20 new IntermediateFieldDefinition(nameof(XmlFileTupleFields.Sequence), IntermediateFieldType.Number),
22 }, 21 },
23 typeof(XmlFileTuple)); 22 typeof(XmlFileTuple));
@@ -30,13 +29,12 @@ namespace WixToolset.Util.Tuples
30 29
31 public enum XmlFileTupleFields 30 public enum XmlFileTupleFields
32 { 31 {
33 XmlFile,
34 File, 32 File,
35 ElementPath, 33 ElementPath,
36 Name, 34 Name,
37 Value, 35 Value,
38 Flags, 36 Flags,
39 Component_, 37 ComponentRef,
40 Sequence, 38 Sequence,
41 } 39 }
42 40
@@ -52,12 +50,6 @@ namespace WixToolset.Util.Tuples
52 50
53 public IntermediateField this[XmlFileTupleFields index] => this.Fields[(int)index]; 51 public IntermediateField this[XmlFileTupleFields index] => this.Fields[(int)index];
54 52
55 public string XmlFile
56 {
57 get => this.Fields[(int)XmlFileTupleFields.XmlFile].AsString();
58 set => this.Set((int)XmlFileTupleFields.XmlFile, value);
59 }
60
61 public string File 53 public string File
62 { 54 {
63 get => this.Fields[(int)XmlFileTupleFields.File].AsString(); 55 get => this.Fields[(int)XmlFileTupleFields.File].AsString();
@@ -88,10 +80,10 @@ namespace WixToolset.Util.Tuples
88 set => this.Set((int)XmlFileTupleFields.Flags, value); 80 set => this.Set((int)XmlFileTupleFields.Flags, value);
89 } 81 }
90 82
91 public string Component_ 83 public string ComponentRef
92 { 84 {
93 get => this.Fields[(int)XmlFileTupleFields.Component_].AsString(); 85 get => this.Fields[(int)XmlFileTupleFields.ComponentRef].AsString();
94 set => this.Set((int)XmlFileTupleFields.Component_, value); 86 set => this.Set((int)XmlFileTupleFields.ComponentRef, value);
95 } 87 }
96 88
97 public int Sequence 89 public int Sequence
diff --git a/src/wixext/UtilCompiler.cs b/src/wixext/UtilCompiler.cs
index 19f4af06..a8d59ca3 100644
--- a/src/wixext/UtilCompiler.cs
+++ b/src/wixext/UtilCompiler.cs
@@ -14,6 +14,7 @@ namespace WixToolset.Util
14 using WixToolset.Data.Tuples; 14 using WixToolset.Data.Tuples;
15 using WixToolset.Extensibility; 15 using WixToolset.Extensibility;
16 using WixToolset.Extensibility.Data; 16 using WixToolset.Extensibility.Data;
17 using WixToolset.Util.Tuples;
17 18
18 /// <summary> 19 /// <summary>
19 /// The compiler for the WiX Toolset Utility Extension. 20 /// The compiler for the WiX Toolset Utility Extension.
@@ -790,38 +791,32 @@ namespace WixToolset.Util
790 791
791 this.ParseHelper.ParseForExtensionElements(this.Context.Extensions, intermediate, section, element); 792 this.ParseHelper.ParseForExtensionElements(this.Context.Extensions, intermediate, section, element);
792 793
793 // Reference CustomAction since nothing will happen without it 794 this.ParseHelper.CreateCustomActionReference(sourceLineNumbers, section, "CloseApplications", this.Context.Platform, CustomActionPlatforms.ARM | CustomActionPlatforms.X86);
794 if (this.Context.Platform == Platform.ARM)
795 {
796 // Ensure ARM version of the CA is referenced
797 this.ParseHelper.CreateSimpleReference(section, sourceLineNumbers, "CustomAction", "WixCloseApplications_ARM");
798 }
799 else
800 {
801 // All other supported platforms use x86
802 this.ParseHelper.CreateSimpleReference(section, sourceLineNumbers, "CustomAction", "WixCloseApplications");
803 }
804 795
805 if (!this.Messaging.EncounteredError) 796 if (!this.Messaging.EncounteredError)
806 { 797 {
807 var row = this.ParseHelper.CreateTuple(section, sourceLineNumbers, "WixCloseApplication", id); 798 var tuple = new WixCloseApplicationTuple(sourceLineNumbers, id)
808 row.Set(1, target); 799 {
809 row.Set(2, description); 800 Target = target,
810 row.Set(3, condition); 801 Description = description,
811 row.Set(4, attributes); 802 Condition = condition,
803 Attributes = attributes,
804 Property = property,
805 };
812 if (CompilerConstants.IntegerNotSet != sequence) 806 if (CompilerConstants.IntegerNotSet != sequence)
813 { 807 {
814 row.Set(5, sequence); 808 tuple.Sequence = sequence;
815 } 809 }
816 row.Set(6, property);
817 if (CompilerConstants.IntegerNotSet != terminateExitCode) 810 if (CompilerConstants.IntegerNotSet != terminateExitCode)
818 { 811 {
819 row.Set(7, terminateExitCode); 812 tuple.TerminateExitCode = terminateExitCode;
820 } 813 }
821 if (CompilerConstants.IntegerNotSet != timeout) 814 if (CompilerConstants.IntegerNotSet != timeout)
822 { 815 {
823 row.Set(8, timeout * 1000); // make the timeout milliseconds in the table. 816 tuple.Timeout = timeout * 1000; // make the timeout milliseconds in the table.
824 } 817 }
818
819 section.Tuples.Add(tuple);
825 } 820 }
826 } 821 }
827 822
@@ -1096,7 +1091,7 @@ namespace WixToolset.Util
1096 SourceLineNumber sourceLineNumbers = this.ParseHelper.GetSourceLineNumbers(element); 1091 SourceLineNumber sourceLineNumbers = this.ParseHelper.GetSourceLineNumbers(element);
1097 string description = null; 1092 string description = null;
1098 string name = null; 1093 string name = null;
1099 string id = null; 1094 Identifier id = null;
1100 1095
1101 foreach (XAttribute attrib in element.Attributes()) 1096 foreach (XAttribute attrib in element.Attributes())
1102 { 1097 {
@@ -1105,7 +1100,7 @@ namespace WixToolset.Util
1105 switch (attrib.Name.LocalName) 1100 switch (attrib.Name.LocalName)
1106 { 1101 {
1107 case "Id": 1102 case "Id":
1108 id = this.ParseHelper.GetAttributeIdentifierValue(sourceLineNumbers, attrib); 1103 id = this.ParseHelper.GetAttributeIdentifier(sourceLineNumbers, attrib);
1109 break; 1104 break;
1110 case "Name": 1105 case "Name":
1111 name = this.ParseHelper.GetAttributeValue(sourceLineNumbers, attrib); 1106 name = this.ParseHelper.GetAttributeValue(sourceLineNumbers, attrib);
@@ -1159,28 +1154,20 @@ namespace WixToolset.Util
1159 } 1154 }
1160 } 1155 }
1161 1156
1162 // Reference ConfigureSmbInstall and ConfigureSmbUninstall since nothing will happen without it 1157 this.ParseHelper.CreateCustomActionReference(sourceLineNumbers, section, "ConfigureSmbInstall", this.Context.Platform, CustomActionPlatforms.ARM | CustomActionPlatforms.X86);
1163 if (this.Context.Platform == Platform.ARM) 1158 this.ParseHelper.CreateCustomActionReference(sourceLineNumbers, section, "ConfigureSmbUninstall", this.Context.Platform, CustomActionPlatforms.ARM | CustomActionPlatforms.X86);
1164 {
1165 // Ensure ARM version of the CA is referenced
1166 this.ParseHelper.CreateSimpleReference(section, sourceLineNumbers, "CustomAction", "ConfigureSmbInstall_ARM");
1167 this.ParseHelper.CreateSimpleReference(section, sourceLineNumbers, "CustomAction", "ConfigureSmbUninstall_ARM");
1168 }
1169 else
1170 {
1171 // All other supported platforms use x86
1172 this.ParseHelper.CreateSimpleReference(section, sourceLineNumbers, "CustomAction", "ConfigureSmbInstall");
1173 this.ParseHelper.CreateSimpleReference(section, sourceLineNumbers, "CustomAction", "ConfigureSmbUninstall");
1174 }
1175 1159
1176 if (!this.Messaging.EncounteredError) 1160 if (!this.Messaging.EncounteredError)
1177 { 1161 {
1178 var row = this.ParseHelper.CreateTuple(section, sourceLineNumbers, "FileShare"); 1162 var tuple = new FileShareTuple(sourceLineNumbers, id)
1179 row.Set(0, id); 1163 {
1180 row.Set(1, name); 1164 ShareName = name,
1181 row.Set(2, componentId); 1165 ComponentRef = componentId,
1182 row.Set(3, description); 1166 Description = description,
1183 row.Set(4, directoryId); 1167 DirectoryRef = directoryId,
1168 };
1169
1170 section.Tuples.Add(tuple);
1184 } 1171 }
1185 } 1172 }
1186 1173
@@ -1189,7 +1176,7 @@ namespace WixToolset.Util
1189 /// </summary> 1176 /// </summary>
1190 /// <param name="element">Element to parse.</param> 1177 /// <param name="element">Element to parse.</param>
1191 /// <param name="fileShareId">The identifier of the parent FileShare element.</param> 1178 /// <param name="fileShareId">The identifier of the parent FileShare element.</param>
1192 private void ParseFileSharePermissionElement(Intermediate intermediate, IntermediateSection section, XElement element, string fileShareId) 1179 private void ParseFileSharePermissionElement(Intermediate intermediate, IntermediateSection section, XElement element, Identifier fileShareId)
1193 { 1180 {
1194 SourceLineNumber sourceLineNumbers = this.ParseHelper.GetSourceLineNumbers(element); 1181 SourceLineNumber sourceLineNumbers = this.ParseHelper.GetSourceLineNumbers(element);
1195 BitArray bits = new BitArray(32); 1182 BitArray bits = new BitArray(32);
@@ -1244,10 +1231,14 @@ namespace WixToolset.Util
1244 1231
1245 if (!this.Messaging.EncounteredError) 1232 if (!this.Messaging.EncounteredError)
1246 { 1233 {
1247 var row = this.ParseHelper.CreateTuple(section, sourceLineNumbers, "FileSharePermissions"); 1234 var tuple = new FileSharePermissionsTuple(sourceLineNumbers)
1248 row.Set(0, fileShareId); 1235 {
1249 row.Set(1, user); 1236 FileShareRef = fileShareId.Id,
1250 row.Set(2, permission); 1237 UserRef = user,
1238 Permissions = permission,
1239 };
1240
1241 section.Tuples.Add(tuple);
1251 } 1242 }
1252 } 1243 }
1253 1244
@@ -1259,7 +1250,7 @@ namespace WixToolset.Util
1259 private void ParseGroupElement(Intermediate intermediate, IntermediateSection section, XElement element, string componentId) 1250 private void ParseGroupElement(Intermediate intermediate, IntermediateSection section, XElement element, string componentId)
1260 { 1251 {
1261 SourceLineNumber sourceLineNumbers = this.ParseHelper.GetSourceLineNumbers(element); 1252 SourceLineNumber sourceLineNumbers = this.ParseHelper.GetSourceLineNumbers(element);
1262 string id = null; 1253 Identifier id = null;
1263 string domain = null; 1254 string domain = null;
1264 string name = null; 1255 string name = null;
1265 1256
@@ -1270,7 +1261,7 @@ namespace WixToolset.Util
1270 switch (attrib.Name.LocalName) 1261 switch (attrib.Name.LocalName)
1271 { 1262 {
1272 case "Id": 1263 case "Id":
1273 id = this.ParseHelper.GetAttributeIdentifierValue(sourceLineNumbers, attrib); 1264 id = this.ParseHelper.GetAttributeIdentifier(sourceLineNumbers, attrib);
1274 break; 1265 break;
1275 case "Name": 1266 case "Name":
1276 name = this.ParseHelper.GetAttributeValue(sourceLineNumbers, attrib); 1267 name = this.ParseHelper.GetAttributeValue(sourceLineNumbers, attrib);
@@ -1298,11 +1289,14 @@ namespace WixToolset.Util
1298 1289
1299 if (!this.Messaging.EncounteredError) 1290 if (!this.Messaging.EncounteredError)
1300 { 1291 {
1301 var row = this.ParseHelper.CreateTuple(section, sourceLineNumbers, "Group"); 1292 var tuple = new GroupTuple(sourceLineNumbers, id)
1302 row.Set(0, id); 1293 {
1303 row.Set(1, componentId); 1294 ComponentRef = componentId,
1304 row.Set(2, name); 1295 Name = name,
1305 row.Set(3, domain); 1296 Domain = domain,
1297 };
1298
1299 section.Tuples.Add(tuple);
1306 } 1300 }
1307 } 1301 }
1308 1302
@@ -1341,9 +1335,13 @@ namespace WixToolset.Util
1341 1335
1342 if (!this.Messaging.EncounteredError) 1336 if (!this.Messaging.EncounteredError)
1343 { 1337 {
1344 var row = this.ParseHelper.CreateTuple(section, sourceLineNumbers, "UserGroup"); 1338 var tuple = new UserGroupTuple(sourceLineNumbers)
1345 row.Set(0, userId); 1339 {
1346 row.Set(1, groupId); 1340 UserRef = userId,
1341 GroupRef = groupId,
1342 };
1343
1344 section.Tuples.Add(tuple);
1347 } 1345 }
1348 } 1346 }
1349 1347
@@ -1356,7 +1354,7 @@ namespace WixToolset.Util
1356 private void ParseInternetShortcutElement(Intermediate intermediate, IntermediateSection section, XElement element, string componentId, string defaultTarget) 1354 private void ParseInternetShortcutElement(Intermediate intermediate, IntermediateSection section, XElement element, string componentId, string defaultTarget)
1357 { 1355 {
1358 SourceLineNumber sourceLineNumbers = this.ParseHelper.GetSourceLineNumbers(element); 1356 SourceLineNumber sourceLineNumbers = this.ParseHelper.GetSourceLineNumbers(element);
1359 string id = null; 1357 Identifier id = null;
1360 string name = null; 1358 string name = null;
1361 string target = null; 1359 string target = null;
1362 string directoryId = null; 1360 string directoryId = null;
@@ -1374,7 +1372,7 @@ namespace WixToolset.Util
1374 directoryId = this.ParseHelper.GetAttributeIdentifierValue(sourceLineNumbers, attrib); 1372 directoryId = this.ParseHelper.GetAttributeIdentifierValue(sourceLineNumbers, attrib);
1375 break; 1373 break;
1376 case "Id": 1374 case "Id":
1377 id = this.ParseHelper.GetAttributeIdentifierValue(sourceLineNumbers, attrib); 1375 id = this.ParseHelper.GetAttributeIdentifier(sourceLineNumbers, attrib);
1378 break; 1376 break;
1379 case "Name": 1377 case "Name":
1380 name = this.ParseHelper.GetAttributeValue(sourceLineNumbers, attrib); 1378 name = this.ParseHelper.GetAttributeValue(sourceLineNumbers, attrib);
@@ -1457,43 +1455,40 @@ namespace WixToolset.Util
1457 /// <param name="id">Identifier of shortcut.</param> 1455 /// <param name="id">Identifier of shortcut.</param>
1458 /// <param name="name">Name of shortcut without extension.</param> 1456 /// <param name="name">Name of shortcut without extension.</param>
1459 /// <param name="target">Target URL of shortcut.</param> 1457 /// <param name="target">Target URL of shortcut.</param>
1460 private void CreateWixInternetShortcut(IntermediateSection section, SourceLineNumber sourceLineNumbers, string componentId, string directoryId, string shortcutId, string name, string target, InternetShortcutType type, string iconFile, int iconIndex) 1458 private void CreateWixInternetShortcut(IntermediateSection section, SourceLineNumber sourceLineNumbers, string componentId, string directoryId, Identifier shortcutId, string name, string target, InternetShortcutType type, string iconFile, int iconIndex)
1461 { 1459 {
1462 // add the appropriate extension based on type of shortcut 1460 // add the appropriate extension based on type of shortcut
1463 name = String.Concat(name, InternetShortcutType.Url == type ? ".url" : ".lnk"); 1461 name = String.Concat(name, InternetShortcutType.Url == type ? ".url" : ".lnk");
1464 1462
1465 var row = this.ParseHelper.CreateTuple(section, sourceLineNumbers, "WixInternetShortcut"); 1463 var tuple = new WixInternetShortcutTuple(sourceLineNumbers, shortcutId)
1466 row.Set(0, shortcutId);
1467 row.Set(1, componentId);
1468 row.Set(2, directoryId);
1469 row.Set(3, name);
1470 row.Set(4, target);
1471 row.Set(5, (int)type);
1472 row.Set(6, iconFile);
1473 row.Set(7, iconIndex);
1474
1475 // Reference custom action because nothing will happen without it
1476 if (this.Context.Platform == Platform.ARM)
1477 {
1478 // Ensure ARM version of the CA is referenced
1479 this.ParseHelper.CreateSimpleReference(section, sourceLineNumbers, "CustomAction", "WixSchedInternetShortcuts_ARM");
1480 }
1481 else
1482 { 1464 {
1483 // All other supported platforms use x86 1465 ComponentRef = componentId,
1484 this.ParseHelper.CreateSimpleReference(section, sourceLineNumbers, "CustomAction", "WixSchedInternetShortcuts"); 1466 DirectoryRef = directoryId,
1485 } 1467 Name = name,
1468 Target = target,
1469 Attributes = (int)type,
1470 IconFile = iconFile,
1471 IconIndex = iconIndex,
1472 };
1473
1474 section.Tuples.Add(tuple);
1475
1476 this.ParseHelper.CreateCustomActionReference(sourceLineNumbers, section, "SchedInternetShortcuts", this.Context.Platform, CustomActionPlatforms.ARM | CustomActionPlatforms.X86);
1486 1477
1487 // make sure we have a CreateFolder table so that the immediate CA can add temporary rows to handle installation and uninstallation 1478 // make sure we have a CreateFolder table so that the immediate CA can add temporary rows to handle installation and uninstallation
1488 this.ParseHelper.EnsureTable(section, sourceLineNumbers, "CreateFolder"); 1479 this.ParseHelper.EnsureTable(section, sourceLineNumbers, "CreateFolder");
1489 1480
1490 // use built-in MSI functionality to remove the shortcuts rather than doing so via CA 1481 // use built-in MSI functionality to remove the shortcuts rather than doing so via CA
1491 row = this.ParseHelper.CreateTuple(section, sourceLineNumbers, "RemoveFile"); 1482 var removeFileTuple = new RemoveFileTuple(sourceLineNumbers, shortcutId)
1492 row.Set(0, shortcutId); 1483 {
1493 row.Set(1, componentId); 1484 ComponentRef = componentId,
1494 row.Set(2, this.ParseHelper.IsValidShortFilename(name, false) ? name : String.Concat(this.ParseHelper.CreateShortName(name, true, false, directoryId, name), "|", name)); 1485 DirProperty = directoryId,
1495 row.Set(3, directoryId); 1486 OnUninstall = true,
1496 row.Set(4, 2); // msidbRemoveFileInstallModeOnRemove 1487 // TODO: A better way?
1488 FileName = this.ParseHelper.IsValidShortFilename(name, false) ? name : String.Concat(this.ParseHelper.CreateShortName(name, true, false, directoryId, name), "|", name),
1489 };
1490
1491 section.Tuples.Add(removeFileTuple);
1497 } 1492 }
1498 1493
1499 /// <summary> 1494 /// <summary>
@@ -1504,7 +1499,7 @@ namespace WixToolset.Util
1504 private void ParsePerformanceCategoryElement(Intermediate intermediate, IntermediateSection section, XElement element, string componentId) 1499 private void ParsePerformanceCategoryElement(Intermediate intermediate, IntermediateSection section, XElement element, string componentId)
1505 { 1500 {
1506 SourceLineNumber sourceLineNumbers = this.ParseHelper.GetSourceLineNumbers(element); 1501 SourceLineNumber sourceLineNumbers = this.ParseHelper.GetSourceLineNumbers(element);
1507 string id = null; 1502 Identifier id = null;
1508 string name = null; 1503 string name = null;
1509 string help = null; 1504 string help = null;
1510 YesNoType multiInstance = YesNoType.No; 1505 YesNoType multiInstance = YesNoType.No;
@@ -1537,7 +1532,7 @@ namespace WixToolset.Util
1537 help = this.ParseHelper.GetAttributeValue(sourceLineNumbers, attrib); 1532 help = this.ParseHelper.GetAttributeValue(sourceLineNumbers, attrib);
1538 break; 1533 break;
1539 case "Id": 1534 case "Id":
1540 id = this.ParseHelper.GetAttributeIdentifierValue(sourceLineNumbers, attrib); 1535 id = this.ParseHelper.GetAttributeIdentifier(sourceLineNumbers, attrib);
1541 break; 1536 break;
1542 case "Library": 1537 case "Library":
1543 library = this.ParseHelper.GetAttributeValue(sourceLineNumbers, attrib); 1538 library = this.ParseHelper.GetAttributeValue(sourceLineNumbers, attrib);
@@ -1569,7 +1564,7 @@ namespace WixToolset.Util
1569 1564
1570 if (null == name) 1565 if (null == name)
1571 { 1566 {
1572 name = id; 1567 name = id?.Id;
1573 } 1568 }
1574 1569
1575 // Process the child counter elements. 1570 // Process the child counter elements.
@@ -1641,12 +1636,15 @@ namespace WixToolset.Util
1641 sbSymbolicConstants.AppendFormat("#define LAST_{0}_COUNTER_OFFSET {1}\r\n", objectName, symbolConstantsCounter); 1636 sbSymbolicConstants.AppendFormat("#define LAST_{0}_COUNTER_OFFSET {1}\r\n", objectName, symbolConstantsCounter);
1642 1637
1643 // Add the calculated INI and H strings to the PerformanceCategory table. 1638 // Add the calculated INI and H strings to the PerformanceCategory table.
1644 var row = this.ParseHelper.CreateTuple(section, sourceLineNumbers, "PerformanceCategory"); 1639 var tuple = new PerformanceCategoryTuple(sourceLineNumbers, id)
1645 row.Set(0, id); 1640 {
1646 row.Set(1, componentId); 1641 ComponentRef = componentId,
1647 row.Set(2, name); 1642 Name = name,
1648 row.Set(3, sbIniData.ToString()); 1643 IniData = sbIniData.ToString(),
1649 row.Set(4, sbSymbolicConstants.ToString()); 1644 ConstantData = sbSymbolicConstants.ToString(),
1645 };
1646
1647 section.Tuples.Add(tuple);
1650 1648
1651 // Set up the application's performance key. 1649 // Set up the application's performance key.
1652 string escapedName = UtilCompiler.FindPropertyBrackets.Replace(name, this.EscapeProperties); 1650 string escapedName = UtilCompiler.FindPropertyBrackets.Replace(name, this.EscapeProperties);
@@ -1664,19 +1662,8 @@ namespace WixToolset.Util
1664 this.ParseHelper.CreateRegistryTuple(section, sourceLineNumbers, RegistryRootType.LocalMachine, performanceKey, "Counter Types", sbCounterTypes.ToString(), componentId, false); 1662 this.ParseHelper.CreateRegistryTuple(section, sourceLineNumbers, RegistryRootType.LocalMachine, performanceKey, "Counter Types", sbCounterTypes.ToString(), componentId, false);
1665 } 1663 }
1666 1664
1667 // Reference InstallPerfCounterData and UninstallPerfCounterData since nothing will happen without them 1665 this.ParseHelper.CreateCustomActionReference(sourceLineNumbers, section, "InstallPerfCounterData", this.Context.Platform, CustomActionPlatforms.ARM | CustomActionPlatforms.X86);
1668 if (this.Context.Platform == Platform.ARM) 1666 this.ParseHelper.CreateCustomActionReference(sourceLineNumbers, section, "UninstallPerfCounterData", this.Context.Platform, CustomActionPlatforms.ARM | CustomActionPlatforms.X86);
1669 {
1670 // Ensure ARM version of the CAs are referenced
1671 this.ParseHelper.CreateSimpleReference(section, sourceLineNumbers, "CustomAction", "InstallPerfCounterData_ARM");
1672 this.ParseHelper.CreateSimpleReference(section, sourceLineNumbers, "CustomAction", "UninstallPerfCounterData_ARM");
1673 }
1674 else
1675 {
1676 // All other supported platforms use x86
1677 this.ParseHelper.CreateSimpleReference(section, sourceLineNumbers, "CustomAction", "InstallPerfCounterData");
1678 this.ParseHelper.CreateSimpleReference(section, sourceLineNumbers, "CustomAction", "UninstallPerfCounterData");
1679 }
1680 } 1667 }
1681 1668
1682 /// <summary> 1669 /// <summary>
@@ -2146,25 +2133,18 @@ namespace WixToolset.Util
2146 2133
2147 if (!this.Messaging.EncounteredError) 2134 if (!this.Messaging.EncounteredError)
2148 { 2135 {
2149 var row = this.ParseHelper.CreateTuple(section, sourceLineNumbers, "Perfmon"); 2136 var tuple = new PerfmonTuple(sourceLineNumbers)
2150 row.Set(0, componentId); 2137 {
2151 row.Set(1, $"[#{fileId}]"); 2138 ComponentRef = componentId,
2152 row.Set(2, name); 2139 File = $"[#{fileId}]",
2153 } 2140 Name = name,
2141 };
2154 2142
2155 // Reference ConfigurePerfmonInstall and ConfigurePerfmonUninstall since nothing will happen without them 2143 section.Tuples.Add(tuple);
2156 if (this.Context.Platform == Platform.ARM)
2157 {
2158 // Ensure ARM version of the CAs are referenced
2159 this.ParseHelper.CreateSimpleReference(section, sourceLineNumbers, "CustomAction", "ConfigurePerfmonInstall_ARM");
2160 this.ParseHelper.CreateSimpleReference(section, sourceLineNumbers, "CustomAction", "ConfigurePerfmonUninstall_ARM");
2161 }
2162 else
2163 {
2164 // All other supported platforms use x86
2165 this.ParseHelper.CreateSimpleReference(section, sourceLineNumbers, "CustomAction", "ConfigurePerfmonInstall");
2166 this.ParseHelper.CreateSimpleReference(section, sourceLineNumbers, "CustomAction", "ConfigurePerfmonUninstall");
2167 } 2144 }
2145
2146 this.ParseHelper.CreateCustomActionReference(sourceLineNumbers, section, "ConfigurePerfmonInstall", this.Context.Platform, CustomActionPlatforms.ARM | CustomActionPlatforms.X86);
2147 this.ParseHelper.CreateCustomActionReference(sourceLineNumbers, section, "ConfigurePerfmonUninstall", this.Context.Platform, CustomActionPlatforms.ARM | CustomActionPlatforms.X86);
2168 } 2148 }
2169 2149
2170 2150
@@ -2203,24 +2183,18 @@ namespace WixToolset.Util
2203 2183
2204 if (!this.Messaging.EncounteredError) 2184 if (!this.Messaging.EncounteredError)
2205 { 2185 {
2206 var row = this.ParseHelper.CreateTuple(section, sourceLineNumbers, "PerfmonManifest"); 2186 var tuple = new PerfmonManifestTuple(sourceLineNumbers)
2207 row.Set(0, componentId); 2187 {
2208 row.Set(1, $"[#{fileId}]"); 2188 ComponentRef = componentId,
2209 row.Set(2, resourceFileDirectory); 2189 File = $"[#{fileId}]",
2210 } 2190 ResourceFileDirectory = resourceFileDirectory,
2191 };
2211 2192
2212 if (this.Context.Platform == Platform.ARM) 2193 section.Tuples.Add(tuple);
2213 {
2214 // Ensure ARM version of the CAs are referenced
2215 this.ParseHelper.CreateSimpleReference(section, sourceLineNumbers, "CustomAction", "ConfigurePerfmonManifestRegister_ARM");
2216 this.ParseHelper.CreateSimpleReference(section, sourceLineNumbers, "CustomAction", "ConfigurePerfmonManifestUnregister_ARM");
2217 }
2218 else
2219 {
2220 // All other supported platforms use x86
2221 this.ParseHelper.CreateSimpleReference(section, sourceLineNumbers, "CustomAction", "ConfigurePerfmonManifestRegister");
2222 this.ParseHelper.CreateSimpleReference(section, sourceLineNumbers, "CustomAction", "ConfigurePerfmonManifestUnregister");
2223 } 2194 }
2195
2196 this.ParseHelper.CreateCustomActionReference(sourceLineNumbers, section, "ConfigurePerfmonManifestRegister", this.Context.Platform, CustomActionPlatforms.ARM | CustomActionPlatforms.X86);
2197 this.ParseHelper.CreateCustomActionReference(sourceLineNumbers, section, "ConfigurePerfmonManifestUnregister", this.Context.Platform, CustomActionPlatforms.ARM | CustomActionPlatforms.X86);
2224 } 2198 }
2225 2199
2226 /// <summary> 2200 /// <summary>
@@ -2263,23 +2237,15 @@ namespace WixToolset.Util
2263 2237
2264 if (!this.Messaging.EncounteredError) 2238 if (!this.Messaging.EncounteredError)
2265 { 2239 {
2266 switch (this.Context.Platform) 2240 this.ParseHelper.CreateCustomActionReference(sourceLineNumbers, section, "SchedFormatFiles", this.Context.Platform, CustomActionPlatforms.X64 | CustomActionPlatforms.X86);
2241
2242 var tuple = new WixFormatFilesTuple(sourceLineNumbers)
2267 { 2243 {
2268 case Platform.X86: 2244 BinaryRef = binaryId,
2269 this.ParseHelper.CreateSimpleReference(section, sourceLineNumbers, "CustomAction", "WixSchedFormatFiles"); 2245 FileRef = fileId,
2270 break; 2246 };
2271 case Platform.X64:
2272 this.ParseHelper.CreateSimpleReference(section, sourceLineNumbers, "CustomAction", "WixSchedFormatFiles_x64");
2273 break;
2274 case Platform.IA64:
2275 case Platform.ARM:
2276 this.Messaging.Write(ErrorMessages.UnsupportedPlatformForElement(sourceLineNumbers, this.Context.Platform.ToString(), element.Name.LocalName));
2277 break;
2278 }
2279 2247
2280 var row = this.ParseHelper.CreateTuple(section, sourceLineNumbers, "WixFormatFiles"); 2248 section.Tuples.Add(tuple);
2281 row.Set(0, binaryId);
2282 row.Set(1, fileId);
2283 2249
2284 this.ParseHelper.CreateSimpleReference(section, sourceLineNumbers, "Binary", binaryId); 2250 this.ParseHelper.CreateSimpleReference(section, sourceLineNumbers, "Binary", binaryId);
2285 } 2251 }
@@ -2328,71 +2294,62 @@ namespace WixToolset.Util
2328 2294
2329 if (!this.Messaging.EncounteredError) 2295 if (!this.Messaging.EncounteredError)
2330 { 2296 {
2331 var row = this.ParseHelper.CreateTuple(section, sourceLineNumbers, "EventManifest"); 2297 var tuple = new EventManifestTuple(sourceLineNumbers)
2332 row.Set(0, componentId); 2298 {
2333 row.Set(1, $"[#{fileId}]"); 2299 ComponentRef = componentId,
2300 File = $"[#{fileId}]",
2301 };
2302
2303 section.Tuples.Add(tuple);
2334 2304
2335 if (null != messageFile) 2305 if (null != messageFile)
2336 { 2306 {
2337 var messageRow = this.ParseHelper.CreateTuple(section, sourceLineNumbers, "XmlFile"); 2307 var xmlTuple = new XmlFileTuple(sourceLineNumbers, new Identifier(AccessModifier.Private, $"Config_{fileId}MessageFile"))
2338 messageRow.Set(0, String.Concat("Config_", fileId, "MessageFile")); 2308 {
2339 messageRow.Set(1, $"[#{fileId}]"); 2309 File = $"[#{fileId}]",
2340 messageRow.Set(2, "/*/*/*/*[\\[]@messageFileName[\\]]"); 2310 ElementPath = "/*/*/*/*[\\[]@messageFileName[\\]]",
2341 messageRow.Set(3, "messageFileName"); 2311 Name = "messageFileName",
2342 messageRow.Set(4, messageFile); 2312 Value = messageFile,
2343 messageRow.Set(5, 4 | 0x00001000); //bulk write | preserve modified date 2313 Flags = 4 | 0x00001000, //bulk write | preserve modified date
2344 messageRow.Set(6, componentId); 2314 ComponentRef = componentId,
2315 };
2316 section.Tuples.Add(xmlTuple);
2345 } 2317 }
2346 if (null != parameterFile) 2318 if (null != parameterFile)
2347 { 2319 {
2348 var resourceRow = this.ParseHelper.CreateTuple(section, sourceLineNumbers, "XmlFile"); 2320 var xmlTuple = new XmlFileTuple(sourceLineNumbers, new Identifier(AccessModifier.Private, $"Config_{fileId}ParameterFile"))
2349 resourceRow.Set(0, String.Concat("Config_", fileId, "ParameterFile")); 2321 {
2350 resourceRow.Set(1, $"[#{fileId}]"); 2322 File = $"[#{fileId}]",
2351 resourceRow.Set(2, "/*/*/*/*[\\[]@parameterFileName[\\]]"); 2323 ElementPath = "/*/*/*/*[\\[]@parameterFileName[\\]]",
2352 resourceRow.Set(3, "parameterFileName"); 2324 Name = "parameterFileName",
2353 resourceRow.Set(4, parameterFile); 2325 Value = parameterFile,
2354 resourceRow.Set(5, 4 | 0x00001000); //bulk write | preserve modified date 2326 Flags = 4 | 0x00001000, //bulk write | preserve modified date
2355 resourceRow.Set(6, componentId); 2327 ComponentRef = componentId,
2328 };
2329 section.Tuples.Add(xmlTuple);
2356 } 2330 }
2357 if (null != resourceFile) 2331 if (null != resourceFile)
2358 { 2332 {
2359 var resourceRow = this.ParseHelper.CreateTuple(section, sourceLineNumbers, "XmlFile"); 2333 var xmlTuple = new XmlFileTuple(sourceLineNumbers, new Identifier(AccessModifier.Private, $"Config_{fileId}ResourceFile"))
2360 resourceRow.Set(0, String.Concat("Config_", fileId, "ResourceFile")); 2334 {
2361 resourceRow.Set(1, $"[#{fileId}]"); 2335 File = $"[#{fileId}]",
2362 resourceRow.Set(2, "/*/*/*/*[\\[]@resourceFileName[\\]]"); 2336 ElementPath = "/*/*/*/*[\\[]@resourceFileName[\\]]",
2363 resourceRow.Set(3, "resourceFileName"); 2337 Name = "resourceFileName",
2364 resourceRow.Set(4, resourceFile); 2338 Value = resourceFile,
2365 resourceRow.Set(5, 4 | 0x00001000); //bulk write | preserve modified date 2339 Flags = 4 | 0x00001000, //bulk write | preserve modified date
2366 resourceRow.Set(6, componentId); 2340 ComponentRef = componentId,
2341 };
2342 section.Tuples.Add(xmlTuple);
2367 } 2343 }
2368 2344
2369 } 2345 }
2370 2346
2371 if (this.Context.Platform == Platform.ARM) 2347 this.ParseHelper.CreateCustomActionReference(sourceLineNumbers, section, "ConfigureEventManifestRegister", this.Context.Platform, CustomActionPlatforms.ARM | CustomActionPlatforms.X86);
2372 { 2348 this.ParseHelper.CreateCustomActionReference(sourceLineNumbers, section, "ConfigureEventManifestUnregister", this.Context.Platform, CustomActionPlatforms.ARM | CustomActionPlatforms.X86);
2373 // Ensure ARM version of the CA is referenced
2374 this.ParseHelper.CreateSimpleReference(section, sourceLineNumbers, "CustomAction", "ConfigureEventManifestRegister_ARM");
2375 this.ParseHelper.CreateSimpleReference(section, sourceLineNumbers, "CustomAction", "ConfigureEventManifestUnregister_ARM");
2376 }
2377 else
2378 {
2379 // All other supported platforms use x86
2380 this.ParseHelper.CreateSimpleReference(section, sourceLineNumbers, "CustomAction", "ConfigureEventManifestRegister");
2381 this.ParseHelper.CreateSimpleReference(section, sourceLineNumbers, "CustomAction", "ConfigureEventManifestUnregister");
2382 }
2383 2349
2384 if (null != messageFile || null != parameterFile || null != resourceFile) 2350 if (null != messageFile || null != parameterFile || null != resourceFile)
2385 { 2351 {
2386 if (this.Context.Platform == Platform.ARM) 2352 this.ParseHelper.CreateCustomActionReference(sourceLineNumbers, section, "SchedXmlFile", this.Context.Platform, CustomActionPlatforms.ARM | CustomActionPlatforms.X86);
2387 {
2388 // Ensure ARM version of the CA is referenced
2389 this.ParseHelper.CreateSimpleReference(section, sourceLineNumbers, "CustomAction", "SchedXmlFile_ARM");
2390 }
2391 else
2392 {
2393 // All other supported platforms use x86
2394 this.ParseHelper.CreateSimpleReference(section, sourceLineNumbers, "CustomAction", "SchedXmlFile");
2395 }
2396 } 2353 }
2397 } 2354 }
2398 2355
@@ -2493,36 +2450,18 @@ namespace WixToolset.Util
2493 2450
2494 if (!this.Messaging.EncounteredError) 2451 if (!this.Messaging.EncounteredError)
2495 { 2452 {
2496 if (win64) 2453 this.ParseHelper.CreateCustomActionReference(sourceLineNumbers, section, "SchedSecureObjects", this.Context.Platform, CustomActionPlatforms.ARM | CustomActionPlatforms.X64 | CustomActionPlatforms.X86);
2497 { 2454
2498 if (this.Context.Platform == Platform.IA64) 2455 var tuple = new SecureObjectsTuple(sourceLineNumbers, new Identifier(AccessModifier.Private, objectId))
2499 {
2500 this.Messaging.Write(ErrorMessages.UnsupportedPlatformForElement(sourceLineNumbers, "ia64", element.Name.LocalName));
2501 }
2502 else
2503 {
2504 // Ensure SchedSecureObjects (x64) is referenced
2505 this.ParseHelper.CreateSimpleReference(section, sourceLineNumbers, "CustomAction", "SchedSecureObjects_x64");
2506 }
2507 }
2508 else if (this.Context.Platform == Platform.ARM)
2509 {
2510 // Ensure SchedSecureObjects (arm) is referenced
2511 this.ParseHelper.CreateSimpleReference(section, sourceLineNumbers, "CustomAction", "SchedSecureObjects_ARM");
2512 }
2513 else
2514 { 2456 {
2515 // Ensure SchedSecureObjects (x86) is referenced, to handle this x86 component member 2457 Table = tableName,
2516 this.ParseHelper.CreateSimpleReference(section, sourceLineNumbers, "CustomAction", "SchedSecureObjects"); 2458 Domain = domain,
2517 } 2459 User = user,
2460 Permission = permission,
2461 ComponentRef = componentId,
2462 };
2518 2463
2519 var row = this.ParseHelper.CreateTuple(section, sourceLineNumbers, "SecureObjects"); 2464 section.Tuples.Add(tuple);
2520 row.Set(0, objectId);
2521 row.Set(1, tableName);
2522 row.Set(2, domain);
2523 row.Set(3, user);
2524 row.Set(4, permission);
2525 row.Set(5, componentId);
2526 } 2465 }
2527 } 2466 }
2528 2467
@@ -2881,13 +2820,18 @@ namespace WixToolset.Util
2881 2820
2882 if (!this.Messaging.EncounteredError) 2821 if (!this.Messaging.EncounteredError)
2883 { 2822 {
2884 var row = this.ParseHelper.CreateTuple(section, sourceLineNumbers, "WixRemoveFolderEx", id); 2823 this.ParseHelper.CreateCustomActionReference(sourceLineNumbers, section, "RemoveFoldersEx", this.Context.Platform, CustomActionPlatforms.X86);
2885 row.Set(1, componentId); 2824
2886 row.Set(2, property); 2825 var tuple = new WixRemoveFolderExTuple(sourceLineNumbers)
2887 row.Set(3, on); 2826 {
2827 ComponentRef = componentId,
2828 Property = property,
2829 InstallMode = (int)on,
2830 };
2831
2832 section.Tuples.Add(tuple);
2888 2833
2889 this.ParseHelper.EnsureTable(section, sourceLineNumbers, "RemoveFile"); 2834 this.ParseHelper.EnsureTable(section, sourceLineNumbers, "RemoveFile");
2890 this.ParseHelper.CreateSimpleReference(section, sourceLineNumbers, "CustomAction", "WixRemoveFoldersEx");
2891 } 2835 }
2892 } 2836 }
2893 2837
@@ -2954,22 +2898,16 @@ namespace WixToolset.Util
2954 2898
2955 if (!this.Messaging.EncounteredError) 2899 if (!this.Messaging.EncounteredError)
2956 { 2900 {
2957 // Add a reference to the WixRegisterRestartResources custom action since nothing will happen without it. 2901 this.ParseHelper.CreateCustomActionReference(sourceLineNumbers, section, "RegisterRestartResources", this.Context.Platform, CustomActionPlatforms.ARM | CustomActionPlatforms.X86);
2958 if (this.Context.Platform == Platform.ARM) 2902
2959 { 2903 var tuple = new WixRestartResourceTuple(sourceLineNumbers)
2960 // Ensure ARM version of the CA is referenced
2961 this.ParseHelper.CreateSimpleReference(section, sourceLineNumbers, "CustomAction", "WixRegisterRestartResources_ARM");
2962 }
2963 else
2964 { 2904 {
2965 // All other supported platforms use x86 2905 ComponentRef = componentId,
2966 this.ParseHelper.CreateSimpleReference(section, sourceLineNumbers, "CustomAction", "WixRegisterRestartResources"); 2906 Resource = resource,
2967 } 2907 Attributes = attributes,
2908 };
2968 2909
2969 var row = this.ParseHelper.CreateTuple(section, sourceLineNumbers, "WixRestartResource", id); 2910 section.Tuples.Add(tuple);
2970 row.Set(1, componentId);
2971 row.Set(2, resource);
2972 row.Set(3, attributes);
2973 } 2911 }
2974 } 2912 }
2975 2913
@@ -3052,38 +2990,25 @@ namespace WixToolset.Util
3052 2990
3053 this.ParseHelper.ParseForExtensionElements(this.Context.Extensions, intermediate, section, element); 2991 this.ParseHelper.ParseForExtensionElements(this.Context.Extensions, intermediate, section, element);
3054 2992
3055 // Reference SchedServiceConfig since nothing will happen without it
3056 if (this.Context.Platform == Platform.ARM)
3057 {
3058 // Ensure ARM version of the CA is referenced
3059 this.ParseHelper.CreateSimpleReference(section, sourceLineNumbers, "CustomAction", "SchedServiceConfig_ARM");
3060 }
3061 else
3062 {
3063 // All other supported platforms use x86
3064 this.ParseHelper.CreateSimpleReference(section, sourceLineNumbers, "CustomAction", "SchedServiceConfig");
3065 }
3066
3067 if (!this.Messaging.EncounteredError) 2993 if (!this.Messaging.EncounteredError)
3068 { 2994 {
3069 var row = this.ParseHelper.CreateTuple(section, sourceLineNumbers, "ServiceConfig"); 2995 this.ParseHelper.CreateCustomActionReference(sourceLineNumbers, section, "SchedServiceConfig", this.Context.Platform, CustomActionPlatforms.ARM | CustomActionPlatforms.X86);
3070 row.Set(0, serviceName);
3071 row.Set(1, componentId);
3072 row.Set(2, (newService ? 1 : 0));
3073 row.Set(3, firstFailureActionType);
3074 row.Set(4, secondFailureActionType);
3075 row.Set(5, thirdFailureActionType);
3076 if (CompilerConstants.IntegerNotSet != resetPeriod)
3077 {
3078 row.Set(6, resetPeriod);
3079 }
3080 2996
3081 if (CompilerConstants.IntegerNotSet != restartServiceDelay) 2997 var tuple = new ServiceConfigTuple(sourceLineNumbers)
3082 { 2998 {
3083 row.Set(7, restartServiceDelay); 2999 ServiceName = serviceName,
3084 } 3000 ComponentRef = componentId,
3085 row.Set(8, programCommandLine); 3001 NewService = newService ? 1 : 0,
3086 row.Set(9, rebootMessage); 3002 FirstFailureActionType = firstFailureActionType,
3003 SecondFailureActionType = secondFailureActionType,
3004 ThirdFailureActionType = thirdFailureActionType,
3005 ResetPeriodInDays = resetPeriod,
3006 RestartServiceDelayInSeconds = restartServiceDelay,
3007 ProgramCommandLine = programCommandLine,
3008 RebootMessage = rebootMessage,
3009 };
3010
3011 section.Tuples.Add(tuple);
3087 } 3012 }
3088 } 3013 }
3089 3014
@@ -3166,12 +3091,16 @@ namespace WixToolset.Util
3166 3091
3167 if (!this.Messaging.EncounteredError) 3092 if (!this.Messaging.EncounteredError)
3168 { 3093 {
3169 var row = this.ParseHelper.CreateTuple(section, sourceLineNumbers, "WixTouchFile", id); 3094 var tuple = new WixTouchFileTuple(sourceLineNumbers)
3170 row.Set(1, componentId); 3095 {
3171 row.Set(2, path); 3096 ComponentRef = componentId,
3172 row.Set(3, attributes); 3097 Path = path,
3098 Attributes = attributes,
3099 };
3100
3101 section.Tuples.Add(tuple);
3173 3102
3174 this.ParseHelper.CreateSimpleReference(section, sourceLineNumbers, "CustomAction", "WixTouchFileDuringInstall"); 3103 this.ParseHelper.CreateCustomActionReference(sourceLineNumbers, section, "TouchFileDuringInstall", this.Context.Platform, CustomActionPlatforms.X86);
3175 } 3104 }
3176 } 3105 }
3177 3106
@@ -3375,27 +3304,21 @@ namespace WixToolset.Util
3375 3304
3376 if (null != componentId) 3305 if (null != componentId)
3377 { 3306 {
3378 // Reference ConfigureIIs since nothing will happen without it 3307 this.ParseHelper.CreateCustomActionReference(sourceLineNumbers, section, "ConfigureUsers", this.Context.Platform, CustomActionPlatforms.ARM | CustomActionPlatforms.X86);
3379 if (this.Context.Platform == Platform.ARM)
3380 {
3381 // Ensure ARM version of the CA is referenced
3382 this.ParseHelper.CreateSimpleReference(section, sourceLineNumbers, "CustomAction", "ConfigureUsers_ARM");
3383 }
3384 else
3385 {
3386 // All other supported platforms use x86
3387 this.ParseHelper.CreateSimpleReference(section, sourceLineNumbers, "CustomAction", "ConfigureUsers");
3388 }
3389 } 3308 }
3390 3309
3391 if (!this.Messaging.EncounteredError) 3310 if (!this.Messaging.EncounteredError)
3392 { 3311 {
3393 var row = this.ParseHelper.CreateTuple(section, sourceLineNumbers, "User", id); 3312 var tuple = new UserTuple(sourceLineNumbers, id)
3394 row.Set(1, componentId); 3313 {
3395 row.Set(2, name); 3314 ComponentRef = componentId,
3396 row.Set(3, domain); 3315 Name = name,
3397 row.Set(4, password); 3316 Domain = domain,
3398 row.Set(5, attributes); 3317 Password = password,
3318 Attributes = attributes,
3319 };
3320
3321 section.Tuples.Add(tuple);
3399 } 3322 }
3400 } 3323 }
3401 3324
@@ -3407,7 +3330,7 @@ namespace WixToolset.Util
3407 private void ParseXmlFileElement(Intermediate intermediate, IntermediateSection section, XElement element, string componentId) 3330 private void ParseXmlFileElement(Intermediate intermediate, IntermediateSection section, XElement element, string componentId)
3408 { 3331 {
3409 SourceLineNumber sourceLineNumbers = this.ParseHelper.GetSourceLineNumbers(element); 3332 SourceLineNumber sourceLineNumbers = this.ParseHelper.GetSourceLineNumbers(element);
3410 string id = null; 3333 Identifier id = null;
3411 string file = null; 3334 string file = null;
3412 string elementPath = null; 3335 string elementPath = null;
3413 string name = null; 3336 string name = null;
@@ -3458,7 +3381,7 @@ namespace WixToolset.Util
3458 } 3381 }
3459 break; 3382 break;
3460 case "Id": 3383 case "Id":
3461 id = this.ParseHelper.GetAttributeIdentifierValue(sourceLineNumbers, attrib); 3384 id = this.ParseHelper.GetAttributeIdentifier(sourceLineNumbers, attrib);
3462 break; 3385 break;
3463 case "File": 3386 case "File":
3464 file = this.ParseHelper.GetAttributeValue(sourceLineNumbers, attrib); 3387 file = this.ParseHelper.GetAttributeValue(sourceLineNumbers, attrib);
@@ -3522,31 +3445,23 @@ namespace WixToolset.Util
3522 3445
3523 if (!this.Messaging.EncounteredError) 3446 if (!this.Messaging.EncounteredError)
3524 { 3447 {
3525 var row = this.ParseHelper.CreateTuple(section, sourceLineNumbers, "XmlFile"); 3448 var tuple = new XmlFileTuple(sourceLineNumbers, id)
3526 row.Set(0, id); 3449 {
3527 row.Set(1, file); 3450 File = file,
3528 row.Set(2, elementPath); 3451 ElementPath = elementPath,
3529 row.Set(3, name); 3452 Name = name,
3530 row.Set(4, value); 3453 Value = value,
3531 row.Set(5, flags); 3454 Flags = flags,
3532 row.Set(6, componentId); 3455 ComponentRef = componentId,
3456 };
3533 if (-1 != sequence) 3457 if (-1 != sequence)
3534 { 3458 {
3535 row.Set(7, sequence); 3459 tuple.Sequence = sequence;
3536 } 3460 }
3461 section.Tuples.Add(tuple);
3537 } 3462 }
3538 3463
3539 // Reference SchedXmlFile since nothing will happen without it 3464 this.ParseHelper.CreateCustomActionReference(sourceLineNumbers, section, "SchedXmlFile", this.Context.Platform, CustomActionPlatforms.ARM | CustomActionPlatforms.X86);
3540 if (this.Context.Platform == Platform.ARM)
3541 {
3542 // Ensure ARM version of the CA is referenced
3543 this.ParseHelper.CreateSimpleReference(section, sourceLineNumbers, "CustomAction", "SchedXmlFile_ARM");
3544 }
3545 else
3546 {
3547 // All other supported platforms use x86
3548 this.ParseHelper.CreateSimpleReference(section, sourceLineNumbers, "CustomAction", "SchedXmlFile");
3549 }
3550 } 3465 }
3551 3466
3552 /// <summary> 3467 /// <summary>
@@ -3558,7 +3473,7 @@ namespace WixToolset.Util
3558 private void ParseXmlConfigElement(Intermediate intermediate, IntermediateSection section, XElement element, string componentId, bool nested) 3473 private void ParseXmlConfigElement(Intermediate intermediate, IntermediateSection section, XElement element, string componentId, bool nested)
3559 { 3474 {
3560 SourceLineNumber sourceLineNumbers = this.ParseHelper.GetSourceLineNumbers(element); 3475 SourceLineNumber sourceLineNumbers = this.ParseHelper.GetSourceLineNumbers(element);
3561 string id = null; 3476 Identifier id = null;
3562 string elementId = null; 3477 string elementId = null;
3563 string elementPath = null; 3478 string elementPath = null;
3564 int flags = 0; 3479 int flags = 0;
@@ -3575,7 +3490,7 @@ namespace WixToolset.Util
3575 switch (attrib.Name.LocalName) 3490 switch (attrib.Name.LocalName)
3576 { 3491 {
3577 case "Id": 3492 case "Id":
3578 id = this.ParseHelper.GetAttributeIdentifierValue(sourceLineNumbers, attrib); 3493 id = this.ParseHelper.GetAttributeIdentifier(sourceLineNumbers, attrib);
3579 break; 3494 break;
3580 case "Action": 3495 case "Action":
3581 if (nested) 3496 if (nested)
@@ -3760,32 +3675,24 @@ namespace WixToolset.Util
3760 3675
3761 if (!this.Messaging.EncounteredError) 3676 if (!this.Messaging.EncounteredError)
3762 { 3677 {
3763 var row = this.ParseHelper.CreateTuple(section, sourceLineNumbers, "XmlConfig"); 3678 var tuple = new XmlConfigTuple(sourceLineNumbers, id)
3764 row.Set(0, id); 3679 {
3765 row.Set(1, file); 3680 File=file,
3766 row.Set(2, elementId ?? elementPath); 3681 ElementPath=elementId ??elementPath,
3767 row.Set(3, verifyPath); 3682 VerifyPath=verifyPath,
3768 row.Set(4, name); 3683 Name=name,
3769 row.Set(5, value); 3684 Value=value,
3770 row.Set(6, flags); 3685 Flags=flags,
3771 row.Set(7, componentId); 3686 ComponentRef=componentId,
3687 };
3772 if (CompilerConstants.IntegerNotSet != sequence) 3688 if (CompilerConstants.IntegerNotSet != sequence)
3773 { 3689 {
3774 row.Set(8, sequence); 3690 tuple.Sequence = sequence;
3775 } 3691 }
3692 section.Tuples.Add(tuple);
3776 } 3693 }
3777 3694
3778 // Reference SchedXmlConfig since nothing will happen without it 3695 this.ParseHelper.CreateCustomActionReference(sourceLineNumbers, section, "SchedXmlConfig", this.Context.Platform, CustomActionPlatforms.ARM | CustomActionPlatforms.X86);
3779 if (this.Context.Platform == Platform.ARM)
3780 {
3781 // Ensure ARM version of the CA is referenced
3782 this.ParseHelper.CreateSimpleReference(section, sourceLineNumbers, "CustomAction", "SchedXmlConfig_ARM");
3783 }
3784 else
3785 {
3786 // All other supported platforms use x86
3787 this.ParseHelper.CreateSimpleReference(section, sourceLineNumbers, "CustomAction", "SchedXmlConfig");
3788 }
3789 } 3696 }
3790 3697
3791 /// <summary> 3698 /// <summary>
diff --git a/src/wixext/UtilWindowsInstallerBackendExtension.cs b/src/wixext/UtilWindowsInstallerBackendExtension.cs
index 2365ed01..8648cb17 100644
--- a/src/wixext/UtilWindowsInstallerBackendExtension.cs
+++ b/src/wixext/UtilWindowsInstallerBackendExtension.cs
@@ -5,6 +5,7 @@ namespace WixToolset.Util
5 using System.Collections.Generic; 5 using System.Collections.Generic;
6 using System.Linq; 6 using System.Linq;
7 using System.Xml; 7 using System.Xml;
8 using WixToolset.Data;
8 using WixToolset.Data.WindowsInstaller; 9 using WixToolset.Data.WindowsInstaller;
9 using WixToolset.Extensibility; 10 using WixToolset.Extensibility;
10 11
@@ -14,6 +15,12 @@ namespace WixToolset.Util
14 15
15 public override IEnumerable<TableDefinition> TableDefinitions { get => Tables; } 16 public override IEnumerable<TableDefinition> TableDefinitions { get => Tables; }
16 17
18 public override bool TryAddTupleToOutput(IntermediateTuple tuple, WindowsInstallerData output)
19 {
20 var columnZeroIsId = tuple.Id != null;
21 return this.BackendHelper.TryAddTupleToOutputMatchingTableDefinitions(tuple, output, this.TableDefinitions, columnZeroIsId);
22 }
23
17 private static TableDefinition[] LoadTables() 24 private static TableDefinition[] LoadTables()
18 { 25 {
19 using (var resourceStream = typeof(UtilWindowsInstallerBackendBinderExtension).Assembly.GetManifestResourceStream("WixToolset.Util.tables.xml")) 26 using (var resourceStream = typeof(UtilWindowsInstallerBackendBinderExtension).Assembly.GetManifestResourceStream("WixToolset.Util.tables.xml"))
diff --git a/src/wixext/WixToolset.Util.wixext.csproj b/src/wixext/WixToolset.Util.wixext.csproj
index ed5a6a0f..3cd7b115 100644
--- a/src/wixext/WixToolset.Util.wixext.csproj
+++ b/src/wixext/WixToolset.Util.wixext.csproj
@@ -19,6 +19,7 @@
19 </ItemGroup> 19 </ItemGroup>
20 20
21 <ItemGroup> 21 <ItemGroup>
22 <PackageReference Include="WixToolset.Core" Version="4.0.*" PrivateAssets="all" />
22 <PackageReference Include="WixToolset.Data" Version="4.0.*" PrivateAssets="all" /> 23 <PackageReference Include="WixToolset.Data" Version="4.0.*" PrivateAssets="all" />
23 <PackageReference Include="WixToolset.Extensibility" Version="4.0.*" PrivateAssets="all" /> 24 <PackageReference Include="WixToolset.Extensibility" Version="4.0.*" PrivateAssets="all" />
24 </ItemGroup> 25 </ItemGroup>
diff --git a/src/wixext/tables.xml b/src/wixext/tables.xml
index 9f491e56..b8d4246c 100644
--- a/src/wixext/tables.xml
+++ b/src/wixext/tables.xml
@@ -3,8 +3,8 @@
3 3
4 4
5<tableDefinitions xmlns="http://wixtoolset.org/schemas/v4/wi/tables"> 5<tableDefinitions xmlns="http://wixtoolset.org/schemas/v4/wi/tables">
6 <tableDefinition name="WixCloseApplication"> 6 <tableDefinition name="Wix4CloseApplication" tupleDefinitionName="WixCloseApplication">
7 <columnDefinition name="WixCloseApplication" type="string" length="72" primaryKey="yes" modularize="column" 7 <columnDefinition name="Wix4CloseApplication" type="string" length="72" primaryKey="yes" modularize="column"
8 category="identifier" description="Primary key, non-localized token in table."/> 8 category="identifier" description="Primary key, non-localized token in table."/>
9 <columnDefinition name="Target" type="localized" length="0" modularize="property" 9 <columnDefinition name="Target" type="localized" length="0" modularize="property"
10 category="formatted" description="Name of executable to ensure is closed."/> 10 category="formatted" description="Name of executable to ensure is closed."/>
@@ -23,8 +23,8 @@
23 <columnDefinition name="Timeout" type="number" length="4" nullable="yes" 23 <columnDefinition name="Timeout" type="number" length="4" nullable="yes"
24 minValue="1" maxValue="2147483647" description="Timeout in milliseconds before scheduling restart or terminating application."/> 24 minValue="1" maxValue="2147483647" description="Timeout in milliseconds before scheduling restart or terminating application."/>
25 </tableDefinition> 25 </tableDefinition>
26 <tableDefinition name="WixRemoveFolderEx" createSymbols="yes"> 26 <tableDefinition name="Wix4RemoveFolderEx" tupleDefinitionName="WixRemoveFolderEx" createSymbols="yes">
27 <columnDefinition name="WixRemoveFolderEx" type="string" length="72" primaryKey="yes" modularize="column" 27 <columnDefinition name="Wix4RemoveFolderEx" type="string" length="72" primaryKey="yes" modularize="column"
28 category="identifier" description="Identifier for the WixRemoveFolderEx row in the package."/> 28 category="identifier" description="Identifier for the WixRemoveFolderEx row in the package."/>
29 <columnDefinition name="Component_" type="string" length="72" modularize="column" 29 <columnDefinition name="Component_" type="string" length="72" modularize="column"
30 keyTable="Component" keyColumn="1" category="identifier" description="Foreign key into the Component table used to determine install state"/> 30 keyTable="Component" keyColumn="1" category="identifier" description="Foreign key into the Component table used to determine install state"/>
@@ -33,8 +33,8 @@
33 <columnDefinition name="InstallMode" type="number" length="2" 33 <columnDefinition name="InstallMode" type="number" length="2"
34 minValue="1" maxValue="3" description="1 == Remove only when the associated component is being installed (msiInstallStateLocal or msiInstallStateSource), 2 == Remove only when the associated component is being removed (msiInstallStateAbsent), 3 = Remove in either of the above cases."/> 34 minValue="1" maxValue="3" description="1 == Remove only when the associated component is being installed (msiInstallStateLocal or msiInstallStateSource), 2 == Remove only when the associated component is being removed (msiInstallStateAbsent), 3 = Remove in either of the above cases."/>
35 </tableDefinition> 35 </tableDefinition>
36 <tableDefinition name="WixRestartResource"> 36 <tableDefinition name="Wix4RestartResource" tupleDefinitionName="WixRestartResource">
37 <columnDefinition name="WixRestartResource" type="string" length="72" primaryKey="yes" modularize="column" 37 <columnDefinition name="Wix4RestartResource" type="string" length="72" primaryKey="yes" modularize="column"
38 category="identifier" description="Primary key, non-localized identifier."/> 38 category="identifier" description="Primary key, non-localized identifier."/>
39 <columnDefinition name="Component_" type="string" length="72" nullable="yes" modularize="column" 39 <columnDefinition name="Component_" type="string" length="72" nullable="yes" modularize="column"
40 keyTable="Component" keyColumn="1" category="identifier" description="Foreign key into the Component table used to determine install state."/> 40 keyTable="Component" keyColumn="1" category="identifier" description="Foreign key into the Component table used to determine install state."/>
@@ -43,8 +43,8 @@
43 <columnDefinition name="Attributes" type="number" length="4" 43 <columnDefinition name="Attributes" type="number" length="4"
44 minValue="0" maxValue="2147483647" description="A 32-bit word that specifies the type of resource and flags used for processing."/> 44 minValue="0" maxValue="2147483647" description="A 32-bit word that specifies the type of resource and flags used for processing."/>
45 </tableDefinition> 45 </tableDefinition>
46 <tableDefinition name="FileShare" createSymbols="yes"> 46 <tableDefinition name="Wix4FileShare" tupleDefinitionName="FileShare" createSymbols="yes">
47 <columnDefinition name="FileShare" type="string" length="72" primaryKey="yes" modularize="column" 47 <columnDefinition name="Wix4FileShare" type="string" length="72" primaryKey="yes" modularize="column"
48 category="identifier" description="Primary key, non-localized identifier"/> 48 category="identifier" description="Primary key, non-localized identifier"/>
49 <columnDefinition name="ShareName" type="string" length="255" 49 <columnDefinition name="ShareName" type="string" length="255"
50 category="formatted" description="The actual share name used"/> 50 category="formatted" description="The actual share name used"/>
@@ -54,21 +54,17 @@
54 category="text" description="Description string displayed for the file share"/> 54 category="text" description="Description string displayed for the file share"/>
55 <columnDefinition name="Directory_" type="string" length="72" modularize="column" 55 <columnDefinition name="Directory_" type="string" length="72" modularize="column"
56 keyTable="Directory" keyColumn="1" category="identifier" description="Foreign key referencing directory that the share is created on"/> 56 keyTable="Directory" keyColumn="1" category="identifier" description="Foreign key referencing directory that the share is created on"/>
57 <columnDefinition name="User_" type="string" length="72" modularize="column" nullable="yes"
58 keyTable="User" keyColumn="1" category="identifier" description="Foreign key, User to give access permissions to"/>
59 <columnDefinition name="Permissions" type="number" length="4" nullable="yes"
60 description="Permissions int, as in EXPLICIT_ACCESS.grfAccessPermissions in MSDN"/>
61 </tableDefinition> 57 </tableDefinition>
62 <tableDefinition name="FileSharePermissions"> 58 <tableDefinition name="Wix4FileSharePermissions" tupleDefinitionName="FileSharePermissions">
63 <columnDefinition name="FileShare_" type="string" length="72" primaryKey="yes" modularize="column" 59 <columnDefinition name="Wix4FileShare_" type="string" length="72" primaryKey="yes" modularize="column"
64 keyTable="FileShare" keyColumn="1" category="identifier" description="FileShare that these premissions are to be applied to."/> 60 keyTable="FileShare" keyColumn="1" category="identifier" description="FileShare that these premissions are to be applied to."/>
65 <columnDefinition name="User_" type="string" length="72" primaryKey="yes" modularize="column" 61 <columnDefinition name="Wix4User_" type="string" length="72" primaryKey="yes" modularize="column"
66 category="identifier" description="User that these premissions are to apply to."/> 62 keyTable="Wix4User" category="identifier" description="User that these premissions are to apply to."/>
67 <columnDefinition name="Permissions" type="number" length="4" 63 <columnDefinition name="Permissions" type="number" length="4"
68 description="Permissions int, as in EXPLICIT_ACCESS.grfAccessPermissions in MSDN"/> 64 description="Permissions int, as in EXPLICIT_ACCESS.grfAccessPermissions in MSDN"/>
69 </tableDefinition> 65 </tableDefinition>
70 <tableDefinition name="Group" createSymbols="yes"> 66 <tableDefinition name="Wix4Group" tupleDefinitionName="Group" createSymbols="yes">
71 <columnDefinition name="Group" type="string" length="72" primaryKey="yes" modularize="column" 67 <columnDefinition name="Wix4Group" type="string" length="72" primaryKey="yes" modularize="column"
72 category="identifier" description="Primary key, non-localized token"/> 68 category="identifier" description="Primary key, non-localized token"/>
73 <columnDefinition name="Component_" type="string" length="72" nullable="yes" modularize="column" 69 <columnDefinition name="Component_" type="string" length="72" nullable="yes" modularize="column"
74 keyTable="Component" keyColumn="1" category="text" description="Foreign key, Component used to determine install state"/> 70 keyTable="Component" keyColumn="1" category="text" description="Foreign key, Component used to determine install state"/>
@@ -77,8 +73,8 @@
77 <columnDefinition name="Domain" type="string" length="255" nullable="yes" modularize="property" 73 <columnDefinition name="Domain" type="string" length="255" nullable="yes" modularize="property"
78 category="formatted" description="Group domain"/> 74 category="formatted" description="Group domain"/>
79 </tableDefinition> 75 </tableDefinition>
80 <tableDefinition name="WixInternetShortcut" createSymbols="yes"> 76 <tableDefinition name="Wix4InternetShortcut" tupleDefinitionName="WixInternetShortcut" createSymbols="yes">
81 <columnDefinition name="WixInternetShortcut" type="string" length="72" primaryKey="yes" modularize="column" 77 <columnDefinition name="Wix4InternetShortcut" type="string" length="72" primaryKey="yes" modularize="column"
82 category="identifier" description="Primary key, non-localized token in table."/> 78 category="identifier" description="Primary key, non-localized token in table."/>
83 <columnDefinition name="Component_" type="string" length="72" modularize="column" 79 <columnDefinition name="Component_" type="string" length="72" modularize="column"
84 keyTable="Component" keyColumn="1" category="text" description="Foreign key, Component used to determine install state"/> 80 keyTable="Component" keyColumn="1" category="text" description="Foreign key, Component used to determine install state"/>
@@ -95,8 +91,8 @@
95 <columnDefinition name="IconIndex" type="number" length="4" 91 <columnDefinition name="IconIndex" type="number" length="4"
96 nullable="yes" description="Index of the icon being referenced."/> 92 nullable="yes" description="Index of the icon being referenced."/>
97 </tableDefinition> 93 </tableDefinition>
98 <tableDefinition name="PerformanceCategory"> 94 <tableDefinition name="Wix4PerformanceCategory" tupleDefinitionName="PerformanceCategory">
99 <columnDefinition name="PerformanceCategory" type="string" length="72" primaryKey="yes" modularize="column" 95 <columnDefinition name="Wix4PerformanceCategory" type="string" length="72" primaryKey="yes" modularize="column"
100 category="identifier" description="Primary key, non-localized token in table."/> 96 category="identifier" description="Primary key, non-localized token in table."/>
101 <columnDefinition name="Component_" type="string" length="72" modularize="column" 97 <columnDefinition name="Component_" type="string" length="72" modularize="column"
102 keyTable="Component" keyColumn="1" category="identifier" description="Component used to determine install state"/> 98 keyTable="Component" keyColumn="1" category="identifier" description="Component used to determine install state"/>
@@ -107,7 +103,7 @@
107 <columnDefinition name="ConstantData" type="localized" length="0" escapeIdtCharacters="yes" 103 <columnDefinition name="ConstantData" type="localized" length="0" escapeIdtCharacters="yes"
108 category="text" description="Data that goes into the performance counter .h file."/> 104 category="text" description="Data that goes into the performance counter .h file."/>
109 </tableDefinition> 105 </tableDefinition>
110 <tableDefinition name="Perfmon"> 106 <tableDefinition name="Wix4Perfmon" tupleDefinitionName="Perfmon">
111 <columnDefinition name="Component_" type="string" length="72" primaryKey="yes" modularize="column" 107 <columnDefinition name="Component_" type="string" length="72" primaryKey="yes" modularize="column"
112 keyTable="Component" keyColumn="1" category="identifier" description="Component used to determine install state"/> 108 keyTable="Component" keyColumn="1" category="identifier" description="Component used to determine install state"/>
113 <columnDefinition name="File" type="string" length="72" primaryKey="yes" modularize="property" 109 <columnDefinition name="File" type="string" length="72" primaryKey="yes" modularize="property"
@@ -115,7 +111,7 @@
115 <columnDefinition name="Name" type="string" length="72" primaryKey="yes" 111 <columnDefinition name="Name" type="string" length="72" primaryKey="yes"
116 category="text" description="Service name in registry"/> 112 category="text" description="Service name in registry"/>
117 </tableDefinition> 113 </tableDefinition>
118 <tableDefinition name="PerfmonManifest"> 114 <tableDefinition name="Wix4PerfmonManifest" tupleDefinitionName="PerfmonManifest">
119 <columnDefinition name="Component_" type="string" length="72" primaryKey="yes" modularize="column" 115 <columnDefinition name="Component_" type="string" length="72" primaryKey="yes" modularize="column"
120 keyTable="Component" keyColumn="1" category="identifier" description="Component used to determine install state"/> 116 keyTable="Component" keyColumn="1" category="identifier" description="Component used to determine install state"/>
121 <columnDefinition name="File" type="string" length="72" primaryKey="yes" modularize="property" 117 <columnDefinition name="File" type="string" length="72" primaryKey="yes" modularize="property"
@@ -123,27 +119,27 @@
123 <columnDefinition name="ResourceFileDirectory" type="string" length="255" primaryKey="yes" 119 <columnDefinition name="ResourceFileDirectory" type="string" length="255" primaryKey="yes"
124 category="formatted" description="The path of the Resource File Directory"/> 120 category="formatted" description="The path of the Resource File Directory"/>
125 </tableDefinition> 121 </tableDefinition>
126 <tableDefinition name="EventManifest"> 122 <tableDefinition name="Wix4EventManifest" tupleDefinitionName="EventManifest">
127 <columnDefinition name="Component_" type="string" length="72" primaryKey="yes" modularize="column" 123 <columnDefinition name="Component_" type="string" length="72" primaryKey="yes" modularize="column"
128 keyTable="Component" keyColumn="1" category="identifier" description="Component used to determine install state"/> 124 keyTable="Component" keyColumn="1" category="identifier" description="Component used to determine install state"/>
129 <columnDefinition name="File" type="string" length="72" primaryKey="yes" modularize="property" 125 <columnDefinition name="File" type="string" length="72" primaryKey="yes" modularize="property"
130 category="formatted" description="Name of event manifest file"/> 126 category="formatted" description="Name of event manifest file"/>
131 </tableDefinition> 127 </tableDefinition>
132 <tableDefinition name="SecureObjects"> 128 <tableDefinition name="Wix4SecureObject" tupleDefinitionName="SecureObjects">
133 <columnDefinition name="SecureObject" type="string" length="72" primaryKey="yes" modularize="column" 129 <columnDefinition name="Wix4SecureObject" type="string" length="72" primaryKey="yes" modularize="column"
134 category="identifier" description="Primary key, non-localized token in Table"/> 130 category="identifier" description="Primary key, non-localized token in Table"/>
135 <columnDefinition name="Table" type="string" length="32" primaryKey="yes" 131 <columnDefinition name="Table" type="string" length="32" primaryKey="yes"
136 category="text" description="Table SecureObject should be securing"/> 132 category="text" description="Table SecureObject should be securing"/>
137 <columnDefinition name="Domain" type="string" length="255" primaryKey="yes" nullable="yes" modularize="property" 133 <columnDefinition name="Domain" type="string" length="255" primaryKey="yes" nullable="yes" modularize="property"
138 category="text" description="Domain half of user account to secure"/> 134 category="text" description="Domain half of user account to secure"/>
139 <columnDefinition name="User" type="string" length="255" primaryKey="yes" modularize="property" 135 <columnDefinition name="User" type="string" length="255" primaryKey="yes" modularize="property"
140 category="text" description="Username half of user account to secure"/> 136 category="text" description="User name half of user account to secure"/>
141 <columnDefinition name="Permission" type="number" length="4" nullable="yes" 137 <columnDefinition name="Permission" type="number" length="4" nullable="yes"
142 minValue="-2147483647" maxValue="2147483647" description="Permissions to grant to User"/> 138 minValue="-2147483647" maxValue="2147483647" description="Permissions to grant to User"/>
143 <columnDefinition name="Component_" type="string" length="72" modularize="column" 139 <columnDefinition name="Component_" type="string" length="72" modularize="column"
144 keyTable="Component" keyColumn="1" category="identifier" description="Foreign key into the Component table used to determine install state"/> 140 keyTable="Component" keyColumn="1" category="identifier" description="Foreign key into the Component table used to determine install state"/>
145 </tableDefinition> 141 </tableDefinition>
146 <tableDefinition name="ServiceConfig"> 142 <tableDefinition name="Wix4ServiceConfig" tupleDefinitionName="ServiceConfig">
147 <columnDefinition name="ServiceName" type="string" length="72" primaryKey="yes" 143 <columnDefinition name="ServiceName" type="string" length="72" primaryKey="yes"
148 category="formatted" description="Primary key, non-localized token"/> 144 category="formatted" description="Primary key, non-localized token"/>
149 <columnDefinition name="Component_" type="string" length="72" modularize="column" 145 <columnDefinition name="Component_" type="string" length="72" modularize="column"
@@ -165,9 +161,9 @@
165 <columnDefinition name="RebootMessage" type="string" length="255" nullable="yes" 161 <columnDefinition name="RebootMessage" type="string" length="255" nullable="yes"
166 category="text" description="Message to show to users when rebooting if failure action is REBOOT."/> 162 category="text" description="Message to show to users when rebooting if failure action is REBOOT."/>
167 </tableDefinition> 163 </tableDefinition>
168 <tableDefinition name="WixTouchFile" createSymbols="yes"> 164 <tableDefinition name="Wix4TouchFile" tupleDefinitionName="WixTouchFile" createSymbols="yes">
169 <columnDefinition name="WixTouchFile" type="string" length="72" primaryKey="yes" modularize="column" 165 <columnDefinition name="Wix4TouchFile" type="string" length="72" primaryKey="yes" modularize="column"
170 category="identifier" description="Identifier for the WixTouchFile row in the package."/> 166 category="identifier" description="Identifier for the Wix4TouchFile row in the package."/>
171 <columnDefinition name="Component_" type="string" length="72" modularize="column" 167 <columnDefinition name="Component_" type="string" length="72" modularize="column"
172 keyTable="Component" keyColumn="1" category="identifier" description="Foreign key into the Component table used to determine install state"/> 168 keyTable="Component" keyColumn="1" category="identifier" description="Foreign key into the Component table used to determine install state"/>
173 <columnDefinition name="Path" type="string" length="255" modularize="property" 169 <columnDefinition name="Path" type="string" length="255" modularize="property"
@@ -175,8 +171,8 @@
175 <columnDefinition name="Attributes" type="number" length="2" 171 <columnDefinition name="Attributes" type="number" length="2"
176 minValue="1" maxValue="63" description="1 == Touch only when the associated component is being installed, 2 == Touch only when the associated component is being repaired , 4 == Touch only when the associated component is being removed, 16 = path is in 64-bit location, 32 = touching the file is vital."/> 172 minValue="1" maxValue="63" description="1 == Touch only when the associated component is being installed, 2 == Touch only when the associated component is being repaired , 4 == Touch only when the associated component is being removed, 16 = path is in 64-bit location, 32 = touching the file is vital."/>
177 </tableDefinition> 173 </tableDefinition>
178 <tableDefinition name="User" createSymbols="yes"> 174 <tableDefinition name="Wix4User" tupleDefinitionName="User" createSymbols="yes">
179 <columnDefinition name="User" type="string" length="72" primaryKey="yes" modularize="column" 175 <columnDefinition name="Wix4User" type="string" length="72" primaryKey="yes" modularize="column"
180 category="identifier" description="Primary key, non-localized token"/> 176 category="identifier" description="Primary key, non-localized token"/>
181 <columnDefinition name="Component_" type="string" length="72" nullable="yes" modularize="column" 177 <columnDefinition name="Component_" type="string" length="72" nullable="yes" modularize="column"
182 keyTable="Component" keyColumn="1" category="text" description="Foreign key, Component used to determine install state"/> 178 keyTable="Component" keyColumn="1" category="text" description="Foreign key, Component used to determine install state"/>
@@ -189,14 +185,14 @@
189 <columnDefinition name="Attributes" type="number" length="4" nullable="yes" 185 <columnDefinition name="Attributes" type="number" length="4" nullable="yes"
190 minValue="0" maxValue="65535" description="Attributes describing how to create the user"/> 186 minValue="0" maxValue="65535" description="Attributes describing how to create the user"/>
191 </tableDefinition> 187 </tableDefinition>
192 <tableDefinition name="UserGroup"> 188 <tableDefinition name="Wix4UserGroup" tupleDefinitionName="UserGroup">
193 <columnDefinition name="User_" type="string" length="72" primaryKey="yes" modularize="column" 189 <columnDefinition name="Wix4User_" type="string" length="72" primaryKey="yes" modularize="column"
194 keyTable="User" keyColumn="1" category="identifier" description="User to be joined to a Group."/> 190 keyTable="Wix4User" keyColumn="1" category="identifier" description="User to be joined to a Group."/>
195 <columnDefinition name="Group_" type="string" length="72" primaryKey="yes" modularize="column" 191 <columnDefinition name="Wix4Group_" type="string" length="72" primaryKey="yes" modularize="column"
196 keyTable="Group" keyColumn="1" category="identifier" description="User to be joined to a Group."/> 192 keyTable="Wix4Group" keyColumn="1" category="identifier" description="Group to join User to."/>
197 </tableDefinition> 193 </tableDefinition>
198 <tableDefinition name="XmlFile"> 194 <tableDefinition name="Wix4XmlFile" tupleDefinitionName="XmlFile">
199 <columnDefinition name="XmlFile" type="string" length="72" primaryKey="yes" modularize="column" 195 <columnDefinition name="Wix4XmlFile" type="string" length="72" primaryKey="yes" modularize="column"
200 category="identifier" description="Primary key, non-localized token."/> 196 category="identifier" description="Primary key, non-localized token."/>
201 <columnDefinition name="File" type="localized" length="255" modularize="property" 197 <columnDefinition name="File" type="localized" length="255" modularize="property"
202 category="formatted" description="The .XML file in which to write the information"/> 198 category="formatted" description="The .XML file in which to write the information"/>
@@ -213,13 +209,13 @@
213 <columnDefinition name="Sequence" type="number" length="2" nullable="yes" 209 <columnDefinition name="Sequence" type="number" length="2" nullable="yes"
214 description="Order to execute the XML modifications."/> 210 description="Order to execute the XML modifications."/>
215 </tableDefinition> 211 </tableDefinition>
216 <tableDefinition name="XmlConfig" createSymbols="yes"> 212 <tableDefinition name="Wix4XmlConfig" tupleDefinitionName="XmlConfig" createSymbols="yes">
217 <columnDefinition name="XmlConfig" type="string" length="72" primaryKey="yes" modularize="column" 213 <columnDefinition name="Wix4XmlConfig" type="string" length="72" primaryKey="yes" modularize="column"
218 category="identifier" description="Primary key, non-localized token."/> 214 category="identifier" description="Primary key, non-localized token."/>
219 <columnDefinition name="File" type="localized" length="255" modularize="property" 215 <columnDefinition name="File" type="localized" length="255" modularize="property"
220 category="formatted" description="The .XML file in which to write the information"/> 216 category="formatted" description="The .XML file in which to write the information"/>
221 <columnDefinition name="ElementPath" type="localized" length="0" modularize="property" 217 <columnDefinition name="ElementPath" type="localized" length="0" modularize="property"
222 category="formatted" description="The XPATH query for an element to modify or add children to. Can also be a foreign key reference to another XmlConfig row if no attributes are set and the row referenced is a create element row."/> 218 category="formatted" description="The XPATH query for an element to modify or add children to. Can also be a foreign key reference to another Wix4XmlConfig row if no attributes are set and the row referenced is a create element row."/>
223 <columnDefinition name="VerifyPath" type="localized" length="0" modularize="property" nullable="yes" 219 <columnDefinition name="VerifyPath" type="localized" length="0" modularize="property" nullable="yes"
224 category="formatted" description="The XPATH query run from ElementPath to verify whether a repair is necessary. Also used to uninstall."/> 220 category="formatted" description="The XPATH query run from ElementPath to verify whether a repair is necessary. Also used to uninstall."/>
225 <columnDefinition name="Name" type="localized" length="255" modularize="property" nullable="yes" 221 <columnDefinition name="Name" type="localized" length="255" modularize="property" nullable="yes"
@@ -233,7 +229,7 @@
233 <columnDefinition name="Sequence" type="number" length="2" nullable="yes" 229 <columnDefinition name="Sequence" type="number" length="2" nullable="yes"
234 description="Order to execute the XML modifications."/> 230 description="Order to execute the XML modifications."/>
235 </tableDefinition> 231 </tableDefinition>
236 <tableDefinition name="WixFormatFiles"> 232 <tableDefinition name="Wix4FormatFile" tupleDefinitionName="WixFormatFile">
237 <columnDefinition name="Binary_" type="string" length="72" primaryKey="yes" modularize="column" 233 <columnDefinition name="Binary_" type="string" length="72" primaryKey="yes" modularize="column"
238 keyTable="Binary" keyColumn="1" category="identifier" description="Binary data to be formatted."/> 234 keyTable="Binary" keyColumn="1" category="identifier" description="Binary data to be formatted."/>
239 <columnDefinition name="File_" type="string" length="72" primaryKey="yes" modularize="column" 235 <columnDefinition name="File_" type="string" length="72" primaryKey="yes" modularize="column"
diff --git a/src/wixlib/UtilExtension.wxs b/src/wixlib/UtilExtension.wxs
index e77b529b..28646ee1 100644
--- a/src/wixlib/UtilExtension.wxs
+++ b/src/wixlib/UtilExtension.wxs
@@ -3,6 +3,7 @@
3 3
4 4
5<Wix xmlns="http://wixtoolset.org/schemas/v4/wxs"> 5<Wix xmlns="http://wixtoolset.org/schemas/v4/wxs">
6 <?include caDecor.wxi ?>
6 <?include caerr.wxi ?> 7 <?include caerr.wxi ?>
7 8
8 <Fragment> 9 <Fragment>
@@ -63,368 +64,358 @@
63 </Fragment> 64 </Fragment>
64 65
65 <Fragment> 66 <Fragment>
66 <CustomAction Id="WixFailWhenDeferred" BinaryKey="UtilCA" DllEntry="WixFailWhenDeferred" Execute="deferred" Return="check" SuppressModularization="yes" /> 67 <CustomAction Id="$(var.Prefix)FailWhenDeferred$(var.Suffix)" BinaryKey="$(var.Prefix)UtilCA$(var.Suffix)" DllEntry="WixFailWhenDeferred" Execute="deferred" Return="check" SuppressModularization="yes" />
67 68
68 <InstallExecuteSequence> 69 <InstallExecuteSequence>
69 <Custom Action="WixFailWhenDeferred" Before="InstallFinalize" Overridable="yes">WIXFAILWHENDEFERRED=1 AND VersionNT &gt; 400</Custom> 70 <Custom Action="$(var.Prefix)FailWhenDeferred$(var.Suffix)" Before="InstallFinalize" Overridable="yes">WIXFAILWHENDEFERRED=1 AND VersionNT &gt; 400</Custom>
70 </InstallExecuteSequence> 71 </InstallExecuteSequence>
71 </Fragment> 72 </Fragment>
72 73
73 <Fragment> 74 <Fragment>
74 <CustomAction Id="WixWaitForEvent" BinaryKey="UtilCA" DllEntry="WixWaitForEvent" Execute="immediate" Return="check" SuppressModularization="yes" /> 75 <CustomAction Id="$(var.Prefix)WaitForEvent$(var.Suffix)" BinaryKey="$(var.Prefix)UtilCA$(var.Suffix)" DllEntry="WixWaitForEvent" Execute="immediate" Return="check" SuppressModularization="yes" />
75 76
76 <InstallExecuteSequence> 77 <InstallExecuteSequence>
77 <Custom Action="WixWaitForEvent" Before="InstallFinalize" Overridable="yes" /> 78 <Custom Action="$(var.Prefix)WaitForEvent$(var.Suffix)" Before="InstallFinalize" Overridable="yes" />
78 </InstallExecuteSequence> 79 </InstallExecuteSequence>
79 </Fragment> 80 </Fragment>
80 81
81 <Fragment> 82 <Fragment>
82 <CustomAction Id="WixWaitForEventDeferred" BinaryKey="UtilCA" DllEntry="WixWaitForEvent" Execute="deferred" Return="check" SuppressModularization="yes" /> 83 <CustomAction Id="$(var.Prefix)WaitForEventDeferred$(var.Suffix)" BinaryKey="$(var.Prefix)UtilCA$(var.Suffix)" DllEntry="WixWaitForEvent" Execute="deferred" Return="check" SuppressModularization="yes" />
83 84
84 <InstallExecuteSequence> 85 <InstallExecuteSequence>
85 <Custom Action="WixWaitForEventDeferred" After="InstallInitialize" Overridable="yes" /> 86 <Custom Action="$(var.Prefix)WaitForEventDeferred$(var.Suffix)" After="InstallInitialize" Overridable="yes" />
86 </InstallExecuteSequence> 87 </InstallExecuteSequence>
87 </Fragment> 88 </Fragment>
88 89
89 <Fragment> 90 <Fragment>
90 <CustomAction Id="WixExitEarlyWithSuccess" BinaryKey="UtilCA" DllEntry="WixExitEarlyWithSuccess" Execute="immediate" Return="check" SuppressModularization="yes" /> 91 <CustomAction Id="$(var.Prefix)ExitEarlyWithSuccess$(var.Suffix)" BinaryKey="$(var.Prefix)UtilCA$(var.Suffix)" DllEntry="WixExitEarlyWithSuccess" Execute="immediate" Return="check" SuppressModularization="yes" />
91 92
92 <InstallExecuteSequence> 93 <InstallExecuteSequence>
93 <Custom Action="WixExitEarlyWithSuccess" After="FindRelatedProducts" Overridable="yes">NEWERVERSIONDETECTED AND VersionNT &gt; 400</Custom> 94 <Custom Action="$(var.Prefix)ExitEarlyWithSuccess$(var.Suffix)" After="FindRelatedProducts" Overridable="yes">NEWERVERSIONDETECTED AND VersionNT &gt; 400</Custom>
94 </InstallExecuteSequence> 95 </InstallExecuteSequence>
95 </Fragment> 96 </Fragment>
96 97
97 <Fragment> 98 <Fragment>
98 <CustomAction Id="WixRemoveFoldersEx" BinaryKey="UtilCA" DllEntry="WixRemoveFoldersEx" Execute="immediate" Return="ignore" /> 99 <CustomAction Id="$(var.Prefix)RemoveFoldersEx$(var.Suffix)" BinaryKey="$(var.Prefix)UtilCA$(var.Suffix)" DllEntry="WixRemoveFoldersEx" Execute="immediate" Return="ignore" />
99 100
100 <InstallExecuteSequence> 101 <InstallExecuteSequence>
101 <Custom Action="WixRemoveFoldersEx" Before="CostInitialize" /> 102 <Custom Action="$(var.Prefix)RemoveFoldersEx$(var.Suffix)" Before="CostInitialize" />
102 </InstallExecuteSequence> 103 </InstallExecuteSequence>
103 </Fragment> 104 </Fragment>
104 105
105 <Fragment> 106 <Fragment>
106 <CustomAction Id="WixBroadcastSettingChange" BinaryKey="UtilCA" DllEntry="WixBroadcastSettingChange" Execute="immediate" Return="ignore" SuppressModularization="yes" /> 107 <CustomAction Id="$(var.Prefix)BroadcastSettingChange$(var.Suffix)" BinaryKey="$(var.Prefix)UtilCA$(var.Suffix)" DllEntry="WixBroadcastSettingChange" Execute="immediate" Return="ignore" SuppressModularization="yes" />
107 108
108 <InstallExecuteSequence> 109 <InstallExecuteSequence>
109 <Custom Action="WixBroadcastSettingChange" After="InstallFinalize" Overridable="yes" /> 110 <Custom Action="$(var.Prefix)BroadcastSettingChange$(var.Suffix)" After="InstallFinalize" Overridable="yes" />
110 </InstallExecuteSequence> 111 </InstallExecuteSequence>
111 </Fragment> 112 </Fragment>
112 113
113 <Fragment> 114 <Fragment>
114 <CustomAction Id="WixBroadcastEnvironmentChange" BinaryKey="UtilCA" DllEntry="WixBroadcastEnvironmentChange" Execute="immediate" Return="ignore" SuppressModularization="yes" /> 115 <CustomAction Id="$(var.Prefix)BroadcastEnvironmentChange$(var.Suffix)" BinaryKey="$(var.Prefix)UtilCA$(var.Suffix)" DllEntry="WixBroadcastEnvironmentChange" Execute="immediate" Return="ignore" SuppressModularization="yes" />
115 116
116 <InstallExecuteSequence> 117 <InstallExecuteSequence>
117 <Custom Action="WixBroadcastEnvironmentChange" After="InstallFinalize" Overridable="yes" /> 118 <Custom Action="$(var.Prefix)BroadcastEnvironmentChange$(var.Suffix)" After="InstallFinalize" Overridable="yes" />
118 </InstallExecuteSequence> 119 </InstallExecuteSequence>
119 </Fragment> 120 </Fragment>
120 121
121 <!-- WiX OS-detection properties and custom action --> 122 <!-- WiX OS-detection properties and custom action -->
122 <Fragment> 123 <Fragment>
123 <CustomAction Id="WixQueryOsInfo" BinaryKey="UtilCA" DllEntry="WixQueryOsInfo" Execute="firstSequence" Return="check" SuppressModularization="yes" /> 124 <CustomAction Id="$(var.Prefix)QueryOsInfo$(var.Suffix)" BinaryKey="$(var.Prefix)UtilCA$(var.Suffix)" DllEntry="WixQueryOsInfo" Execute="firstSequence" Return="check" SuppressModularization="yes" />
124 125
125 <InstallExecuteSequence> 126 <InstallExecuteSequence>
126 <Custom Action="WixQueryOsInfo" After="AppSearch" Overridable="yes">VersionNT &gt; 400 OR (VersionNT = 400 AND ServicePackLevel &gt; 3)</Custom> 127 <Custom Action="$(var.Prefix)QueryOsInfo$(var.Suffix)" After="AppSearch" Overridable="yes">VersionNT &gt; 400 OR (VersionNT = 400 AND ServicePackLevel &gt; 3)</Custom>
127 </InstallExecuteSequence> 128 </InstallExecuteSequence>
128 129
129 <InstallUISequence> 130 <InstallUISequence>
130 <Custom Action="WixQueryOsInfo" After="AppSearch" Overridable="yes">VersionNT &gt; 400 OR (VersionNT = 400 AND ServicePackLevel &gt; 3)</Custom> 131 <Custom Action="$(var.Prefix)QueryOsInfo$(var.Suffix)" After="AppSearch" Overridable="yes">VersionNT &gt; 400 OR (VersionNT = 400 AND ServicePackLevel &gt; 3)</Custom>
131 </InstallUISequence> 132 </InstallUISequence>
132 </Fragment> 133 </Fragment>
133 134
134 <Fragment> 135 <Fragment>
135 <Property Id="WIX_SUITE_BACKOFFICE" Secure="yes" /> 136 <Property Id="WIX_SUITE_BACKOFFICE" Secure="yes" />
136 <CustomActionRef Id="WixQueryOsInfo" /> 137 <CustomActionRef Id="$(var.Prefix)QueryOsInfo$(var.Suffix)" />
137 </Fragment> 138 </Fragment>
138 <Fragment> 139 <Fragment>
139 <Property Id="WIX_SUITE_BLADE" Secure="yes" /> 140 <Property Id="WIX_SUITE_BLADE" Secure="yes" />
140 <CustomActionRef Id="WixQueryOsInfo" /> 141 <CustomActionRef Id="$(var.Prefix)QueryOsInfo$(var.Suffix)" />
141 </Fragment> 142 </Fragment>
142 <Fragment> 143 <Fragment>
143 <Property Id="WIX_SUITE_COMMUNICATIONS" Secure="yes" /> 144 <Property Id="WIX_SUITE_COMMUNICATIONS" Secure="yes" />
144 <CustomActionRef Id="WixQueryOsInfo" /> 145 <CustomActionRef Id="$(var.Prefix)QueryOsInfo$(var.Suffix)" />
145 </Fragment> 146 </Fragment>
146 <Fragment> 147 <Fragment>
147 <Property Id="WIX_SUITE_COMPUTE_SERVER" Secure="yes" /> 148 <Property Id="WIX_SUITE_COMPUTE_SERVER" Secure="yes" />
148 <CustomActionRef Id="WixQueryOsInfo" /> 149 <CustomActionRef Id="$(var.Prefix)QueryOsInfo$(var.Suffix)" />
149 </Fragment> 150 </Fragment>
150 <Fragment> 151 <Fragment>
151 <Property Id="WIX_SUITE_DATACENTER" Secure="yes" /> 152 <Property Id="WIX_SUITE_DATACENTER" Secure="yes" />
152 <CustomActionRef Id="WixQueryOsInfo" /> 153 <CustomActionRef Id="$(var.Prefix)QueryOsInfo$(var.Suffix)" />
153 </Fragment> 154 </Fragment>
154 <Fragment> 155 <Fragment>
155 <Property Id="WIX_SUITE_EMBEDDED_RESTRICTED" Secure="yes" /> 156 <Property Id="WIX_SUITE_EMBEDDED_RESTRICTED" Secure="yes" />
156 <CustomActionRef Id="WixQueryOsInfo" /> 157 <CustomActionRef Id="$(var.Prefix)QueryOsInfo$(var.Suffix)" />
157 </Fragment> 158 </Fragment>
158 <Fragment> 159 <Fragment>
159 <Property Id="WIX_SUITE_EMBEDDEDNT" Secure="yes" /> 160 <Property Id="WIX_SUITE_EMBEDDEDNT" Secure="yes" />
160 <CustomActionRef Id="WixQueryOsInfo" /> 161 <CustomActionRef Id="$(var.Prefix)QueryOsInfo$(var.Suffix)" />
161 </Fragment> 162 </Fragment>
162 <Fragment> 163 <Fragment>
163 <Property Id="WIX_SUITE_ENTERPRISE" Secure="yes" /> 164 <Property Id="WIX_SUITE_ENTERPRISE" Secure="yes" />
164 <CustomActionRef Id="WixQueryOsInfo" /> 165 <CustomActionRef Id="$(var.Prefix)QueryOsInfo$(var.Suffix)" />
165 </Fragment> 166 </Fragment>
166 <Fragment> 167 <Fragment>
167 <Property Id="WIX_SUITE_MEDIACENTER" Secure="yes" /> 168 <Property Id="WIX_SUITE_MEDIACENTER" Secure="yes" />
168 <CustomActionRef Id="WixQueryOsInfo" /> 169 <CustomActionRef Id="$(var.Prefix)QueryOsInfo$(var.Suffix)" />
169 </Fragment> 170 </Fragment>
170 <Fragment> 171 <Fragment>
171 <Property Id="WIX_SUITE_PERSONAL" Secure="yes" /> 172 <Property Id="WIX_SUITE_PERSONAL" Secure="yes" />
172 <CustomActionRef Id="WixQueryOsInfo" /> 173 <CustomActionRef Id="$(var.Prefix)QueryOsInfo$(var.Suffix)" />
173 </Fragment> 174 </Fragment>
174 <Fragment> 175 <Fragment>
175 <Property Id="WIX_SUITE_SECURITY_APPLIANCE" Secure="yes" /> 176 <Property Id="WIX_SUITE_SECURITY_APPLIANCE" Secure="yes" />
176 <CustomActionRef Id="WixQueryOsInfo" /> 177 <CustomActionRef Id="$(var.Prefix)QueryOsInfo$(var.Suffix)" />
177 </Fragment> 178 </Fragment>
178 <Fragment> 179 <Fragment>
179 <Property Id="WIX_SUITE_SERVERR2" Secure="yes" /> 180 <Property Id="WIX_SUITE_SERVERR2" Secure="yes" />
180 <CustomActionRef Id="WixQueryOsInfo" /> 181 <CustomActionRef Id="$(var.Prefix)QueryOsInfo$(var.Suffix)" />
181 </Fragment> 182 </Fragment>
182 <Fragment> 183 <Fragment>
183 <Property Id="WIX_SUITE_SINGLEUSERTS" Secure="yes" /> 184 <Property Id="WIX_SUITE_SINGLEUSERTS" Secure="yes" />
184 <CustomActionRef Id="WixQueryOsInfo" /> 185 <CustomActionRef Id="$(var.Prefix)QueryOsInfo$(var.Suffix)" />
185 </Fragment> 186 </Fragment>
186 <Fragment> 187 <Fragment>
187 <Property Id="WIX_SUITE_SMALLBUSINESS" Secure="yes" /> 188 <Property Id="WIX_SUITE_SMALLBUSINESS" Secure="yes" />
188 <CustomActionRef Id="WixQueryOsInfo" /> 189 <CustomActionRef Id="$(var.Prefix)QueryOsInfo$(var.Suffix)" />
189 </Fragment> 190 </Fragment>
190 <Fragment> 191 <Fragment>
191 <Property Id="WIX_SUITE_SMALLBUSINESS_RESTRICTED" Secure="yes" /> 192 <Property Id="WIX_SUITE_SMALLBUSINESS_RESTRICTED" Secure="yes" />
192 <CustomActionRef Id="WixQueryOsInfo" /> 193 <CustomActionRef Id="$(var.Prefix)QueryOsInfo$(var.Suffix)" />
193 </Fragment> 194 </Fragment>
194 <Fragment> 195 <Fragment>
195 <Property Id="WIX_SUITE_STARTER" Secure="yes" /> 196 <Property Id="WIX_SUITE_STARTER" Secure="yes" />
196 <CustomActionRef Id="WixQueryOsInfo" /> 197 <CustomActionRef Id="$(var.Prefix)QueryOsInfo$(var.Suffix)" />
197 </Fragment> 198 </Fragment>
198 <Fragment> 199 <Fragment>
199 <Property Id="WIX_SUITE_STORAGE_SERVER" Secure="yes" /> 200 <Property Id="WIX_SUITE_STORAGE_SERVER" Secure="yes" />
200 <CustomActionRef Id="WixQueryOsInfo" /> 201 <CustomActionRef Id="$(var.Prefix)QueryOsInfo$(var.Suffix)" />
201 </Fragment> 202 </Fragment>
202 <Fragment> 203 <Fragment>
203 <Property Id="WIX_SUITE_TABLETPC" Secure="yes" /> 204 <Property Id="WIX_SUITE_TABLETPC" Secure="yes" />
204 <CustomActionRef Id="WixQueryOsInfo" /> 205 <CustomActionRef Id="$(var.Prefix)QueryOsInfo$(var.Suffix)" />
205 </Fragment> 206 </Fragment>
206 <Fragment> 207 <Fragment>
207 <Property Id="WIX_SUITE_TERMINAL" Secure="yes" /> 208 <Property Id="WIX_SUITE_TERMINAL" Secure="yes" />
208 <CustomActionRef Id="WixQueryOsInfo" /> 209 <CustomActionRef Id="$(var.Prefix)QueryOsInfo$(var.Suffix)" />
209 </Fragment> 210 </Fragment>
210 <Fragment> 211 <Fragment>
211 <Property Id="WIX_SUITE_WH_SERVER" Secure="yes" /> 212 <Property Id="WIX_SUITE_WH_SERVER" Secure="yes" />
212 <CustomActionRef Id="WixQueryOsInfo" /> 213 <CustomActionRef Id="$(var.Prefix)QueryOsInfo$(var.Suffix)" />
213 </Fragment> 214 </Fragment>
214 215
215 <Fragment> 216 <Fragment>
216 <CustomAction Id="WixQueryOsDirs" BinaryKey="UtilCA" DllEntry="WixQueryOsDirs" Execute="firstSequence" Return="check" SuppressModularization="yes" /> 217 <CustomAction Id="$(var.Prefix)QueryOsDirs$(var.Suffix)" BinaryKey="$(var.Prefix)UtilCA$(var.Suffix)" DllEntry="WixQueryOsDirs" Execute="firstSequence" Return="check" SuppressModularization="yes" />
217 218
218 <InstallExecuteSequence> 219 <InstallExecuteSequence>
219 <Custom Action="WixQueryOsDirs" After="AppSearch" Overridable="yes">VersionNT &gt; 400 OR (VersionNT = 400 AND ServicePackLevel &gt; 3)</Custom> 220 <Custom Action="$(var.Prefix)QueryOsDirs$(var.Suffix)" After="AppSearch" Overridable="yes">VersionNT &gt; 400 OR (VersionNT = 400 AND ServicePackLevel &gt; 3)</Custom>
220 </InstallExecuteSequence> 221 </InstallExecuteSequence>
221 222
222 <InstallUISequence> 223 <InstallUISequence>
223 <Custom Action="WixQueryOsDirs" After="AppSearch" Overridable="yes">VersionNT &gt; 400 OR (VersionNT = 400 AND ServicePackLevel &gt; 3)</Custom> 224 <Custom Action="$(var.Prefix)QueryOsDirs$(var.Suffix)" After="AppSearch" Overridable="yes">VersionNT &gt; 400 OR (VersionNT = 400 AND ServicePackLevel &gt; 3)</Custom>
224 </InstallUISequence> 225 </InstallUISequence>
225 </Fragment> 226 </Fragment>
226 227
227 <Fragment> 228 <Fragment>
228 <Property Id="WIX_DIR_ADMINTOOLS" Secure="yes" /> 229 <Property Id="WIX_DIR_ADMINTOOLS" Secure="yes" />
229 <CustomActionRef Id="WixQueryOsDirs" /> 230 <CustomActionRef Id="$(var.Prefix)QueryOsDirs$(var.Suffix)" />
230 </Fragment> 231 </Fragment>
231 <Fragment> 232 <Fragment>
232 <Property Id="WIX_DIR_ALTSTARTUP" Secure="yes" /> 233 <Property Id="WIX_DIR_ALTSTARTUP" Secure="yes" />
233 <CustomActionRef Id="WixQueryOsDirs" /> 234 <CustomActionRef Id="$(var.Prefix)QueryOsDirs$(var.Suffix)" />
234 </Fragment> 235 </Fragment>
235 <Fragment> 236 <Fragment>
236 <Property Id="WIX_DIR_CDBURN_AREA" Secure="yes" /> 237 <Property Id="WIX_DIR_CDBURN_AREA" Secure="yes" />
237 <CustomActionRef Id="WixQueryOsDirs" /> 238 <CustomActionRef Id="$(var.Prefix)QueryOsDirs$(var.Suffix)" />
238 </Fragment> 239 </Fragment>
239 <Fragment> 240 <Fragment>
240 <Property Id="WIX_DIR_COMMON_ADMINTOOLS" Secure="yes" /> 241 <Property Id="WIX_DIR_COMMON_ADMINTOOLS" Secure="yes" />
241 <CustomActionRef Id="WixQueryOsDirs" /> 242 <CustomActionRef Id="$(var.Prefix)QueryOsDirs$(var.Suffix)" />
242 </Fragment> 243 </Fragment>
243 <Fragment> 244 <Fragment>
244 <Property Id="WIX_DIR_COMMON_ALTSTARTUP" Secure="yes" /> 245 <Property Id="WIX_DIR_COMMON_ALTSTARTUP" Secure="yes" />
245 <CustomActionRef Id="WixQueryOsDirs" /> 246 <CustomActionRef Id="$(var.Prefix)QueryOsDirs$(var.Suffix)" />
246 </Fragment> 247 </Fragment>
247 <Fragment> 248 <Fragment>
248 <Property Id="WIX_DIR_COMMON_DOCUMENTS" Secure="yes" /> 249 <Property Id="WIX_DIR_COMMON_DOCUMENTS" Secure="yes" />
249 <CustomActionRef Id="WixQueryOsDirs" /> 250 <CustomActionRef Id="$(var.Prefix)QueryOsDirs$(var.Suffix)" />
250 </Fragment> 251 </Fragment>
251 <Fragment> 252 <Fragment>
252 <Property Id="WIX_DIR_COMMON_FAVORITES" Secure="yes" /> 253 <Property Id="WIX_DIR_COMMON_FAVORITES" Secure="yes" />
253 <CustomActionRef Id="WixQueryOsDirs" /> 254 <CustomActionRef Id="$(var.Prefix)QueryOsDirs$(var.Suffix)" />
254 </Fragment> 255 </Fragment>
255 <Fragment> 256 <Fragment>
256 <Property Id="WIX_DIR_COMMON_MUSIC" Secure="yes" /> 257 <Property Id="WIX_DIR_COMMON_MUSIC" Secure="yes" />
257 <CustomActionRef Id="WixQueryOsDirs" /> 258 <CustomActionRef Id="$(var.Prefix)QueryOsDirs$(var.Suffix)" />
258 </Fragment> 259 </Fragment>
259 <Fragment> 260 <Fragment>
260 <Property Id="WIX_DIR_COMMON_PICTURES" Secure="yes" /> 261 <Property Id="WIX_DIR_COMMON_PICTURES" Secure="yes" />
261 <CustomActionRef Id="WixQueryOsDirs" /> 262 <CustomActionRef Id="$(var.Prefix)QueryOsDirs$(var.Suffix)" />
262 </Fragment> 263 </Fragment>
263 <Fragment> 264 <Fragment>
264 <Property Id="WIX_DIR_COMMON_VIDEO" Secure="yes" /> 265 <Property Id="WIX_DIR_COMMON_VIDEO" Secure="yes" />
265 <CustomActionRef Id="WixQueryOsDirs" /> 266 <CustomActionRef Id="$(var.Prefix)QueryOsDirs$(var.Suffix)" />
266 </Fragment> 267 </Fragment>
267 <Fragment> 268 <Fragment>
268 <Property Id="WIX_DIR_COOKIES" Secure="yes" /> 269 <Property Id="WIX_DIR_COOKIES" Secure="yes" />
269 <CustomActionRef Id="WixQueryOsDirs" /> 270 <CustomActionRef Id="$(var.Prefix)QueryOsDirs$(var.Suffix)" />
270 </Fragment> 271 </Fragment>
271 <Fragment> 272 <Fragment>
272 <Property Id="WIX_DIR_DESKTOP" Secure="yes" /> 273 <Property Id="WIX_DIR_DESKTOP" Secure="yes" />
273 <CustomActionRef Id="WixQueryOsDirs" /> 274 <CustomActionRef Id="$(var.Prefix)QueryOsDirs$(var.Suffix)" />
274 </Fragment> 275 </Fragment>
275 <Fragment> 276 <Fragment>
276 <Property Id="WIX_DIR_HISTORY" Secure="yes" /> 277 <Property Id="WIX_DIR_HISTORY" Secure="yes" />
277 <CustomActionRef Id="WixQueryOsDirs" /> 278 <CustomActionRef Id="$(var.Prefix)QueryOsDirs$(var.Suffix)" />
278 </Fragment> 279 </Fragment>
279 <Fragment> 280 <Fragment>
280 <Property Id="WIX_DIR_INTERNET_CACHE" Secure="yes" /> 281 <Property Id="WIX_DIR_INTERNET_CACHE" Secure="yes" />
281 <CustomActionRef Id="WixQueryOsDirs" /> 282 <CustomActionRef Id="$(var.Prefix)QueryOsDirs$(var.Suffix)" />
282 </Fragment> 283 </Fragment>
283 <Fragment> 284 <Fragment>
284 <Property Id="WIX_DIR_MYMUSIC" Secure="yes" /> 285 <Property Id="WIX_DIR_MYMUSIC" Secure="yes" />
285 <CustomActionRef Id="WixQueryOsDirs" /> 286 <CustomActionRef Id="$(var.Prefix)QueryOsDirs$(var.Suffix)" />
286 </Fragment> 287 </Fragment>
287 <Fragment> 288 <Fragment>
288 <Property Id="WIX_DIR_MYPICTURES" Secure="yes" /> 289 <Property Id="WIX_DIR_MYPICTURES" Secure="yes" />
289 <CustomActionRef Id="WixQueryOsDirs" /> 290 <CustomActionRef Id="$(var.Prefix)QueryOsDirs$(var.Suffix)" />
290 </Fragment> 291 </Fragment>
291 <Fragment> 292 <Fragment>
292 <Property Id="WIX_DIR_MYVIDEO" Secure="yes" /> 293 <Property Id="WIX_DIR_MYVIDEO" Secure="yes" />
293 <CustomActionRef Id="WixQueryOsDirs" /> 294 <CustomActionRef Id="$(var.Prefix)QueryOsDirs$(var.Suffix)" />
294 </Fragment> 295 </Fragment>
295 <Fragment> 296 <Fragment>
296 <Property Id="WIX_DIR_NETHOOD" Secure="yes" /> 297 <Property Id="WIX_DIR_NETHOOD" Secure="yes" />
297 <CustomActionRef Id="WixQueryOsDirs" /> 298 <CustomActionRef Id="$(var.Prefix)QueryOsDirs$(var.Suffix)" />
298 </Fragment> 299 </Fragment>
299 <Fragment> 300 <Fragment>
300 <Property Id="WIX_DIR_PERSONAL" Secure="yes" /> 301 <Property Id="WIX_DIR_PERSONAL" Secure="yes" />
301 <CustomActionRef Id="WixQueryOsDirs" /> 302 <CustomActionRef Id="$(var.Prefix)QueryOsDirs$(var.Suffix)" />
302 </Fragment> 303 </Fragment>
303 <Fragment> 304 <Fragment>
304 <Property Id="WIX_DIR_PRINTHOOD" Secure="yes" /> 305 <Property Id="WIX_DIR_PRINTHOOD" Secure="yes" />
305 <CustomActionRef Id="WixQueryOsDirs" /> 306 <CustomActionRef Id="$(var.Prefix)QueryOsDirs$(var.Suffix)" />
306 </Fragment> 307 </Fragment>
307 <Fragment> 308 <Fragment>
308 <Property Id="WIX_DIR_PROFILE" Secure="yes" /> 309 <Property Id="WIX_DIR_PROFILE" Secure="yes" />
309 <CustomActionRef Id="WixQueryOsDirs" /> 310 <CustomActionRef Id="$(var.Prefix)QueryOsDirs$(var.Suffix)" />
310 </Fragment> 311 </Fragment>
311 <Fragment> 312 <Fragment>
312 <Property Id="WIX_DIR_RECENT" Secure="yes" /> 313 <Property Id="WIX_DIR_RECENT" Secure="yes" />
313 <CustomActionRef Id="WixQueryOsDirs" /> 314 <CustomActionRef Id="$(var.Prefix)QueryOsDirs$(var.Suffix)" />
314 </Fragment> 315 </Fragment>
315 <Fragment> 316 <Fragment>
316 <Property Id="WIX_DIR_RESOURCES" Secure="yes" /> 317 <Property Id="WIX_DIR_RESOURCES" Secure="yes" />
317 <CustomActionRef Id="WixQueryOsDirs" /> 318 <CustomActionRef Id="$(var.Prefix)QueryOsDirs$(var.Suffix)" />
318 </Fragment> 319 </Fragment>
319 320
320 <Fragment> 321 <Fragment>
321 <CustomAction Id="WixQueryOsWellKnownSID" BinaryKey="UtilCA" DllEntry="WixQueryOsWellKnownSID" Execute="firstSequence" Return="check" SuppressModularization="yes" /> 322 <CustomAction Id="$(var.Prefix)QueryOsWellKnownSID$(var.Suffix)" BinaryKey="$(var.Prefix)UtilCA$(var.Suffix)" DllEntry="WixQueryOsWellKnownSID" Execute="firstSequence" Return="check" SuppressModularization="yes" />
322 323
323 <InstallExecuteSequence> 324 <InstallExecuteSequence>
324 <Custom Action="WixQueryOsWellKnownSID" After="AppSearch" Overridable="yes">VersionNT &gt; 400 OR (VersionNT = 400 AND ServicePackLevel &gt; 3)</Custom> 325 <Custom Action="$(var.Prefix)QueryOsWellKnownSID$(var.Suffix)" After="AppSearch" Overridable="yes">VersionNT &gt; 400 OR (VersionNT = 400 AND ServicePackLevel &gt; 3)</Custom>
325 </InstallExecuteSequence> 326 </InstallExecuteSequence>
326 327
327 <InstallUISequence> 328 <InstallUISequence>
328 <Custom Action="WixQueryOsWellKnownSID" After="AppSearch" Overridable="yes">VersionNT &gt; 400 OR (VersionNT = 400 AND ServicePackLevel &gt; 3)</Custom> 329 <Custom Action="$(var.Prefix)QueryOsWellKnownSID$(var.Suffix)" After="AppSearch" Overridable="yes">VersionNT &gt; 400 OR (VersionNT = 400 AND ServicePackLevel &gt; 3)</Custom>
329 </InstallUISequence> 330 </InstallUISequence>
330 </Fragment> 331 </Fragment>
331 332
332 <Fragment> 333 <Fragment>
333 <Property Id="WIX_ACCOUNT_LOCALSYSTEM" Secure="yes" /> 334 <Property Id="WIX_ACCOUNT_LOCALSYSTEM" Secure="yes" />
334 <CustomActionRef Id="WixQueryOsWellKnownSID" /> 335 <CustomActionRef Id="$(var.Prefix)QueryOsWellKnownSID$(var.Suffix)" />
335 </Fragment> 336 </Fragment>
336 <Fragment> 337 <Fragment>
337 <Property Id="WIX_ACCOUNT_LOCALSERVICE" Secure="yes" /> 338 <Property Id="WIX_ACCOUNT_LOCALSERVICE" Secure="yes" />
338 <CustomActionRef Id="WixQueryOsWellKnownSID" /> 339 <CustomActionRef Id="$(var.Prefix)QueryOsWellKnownSID$(var.Suffix)" />
339 </Fragment> 340 </Fragment>
340 <Fragment> 341 <Fragment>
341 <Property Id="WIX_ACCOUNT_NETWORKSERVICE" Secure="yes" /> 342 <Property Id="WIX_ACCOUNT_NETWORKSERVICE" Secure="yes" />
342 <CustomActionRef Id="WixQueryOsWellKnownSID" /> 343 <CustomActionRef Id="$(var.Prefix)QueryOsWellKnownSID$(var.Suffix)" />
343 </Fragment> 344 </Fragment>
344 <Fragment> 345 <Fragment>
345 <Property Id="WIX_ACCOUNT_ADMINISTRATORS" Secure="yes" /> 346 <Property Id="WIX_ACCOUNT_ADMINISTRATORS" Secure="yes" />
346 <CustomActionRef Id="WixQueryOsWellKnownSID" /> 347 <CustomActionRef Id="$(var.Prefix)QueryOsWellKnownSID$(var.Suffix)" />
347 </Fragment> 348 </Fragment>
348 <Fragment> 349 <Fragment>
349 <Property Id="WIX_ACCOUNT_USERS" Secure="yes" /> 350 <Property Id="WIX_ACCOUNT_USERS" Secure="yes" />
350 <CustomActionRef Id="WixQueryOsWellKnownSID" /> 351 <CustomActionRef Id="$(var.Prefix)QueryOsWellKnownSID$(var.Suffix)" />
351 </Fragment> 352 </Fragment>
352 <Fragment> 353 <Fragment>
353 <Property Id="WIX_ACCOUNT_GUESTS" Secure="yes" /> 354 <Property Id="WIX_ACCOUNT_GUESTS" Secure="yes" />
354 <CustomActionRef Id="WixQueryOsWellKnownSID" /> 355 <CustomActionRef Id="$(var.Prefix)QueryOsWellKnownSID$(var.Suffix)" />
355 </Fragment> 356 </Fragment>
356 <Fragment> 357 <Fragment>
357 <Property Id="WIX_ACCOUNT_PERFLOGUSERS" Secure="yes" /> 358 <Property Id="WIX_ACCOUNT_PERFLOGUSERS" Secure="yes" />
358 <Property Id="WIX_ACCOUNT_PERFLOGUSERS_NODOMAIN" Secure="yes" /> 359 <Property Id="WIX_ACCOUNT_PERFLOGUSERS_NODOMAIN" Secure="yes" />
359 <CustomActionRef Id="WixQueryOsWellKnownSID" /> 360 <CustomActionRef Id="$(var.Prefix)QueryOsWellKnownSID$(var.Suffix)" />
360 </Fragment> 361 </Fragment>
361 362
362 <Fragment> 363 <Fragment>
363 <CustomAction Id="WixQueryOsDriverInfo" BinaryKey="UtilCA" DllEntry="WixQueryOsDriverInfo" Execute="firstSequence" Return="check" SuppressModularization="yes" /> 364 <CustomAction Id="$(var.Prefix)QueryOsDriverInfo$(var.Suffix)" BinaryKey="$(var.Prefix)UtilCA$(var.Suffix)" DllEntry="WixQueryOsDriverInfo" Execute="firstSequence" Return="check" SuppressModularization="yes" />
364 365
365 <InstallExecuteSequence> 366 <InstallExecuteSequence>
366 <Custom Action="WixQueryOsDriverInfo" After="AppSearch" Overridable="yes">VersionNT &gt; 400 OR (VersionNT = 400 AND ServicePackLevel &gt; 3)</Custom> 367 <Custom Action="$(var.Prefix)QueryOsDriverInfo$(var.Suffix)" After="AppSearch" Overridable="yes">VersionNT &gt; 400 OR (VersionNT = 400 AND ServicePackLevel &gt; 3)</Custom>
367 </InstallExecuteSequence> 368 </InstallExecuteSequence>
368 369
369 <InstallUISequence> 370 <InstallUISequence>
370 <Custom Action="WixQueryOsDriverInfo" After="AppSearch" Overridable="yes">VersionNT &gt; 400 OR (VersionNT = 400 AND ServicePackLevel &gt; 3)</Custom> 371 <Custom Action="$(var.Prefix)QueryOsDriverInfo$(var.Suffix)" After="AppSearch" Overridable="yes">VersionNT &gt; 400 OR (VersionNT = 400 AND ServicePackLevel &gt; 3)</Custom>
371 </InstallUISequence> 372 </InstallUISequence>
372 </Fragment> 373 </Fragment>
373 374
374 <Fragment> 375 <Fragment>
375 <Property Id="WIX_WDDM_DRIVER_PRESENT" Secure="yes" /> 376 <Property Id="WIX_WDDM_DRIVER_PRESENT" Secure="yes" />
376 <CustomActionRef Id="WixQueryOsDriverInfo" /> 377 <CustomActionRef Id="$(var.Prefix)QueryOsDriverInfo$(var.Suffix)" />
377 </Fragment> 378 </Fragment>
378 379
379 <Fragment> 380 <Fragment>
380 <Property Id="WIX_DWM_COMPOSITION_ENABLED" Secure="yes" /> 381 <Property Id="WIX_DWM_COMPOSITION_ENABLED" Secure="yes" />
381 <CustomActionRef Id="WixQueryOsDriverInfo" /> 382 <CustomActionRef Id="$(var.Prefix)QueryOsDriverInfo$(var.Suffix)" />
382 </Fragment> 383 </Fragment>
383 384
384 <!-- ShellExec custom actions (for when only one is needed; multiple executions need their own IDs) --> 385 <!-- ShellExec custom actions (for when only one is needed; multiple executions need their own IDs) -->
385 <Fragment> 386 <Fragment>
386 <PropertyRef Id="WixShellExecBinaryId" /> 387 <PropertyRef Id="WixShellExecBinaryId" />
387 <CustomAction Id="WixShellExecBinary" BinaryKey="UtilCA" DllEntry="WixShellExecBinary" Execute="immediate" Return="check" Impersonate="yes" /> 388 <CustomAction Id="$(var.Prefix)ShellExecBinary$(var.Suffix)" BinaryKey="$(var.Prefix)UtilCA$(var.Suffix)" DllEntry="WixShellExecBinary" Execute="immediate" Return="check" Impersonate="yes" />
388 </Fragment> 389 </Fragment>
389 390
390 <Fragment> 391 <Fragment>
391 <PropertyRef Id="WixShellExecTarget" /> 392 <PropertyRef Id="WixShellExecTarget" />
392 <CustomAction Id="WixShellExec" BinaryKey="UtilCA" DllEntry="WixShellExec" Execute="immediate" Return="check" Impersonate="yes" /> 393 <CustomAction Id="$(var.Prefix)ShellExec$(var.Suffix)" BinaryKey="$(var.Prefix)UtilCA$(var.Suffix)" DllEntry="WixShellExec" Execute="immediate" Return="check" Impersonate="yes" />
393 </Fragment> 394 </Fragment>
394 395
395 <Fragment> 396 <Fragment>
396 <PropertyRef Id="WixUnelevatedShellExecTarget" /> 397 <PropertyRef Id="WixUnelevatedShellExecTarget" />
397 <CustomAction Id="WixUnelevatedShellExec" BinaryKey="UtilCA" DllEntry="WixUnelevatedShellExec" Execute="immediate" Return="check" Impersonate="yes" /> 398 <CustomAction Id="$(var.Prefix)UnelevatedShellExec$(var.Suffix)" BinaryKey="$(var.Prefix)UtilCA$(var.Suffix)" DllEntry="WixUnelevatedShellExec" Execute="immediate" Return="check" Impersonate="yes" />
398 </Fragment>
399
400 <Fragment>
401 <PropertyRef Id="QtExecCmdLine" />
402 <CustomAction Id="QtExec" BinaryKey="UtilCA" DllEntry="CAQuietExec" Execute="immediate" Return="check" Impersonate="yes" />
403 </Fragment>
404
405 <Fragment>
406 <PropertyRef Id="QtExec64CmdLine" />
407 <CustomAction Id="QtExec64" BinaryKey="UtilCA" DllEntry="CAQuietExec64" Execute="immediate" Return="check" Impersonate="yes" />
408 </Fragment> 399 </Fragment>
409 400
410 <Fragment> 401 <Fragment>
411 <PropertyRef Id="WixQuietExecCmdLine" /> 402 <PropertyRef Id="WixQuietExecCmdLine" />
412 <CustomAction Id="WixQuietExec" BinaryKey="UtilCA" DllEntry="WixQuietExec" Execute="immediate" Return="check" Impersonate="yes" /> 403 <CustomAction Id="$(var.Prefix)QuietExec$(var.Suffix)" BinaryKey="$(var.Prefix)UtilCA$(var.Suffix)" DllEntry="WixQuietExec" Execute="immediate" Return="check" Impersonate="yes" />
413 </Fragment> 404 </Fragment>
414 405
415 <Fragment> 406 <Fragment>
416 <PropertyRef Id="WixQuietExec64CmdLine" /> 407 <PropertyRef Id="WixQuietExec64CmdLine" />
417 <CustomAction Id="WixQuietExec64" BinaryKey="UtilCA" DllEntry="WixQuietExec64" Execute="immediate" Return="check" Impersonate="yes" /> 408 <CustomAction Id="$(var.Prefix)QuietExec64$(var.Suffix)" BinaryKey="$(var.Prefix)UtilCA$(var.Suffix)" DllEntry="WixQuietExec64" Execute="immediate" Return="check" Impersonate="yes" />
418 </Fragment> 409 </Fragment>
419 410
420 <!-- SilentExec custom actions differ from QtExec in that they do not log the commandline or output of the exe --> 411 <!-- SilentExec custom actions differ from QtExec in that they do not log the commandline or output of the exe -->
421 <Fragment> 412 <Fragment>
422 <PropertyRef Id="WixSilentExecCmdLine" /> 413 <PropertyRef Id="WixSilentExecCmdLine" />
423 <CustomAction Id="WixSilentExec" BinaryKey="UtilCA" DllEntry="WixSilentExec" Execute="immediate" Return="check" Impersonate="yes" /> 414 <CustomAction Id="$(var.Prefix)SilentExec$(var.Suffix)" BinaryKey="$(var.Prefix)UtilCA$(var.Suffix)" DllEntry="WixSilentExec" Execute="immediate" Return="check" Impersonate="yes" />
424 </Fragment> 415 </Fragment>
425 416
426 <Fragment> 417 <Fragment>
427 <PropertyRef Id="WixSilentExec64CmdLine" /> 418 <PropertyRef Id="WixSilentExec64CmdLine" />
428 <CustomAction Id="WixSilentExec64" BinaryKey="UtilCA" DllEntry="WixSilentExec64" Execute="immediate" Return="check" Impersonate="yes" /> 419 <CustomAction Id="$(var.Prefix)SilentExec64$(var.Suffix)" BinaryKey="$(var.Prefix)UtilCA$(var.Suffix)" DllEntry="WixSilentExec64" Execute="immediate" Return="check" Impersonate="yes" />
429 </Fragment> 420 </Fragment>
430</Wix> 421</Wix>
diff --git a/src/wixlib/UtilExtension_Platform.wxi b/src/wixlib/UtilExtension_Platform.wxi
index 4f76c687..0d7fed09 100644
--- a/src/wixlib/UtilExtension_Platform.wxi
+++ b/src/wixlib/UtilExtension_Platform.wxi
@@ -3,8 +3,7 @@
3 3
4 4
5<Include xmlns="http://wixtoolset.org/schemas/v4/wxs"> 5<Include xmlns="http://wixtoolset.org/schemas/v4/wxs">
6 6 <?include caDecor.wxi ?>
7 <?include caSuffix.wxi ?>
8 7
9 <!-- 8 <!--
10 The following actions do not support X64. 9 The following actions do not support X64.
@@ -12,178 +11,178 @@
12 <?if $(var.platform)!=x64 ?> 11 <?if $(var.platform)!=x64 ?>
13 12
14 <Fragment> 13 <Fragment>
15 <CustomAction Id="WixCheckRebootRequired$(var.Suffix)" BinaryKey="UtilCA$(var.Suffix)" DllEntry="WixCheckRebootRequired" Execute="immediate" Return="ignore" SuppressModularization="yes" /> 14 <CustomAction Id="$(var.Prefix)CheckRebootRequired$(var.Suffix)" BinaryKey="$(var.Prefix)UtilCA$(var.Suffix)" DllEntry="WixCheckRebootRequired" Execute="immediate" Return="ignore" SuppressModularization="yes" />
16 15
17 <InstallExecuteSequence> 16 <InstallExecuteSequence>
18 <!-- Condition this so it runs on install and MMode, but not uninstall --> 17 <!-- Condition this so it runs on install and MMode, but not uninstall -->
19 <Custom Action="WixCheckRebootRequired$(var.Suffix)" After="InstallFinalize" Overridable="yes">NOT REMOVE~="ALL" AND VersionNT &gt; 400</Custom> 18 <Custom Action="$(var.Prefix)CheckRebootRequired$(var.Suffix)" After="InstallFinalize" Overridable="yes">NOT REMOVE~="ALL" AND VersionNT &gt; 400</Custom>
20 </InstallExecuteSequence> 19 </InstallExecuteSequence>
21 </Fragment> 20 </Fragment>
22 21
23 <Fragment> 22 <Fragment>
24 <CustomAction Id="WixCloseApplications$(var.Suffix)" BinaryKey="UtilCA$(var.Suffix)" DllEntry="WixCloseApplications" Execute="immediate" Return="check" SuppressModularization="yes" /> 23 <CustomAction Id="$(var.Prefix)CloseApplications$(var.Suffix)" BinaryKey="$(var.Prefix)UtilCA$(var.Suffix)" DllEntry="WixCloseApplications" Execute="immediate" Return="check" SuppressModularization="yes" />
25 <CustomAction Id="WixCloseApplicationsDeferred$(var.DeferredSuffix)" BinaryKey="UtilCA$(var.Suffix)" DllEntry="WixCloseApplicationsDeferred" Impersonate="no" Execute="deferred" Return="check" SuppressModularization="yes" /> 24 <CustomAction Id="$(var.Prefix)CloseApplicationsDeferred$(var.Suffix)" BinaryKey="$(var.Prefix)UtilCA$(var.Suffix)" DllEntry="WixCloseApplicationsDeferred" Impersonate="no" Execute="deferred" Return="check" SuppressModularization="yes" />
26 <CustomActionRef Id="WixCheckRebootRequired$(var.Suffix)" /> 25 <CustomActionRef Id="$(var.Prefix)CheckRebootRequired$(var.Suffix)" />
27 26
28 <InstallExecuteSequence> 27 <InstallExecuteSequence>
29 <Custom Action="WixCloseApplications$(var.Suffix)" Before="InstallFiles" Overridable="yes">VersionNT &gt; 400</Custom> 28 <Custom Action="$(var.Prefix)CloseApplications$(var.Suffix)" Before="InstallFiles" Overridable="yes">VersionNT &gt; 400</Custom>
30 </InstallExecuteSequence> 29 </InstallExecuteSequence>
31 </Fragment> 30 </Fragment>
32 31
33 <Fragment> 32 <Fragment>
34 <CustomAction Id="WixRegisterRestartResources$(var.Suffix)" BinaryKey="UtilCA$(var.Suffix)" DllEntry="WixRegisterRestartResources$(var.Suffix)" Execute="immediate" Return="check" SuppressModularization="yes" /> 33 <CustomAction Id="$(var.Prefix)RegisterRestartResources$(var.Suffix)" BinaryKey="$(var.Prefix)UtilCA$(var.Suffix)" DllEntry="WixRegisterRestartResources$(var.Suffix)" Execute="immediate" Return="check" SuppressModularization="yes" />
35 34
36 <InstallExecuteSequence> 35 <InstallExecuteSequence>
37 <Custom Action="WixRegisterRestartResources$(var.Suffix)" Before="InstallValidate" Overridable="yes" /> 36 <Custom Action="$(var.Prefix)RegisterRestartResources$(var.Suffix)" Before="InstallValidate" Overridable="yes" />
38 </InstallExecuteSequence> 37 </InstallExecuteSequence>
39 </Fragment> 38 </Fragment>
40 39
41 <Fragment> 40 <Fragment>
42 <UIRef Id="ConfigureUsersErrorText" /> 41 <UIRef Id="ConfigureUsersErrorText" />
43 42
44 <CustomAction Id="ConfigureUsers$(var.Suffix)" BinaryKey="UtilCA$(var.Suffix)" DllEntry="ConfigureUsers" Execute="immediate" Return="check" SuppressModularization="yes" /> 43 <CustomAction Id="$(var.Prefix)ConfigureUsers$(var.Suffix)" BinaryKey="$(var.Prefix)UtilCA$(var.Suffix)" DllEntry="ConfigureUsers" Execute="immediate" Return="check" SuppressModularization="yes" />
45 <CustomAction Id="CreateUser$(var.DeferredSuffix)" BinaryKey="UtilCA$(var.Suffix)" DllEntry="CreateUser" Impersonate="no" Execute="deferred" Return="check" HideTarget="yes" SuppressModularization="yes" /> 44 <CustomAction Id="$(var.Prefix)CreateUser$(var.Suffix)" BinaryKey="$(var.Prefix)UtilCA$(var.Suffix)" DllEntry="CreateUser" Impersonate="no" Execute="deferred" Return="check" HideTarget="yes" SuppressModularization="yes" />
46 <CustomAction Id="CreateUserRollback$(var.DeferredSuffix)" BinaryKey="UtilCA$(var.Suffix)" DllEntry="RemoveUser" Impersonate="no" Execute="rollback" Return="check" HideTarget="yes" SuppressModularization="yes" /> 45 <CustomAction Id="$(var.Prefix)CreateUserRollback$(var.Suffix)" BinaryKey="$(var.Prefix)UtilCA$(var.Suffix)" DllEntry="RemoveUser" Impersonate="no" Execute="rollback" Return="check" HideTarget="yes" SuppressModularization="yes" />
47 <!-- RemoveUser is a type commit action because it is not possible to rollback the removal of a user --> 46 <!-- RemoveUser is a type commit action because it is not possible to rollback the removal of a user -->
48 <CustomAction Id="RemoveUser$(var.DeferredSuffix)" BinaryKey="UtilCA$(var.Suffix)" DllEntry="RemoveUser" Impersonate="no" Execute="commit" Return="ignore" HideTarget="yes" SuppressModularization="yes" /> 47 <CustomAction Id="$(var.Prefix)RemoveUser$(var.Suffix)" BinaryKey="$(var.Prefix)UtilCA$(var.Suffix)" DllEntry="RemoveUser" Impersonate="no" Execute="commit" Return="ignore" HideTarget="yes" SuppressModularization="yes" />
49 48
50 <InstallExecuteSequence> 49 <InstallExecuteSequence>
51 <Custom Action="ConfigureUsers$(var.Suffix)" Before="InstallFiles" Overridable="yes">VersionNT &gt; 400</Custom> 50 <Custom Action="$(var.Prefix)ConfigureUsers$(var.Suffix)" Before="InstallFiles" Overridable="yes">VersionNT &gt; 400</Custom>
52 </InstallExecuteSequence> 51 </InstallExecuteSequence>
53 </Fragment> 52 </Fragment>
54 53
55 <Fragment> 54 <Fragment>
56 <UIRef Id="ConfigureSmbErrorsText" /> 55 <UIRef Id="ConfigureSmbErrorsText" />
57 56
58 <CustomAction Id="ConfigureSmbInstall$(var.Suffix)" BinaryKey="UtilCA$(var.Suffix)" DllEntry="ConfigureSmbInstall" Execute="immediate" Return="check" SuppressModularization="yes" /> 57 <CustomAction Id="$(var.Prefix)ConfigureSmbInstall$(var.Suffix)" BinaryKey="$(var.Prefix)UtilCA$(var.Suffix)" DllEntry="ConfigureSmbInstall" Execute="immediate" Return="check" SuppressModularization="yes" />
59 <CustomAction Id="ConfigureSmbUninstall$(var.Suffix)" BinaryKey="UtilCA$(var.Suffix)" DllEntry="ConfigureSmbUninstall" Execute="immediate" Return="check" SuppressModularization="yes" /> 58 <CustomAction Id="$(var.Prefix)ConfigureSmbUninstall$(var.Suffix)" BinaryKey="$(var.Prefix)UtilCA$(var.Suffix)" DllEntry="ConfigureSmbUninstall" Execute="immediate" Return="check" SuppressModularization="yes" />
60 <CustomAction Id="CreateSmb$(var.DeferredSuffix)" BinaryKey="UtilCA$(var.Suffix)" DllEntry="CreateSmb" Impersonate="no" Execute="deferred" Return="check" HideTarget="yes" SuppressModularization="yes" /> 59 <CustomAction Id="$(var.Prefix)CreateSmb$(var.Suffix)" BinaryKey="$(var.Prefix)UtilCA$(var.Suffix)" DllEntry="CreateSmb" Impersonate="no" Execute="deferred" Return="check" HideTarget="yes" SuppressModularization="yes" />
61 <CustomAction Id="CreateSmbRollback$(var.DeferredSuffix)" BinaryKey="UtilCA$(var.Suffix)" DllEntry="DropSmb" Impersonate="no" Execute="rollback" Return="ignore" HideTarget="yes" SuppressModularization="yes" /> 60 <CustomAction Id="$(var.Prefix)CreateSmbRollback$(var.Suffix)" BinaryKey="$(var.Prefix)UtilCA$(var.Suffix)" DllEntry="DropSmb" Impersonate="no" Execute="rollback" Return="ignore" HideTarget="yes" SuppressModularization="yes" />
62 <CustomAction Id="DropSmb$(var.DeferredSuffix)" BinaryKey="UtilCA$(var.Suffix)" DllEntry="DropSmb" Impersonate="no" Execute="deferred" Return="check" HideTarget="yes" SuppressModularization="yes" /> 61 <CustomAction Id="$(var.Prefix)DropSmb$(var.Suffix)" BinaryKey="$(var.Prefix)UtilCA$(var.Suffix)" DllEntry="DropSmb" Impersonate="no" Execute="deferred" Return="check" HideTarget="yes" SuppressModularization="yes" />
63 <CustomAction Id="DropSmbRollback$(var.DeferredSuffix)" BinaryKey="UtilCA$(var.Suffix)" DllEntry="CreateSmb" Impersonate="no" Execute="rollback" Return="ignore" HideTarget="yes" SuppressModularization="yes" /> 62 <CustomAction Id="$(var.Prefix)DropSmbRollback$(var.Suffix)" BinaryKey="$(var.Prefix)UtilCA$(var.Suffix)" DllEntry="CreateSmb" Impersonate="no" Execute="rollback" Return="ignore" HideTarget="yes" SuppressModularization="yes" />
64 63
65 <InstallExecuteSequence> 64 <InstallExecuteSequence>
66 <Custom Action="ConfigureSmbInstall$(var.Suffix)" After="InstallFiles" Overridable="yes">VersionNT &gt; 400</Custom> 65 <Custom Action="$(var.Prefix)ConfigureSmbInstall$(var.Suffix)" After="InstallFiles" Overridable="yes">VersionNT &gt; 400</Custom>
67 <Custom Action="ConfigureSmbUninstall$(var.Suffix)" After="RemoveFiles" Overridable="yes">VersionNT &gt; 400</Custom> 66 <Custom Action="$(var.Prefix)ConfigureSmbUninstall$(var.Suffix)" After="RemoveFiles" Overridable="yes">VersionNT &gt; 400</Custom>
68 </InstallExecuteSequence> 67 </InstallExecuteSequence>
69 </Fragment> 68 </Fragment>
70 69
71 <Fragment> 70 <Fragment>
72 <UIRef Id="PerCounterDataErrorsText" /> 71 <UIRef Id="PerCounterDataErrorsText" />
73 72
74 <CustomAction Id="InstallPerfCounterData$(var.Suffix)" BinaryKey="UtilCA$(var.Suffix)" DllEntry="InstallPerfCounterData" Execute="immediate" Return="check" SuppressModularization="yes" /> 73 <CustomAction Id="$(var.Prefix)InstallPerfCounterData$(var.Suffix)" BinaryKey="$(var.Prefix)UtilCA$(var.Suffix)" DllEntry="InstallPerfCounterData" Execute="immediate" Return="check" SuppressModularization="yes" />
75 <CustomAction Id="UninstallPerfCounterData$(var.Suffix)" BinaryKey="UtilCA$(var.Suffix)" DllEntry="UninstallPerfCounterData" Execute="immediate" Return="check" SuppressModularization="yes" /> 74 <CustomAction Id="$(var.Prefix)UninstallPerfCounterData$(var.Suffix)" BinaryKey="$(var.Prefix)UtilCA$(var.Suffix)" DllEntry="UninstallPerfCounterData" Execute="immediate" Return="check" SuppressModularization="yes" />
76 <CustomAction Id="RegisterPerfCounterData$(var.DeferredSuffix)" BinaryKey="UtilCA$(var.Suffix)" DllEntry="RegisterPerfCounterData" Impersonate="no" Execute="deferred" Return="check" HideTarget="yes" SuppressModularization="yes" /> 75 <CustomAction Id="$(var.Prefix)RegisterPerfCounterData$(var.Suffix)" BinaryKey="$(var.Prefix)UtilCA$(var.Suffix)" DllEntry="RegisterPerfCounterData" Impersonate="no" Execute="deferred" Return="check" HideTarget="yes" SuppressModularization="yes" />
77 <CustomAction Id="UnregisterPerfCounterData$(var.DeferredSuffix)" BinaryKey="UtilCA$(var.Suffix)" DllEntry="UnregisterPerfCounterData" Impersonate="no" Execute="deferred" Return="check" HideTarget="yes" SuppressModularization="yes" /> 76 <CustomAction Id="$(var.Prefix)UnregisterPerfCounterData$(var.Suffix)" BinaryKey="$(var.Prefix)UtilCA$(var.Suffix)" DllEntry="UnregisterPerfCounterData" Impersonate="no" Execute="deferred" Return="check" HideTarget="yes" SuppressModularization="yes" />
78 <CustomAction Id="RollbackRegisterPerfCounterData$(var.DeferredSuffix)" BinaryKey="UtilCA$(var.Suffix)" DllEntry="UnregisterPerfCounterData" Impersonate="no" Execute="rollback" Return="check" HideTarget="yes" SuppressModularization="yes" /> 77 <CustomAction Id="$(var.Prefix)RollbackRegisterPerfCounterData$(var.Suffix)" BinaryKey="$(var.Prefix)UtilCA$(var.Suffix)" DllEntry="UnregisterPerfCounterData" Impersonate="no" Execute="rollback" Return="check" HideTarget="yes" SuppressModularization="yes" />
79 <CustomAction Id="RollbackUnregisterPerfCounterData$(var.DeferredSuffix)" BinaryKey="UtilCA$(var.Suffix)" DllEntry="RegisterPerfCounterData" Impersonate="no" Execute="rollback" Return="check" HideTarget="yes" SuppressModularization="yes" /> 78 <CustomAction Id="$(var.Prefix)RollbackUnregisterPerfCounterData$(var.Suffix)" BinaryKey="$(var.Prefix)UtilCA$(var.Suffix)" DllEntry="RegisterPerfCounterData" Impersonate="no" Execute="rollback" Return="check" HideTarget="yes" SuppressModularization="yes" />
80 79
81 <InstallExecuteSequence> 80 <InstallExecuteSequence>
82 <Custom Action="InstallPerfCounterData$(var.Suffix)" After="WriteRegistryValues" Overridable="yes">VersionNT &gt; 400</Custom> 81 <Custom Action="$(var.Prefix)InstallPerfCounterData$(var.Suffix)" After="WriteRegistryValues" Overridable="yes">VersionNT &gt; 400</Custom>
83 <Custom Action="UninstallPerfCounterData$(var.Suffix)" Before="RemoveRegistryValues" Overridable="yes">VersionNT &gt; 400</Custom> 82 <Custom Action="$(var.Prefix)UninstallPerfCounterData$(var.Suffix)" Before="RemoveRegistryValues" Overridable="yes">VersionNT &gt; 400</Custom>
84 </InstallExecuteSequence> 83 </InstallExecuteSequence>
85 </Fragment> 84 </Fragment>
86 85
87 <Fragment> 86 <Fragment>
88 <UIRef Id="ConfigurePerfmonErrorsText" /> 87 <UIRef Id="ConfigurePerfmonErrorsText" />
89 88
90 <CustomAction Id="ConfigurePerfmonInstall$(var.Suffix)" BinaryKey="UtilCA$(var.Suffix)" DllEntry="ConfigurePerfmonInstall" Execute="immediate" Return="check" SuppressModularization="yes" /> 89 <CustomAction Id="$(var.Prefix)ConfigurePerfmonInstall$(var.Suffix)" BinaryKey="$(var.Prefix)UtilCA$(var.Suffix)" DllEntry="ConfigurePerfmonInstall" Execute="immediate" Return="check" SuppressModularization="yes" />
91 <CustomAction Id="ConfigurePerfmonUninstall$(var.Suffix)" BinaryKey="UtilCA$(var.Suffix)" DllEntry="ConfigurePerfmonUninstall" Execute="immediate" Return="check" SuppressModularization="yes" /> 90 <CustomAction Id="$(var.Prefix)ConfigurePerfmonUninstall$(var.Suffix)" BinaryKey="$(var.Prefix)UtilCA$(var.Suffix)" DllEntry="ConfigurePerfmonUninstall" Execute="immediate" Return="check" SuppressModularization="yes" />
92 <CustomAction Id="RegisterPerfmon$(var.DeferredSuffix)" BinaryKey="UtilCA$(var.Suffix)" DllEntry="RegisterPerfmon" Impersonate="no" Execute="deferred" Return="check" SuppressModularization="yes" /> 91 <CustomAction Id="$(var.Prefix)RegisterPerfmon$(var.Suffix)" BinaryKey="$(var.Prefix)UtilCA$(var.Suffix)" DllEntry="RegisterPerfmon" Impersonate="no" Execute="deferred" Return="check" SuppressModularization="yes" />
93 <CustomAction Id="UnregisterPerfmon$(var.DeferredSuffix)" BinaryKey="UtilCA$(var.Suffix)" DllEntry="UnregisterPerfmon" Impersonate="no" Execute="deferred" Return="check" SuppressModularization="yes" /> 92 <CustomAction Id="$(var.Prefix)UnregisterPerfmon$(var.Suffix)" BinaryKey="$(var.Prefix)UtilCA$(var.Suffix)" DllEntry="UnregisterPerfmon" Impersonate="no" Execute="deferred" Return="check" SuppressModularization="yes" />
94 <CustomAction Id="RollbackRegisterPerfmon$(var.DeferredSuffix)" BinaryKey="UtilCA$(var.Suffix)" DllEntry="UnregisterPerfmon" Impersonate="no" Execute="rollback" Return="check" SuppressModularization="yes" /> 93 <CustomAction Id="$(var.Prefix)RollbackRegisterPerfmon$(var.Suffix)" BinaryKey="$(var.Prefix)UtilCA$(var.Suffix)" DllEntry="UnregisterPerfmon" Impersonate="no" Execute="rollback" Return="check" SuppressModularization="yes" />
95 <CustomAction Id="RollbackUnregisterPerfmon$(var.DeferredSuffix)" BinaryKey="UtilCA$(var.Suffix)" DllEntry="RegisterPerfmon" Impersonate="no" Execute="rollback" Return="check" SuppressModularization="yes" /> 94 <CustomAction Id="$(var.Prefix)RollbackUnregisterPerfmon$(var.Suffix)" BinaryKey="$(var.Prefix)UtilCA$(var.Suffix)" DllEntry="RegisterPerfmon" Impersonate="no" Execute="rollback" Return="check" SuppressModularization="yes" />
96 95
97 <InstallExecuteSequence> 96 <InstallExecuteSequence>
98 <Custom Action="ConfigurePerfmonInstall$(var.Suffix)" After="WriteRegistryValues" Overridable="yes">VersionNT &gt; 400</Custom> 97 <Custom Action="$(var.Prefix)ConfigurePerfmonInstall$(var.Suffix)" After="WriteRegistryValues" Overridable="yes">VersionNT &gt; 400</Custom>
99 <Custom Action="ConfigurePerfmonUninstall$(var.Suffix)" Before="RemoveRegistryValues" Overridable="yes">VersionNT &gt; 400</Custom> 98 <Custom Action="$(var.Prefix)ConfigurePerfmonUninstall$(var.Suffix)" Before="RemoveRegistryValues" Overridable="yes">VersionNT &gt; 400</Custom>
100 </InstallExecuteSequence> 99 </InstallExecuteSequence>
101 </Fragment> 100 </Fragment>
102 101
103 <Fragment> 102 <Fragment>
104 <CustomAction Id="ConfigurePerfmonManifestRegister$(var.Suffix)" BinaryKey="UtilCA$(var.Suffix)" DllEntry="ConfigurePerfmonManifestRegister" Execute="immediate" Return="check" SuppressModularization="yes" /> 103 <CustomAction Id="$(var.Prefix)ConfigurePerfmonManifestRegister$(var.Suffix)" BinaryKey="$(var.Prefix)UtilCA$(var.Suffix)" DllEntry="ConfigurePerfmonManifestRegister" Execute="immediate" Return="check" SuppressModularization="yes" />
105 <CustomAction Id="ConfigurePerfmonManifestUnregister$(var.Suffix)" BinaryKey="UtilCA$(var.Suffix)" DllEntry="ConfigurePerfmonManifestUnregister" Execute="immediate" Return="check" SuppressModularization="yes" /> 104 <CustomAction Id="$(var.Prefix)ConfigurePerfmonManifestUnregister$(var.Suffix)" BinaryKey="$(var.Prefix)UtilCA$(var.Suffix)" DllEntry="ConfigurePerfmonManifestUnregister" Execute="immediate" Return="check" SuppressModularization="yes" />
106 <CustomAction Id="RegisterPerfmonManifest$(var.DeferredSuffix)" BinaryKey="UtilCA$(var.Suffix)" DllEntry="CAQuietExec" Impersonate="no" Execute="deferred" Return="check" SuppressModularization="yes" /> 105 <CustomAction Id="$(var.Prefix)RegisterPerfmonManifest$(var.Suffix)" BinaryKey="$(var.Prefix)UtilCA$(var.Suffix)" DllEntry="CAQuietExec" Impersonate="no" Execute="deferred" Return="check" SuppressModularization="yes" />
107 <CustomAction Id="UnregisterPerfmonManifest$(var.DeferredSuffix)" BinaryKey="UtilCA$(var.Suffix)" DllEntry="CAQuietExec" Impersonate="no" Execute="deferred" Return="ignore" SuppressModularization="yes" /> 106 <CustomAction Id="$(var.Prefix)UnregisterPerfmonManifest$(var.Suffix)" BinaryKey="$(var.Prefix)UtilCA$(var.Suffix)" DllEntry="CAQuietExec" Impersonate="no" Execute="deferred" Return="ignore" SuppressModularization="yes" />
108 <CustomAction Id="RollbackRegisterPerfmonManifest$(var.DeferredSuffix)" BinaryKey="UtilCA$(var.Suffix)" DllEntry="CAQuietExec" Impersonate="no" Execute="rollback" Return="ignore" SuppressModularization="yes" /> 107 <CustomAction Id="$(var.Prefix)RollbackRegisterPerfmonManifest$(var.Suffix)" BinaryKey="$(var.Prefix)UtilCA$(var.Suffix)" DllEntry="CAQuietExec" Impersonate="no" Execute="rollback" Return="ignore" SuppressModularization="yes" />
109 <CustomAction Id="RollbackUnregisterPerfmonManifest$(var.DeferredSuffix)" BinaryKey="UtilCA$(var.Suffix)" DllEntry="CAQuietExec" Impersonate="no" Execute="rollback" Return="check" SuppressModularization="yes" /> 108 <CustomAction Id="$(var.Prefix)RollbackUnregisterPerfmonManifest$(var.Suffix)" BinaryKey="$(var.Prefix)UtilCA$(var.Suffix)" DllEntry="CAQuietExec" Impersonate="no" Execute="rollback" Return="check" SuppressModularization="yes" />
110 109
111 <InstallExecuteSequence> 110 <InstallExecuteSequence>
112 <Custom Action="ConfigurePerfmonManifestRegister$(var.Suffix)" After="InstallFiles" Overridable="yes">VersionNT &gt; 400</Custom> 111 <Custom Action="$(var.Prefix)ConfigurePerfmonManifestRegister$(var.Suffix)" After="InstallFiles" Overridable="yes">VersionNT &gt; 400</Custom>
113 <Custom Action="ConfigurePerfmonManifestUnregister$(var.Suffix)" After="RemoveRegistryValues" Overridable="yes">VersionNT &gt; 400</Custom> 112 <Custom Action="$(var.Prefix)ConfigurePerfmonManifestUnregister$(var.Suffix)" After="RemoveRegistryValues" Overridable="yes">VersionNT &gt; 400</Custom>
114 </InstallExecuteSequence> 113 </InstallExecuteSequence>
115 </Fragment> 114 </Fragment>
116 115
117 <Fragment> 116 <Fragment>
118 <CustomAction Id="ConfigureEventManifestRegister$(var.Suffix)" BinaryKey="UtilCA$(var.Suffix)" DllEntry="ConfigureEventManifestRegister" Execute="immediate" Return="check" SuppressModularization="yes" /> 117 <CustomAction Id="$(var.Prefix)ConfigureEventManifestRegister$(var.Suffix)" BinaryKey="$(var.Prefix)UtilCA$(var.Suffix)" DllEntry="ConfigureEventManifestRegister" Execute="immediate" Return="check" SuppressModularization="yes" />
119 <CustomAction Id="ConfigureEventManifestUnregister$(var.Suffix)" BinaryKey="UtilCA$(var.Suffix)" DllEntry="ConfigureEventManifestUnregister" Execute="immediate" Return="check" SuppressModularization="yes" /> 118 <CustomAction Id="$(var.Prefix)ConfigureEventManifestUnregister$(var.Suffix)" BinaryKey="$(var.Prefix)UtilCA$(var.Suffix)" DllEntry="ConfigureEventManifestUnregister" Execute="immediate" Return="check" SuppressModularization="yes" />
120 <CustomAction Id="RegisterEventManifest$(var.DeferredSuffix)" BinaryKey="UtilCA$(var.Suffix)" DllEntry="CAQuietExec" Impersonate="no" Execute="deferred" Return="check" SuppressModularization="yes" /> 119 <CustomAction Id="$(var.Prefix)RegisterEventManifest$(var.Suffix)" BinaryKey="$(var.Prefix)UtilCA$(var.Suffix)" DllEntry="CAQuietExec" Impersonate="no" Execute="deferred" Return="check" SuppressModularization="yes" />
121 <CustomAction Id="UnregisterEventManifest$(var.DeferredSuffix)" BinaryKey="UtilCA$(var.Suffix)" DllEntry="CAQuietExec" Impersonate="no" Execute="deferred" Return="ignore" SuppressModularization="yes" /> 120 <CustomAction Id="$(var.Prefix)UnregisterEventManifest$(var.Suffix)" BinaryKey="$(var.Prefix)UtilCA$(var.Suffix)" DllEntry="CAQuietExec" Impersonate="no" Execute="deferred" Return="ignore" SuppressModularization="yes" />
122 <CustomAction Id="RollbackRegisterEventManifest$(var.DeferredSuffix)" BinaryKey="UtilCA$(var.Suffix)" DllEntry="CAQuietExec" Impersonate="no" Execute="rollback" Return="ignore" SuppressModularization="yes" /> 121 <CustomAction Id="$(var.Prefix)RollbackRegisterEventManifest$(var.Suffix)" BinaryKey="$(var.Prefix)UtilCA$(var.Suffix)" DllEntry="CAQuietExec" Impersonate="no" Execute="rollback" Return="ignore" SuppressModularization="yes" />
123 <CustomAction Id="RollbackUnregisterEventManifest$(var.DeferredSuffix)" BinaryKey="UtilCA$(var.Suffix)" DllEntry="CAQuietExec" Impersonate="no" Execute="rollback" Return="check" SuppressModularization="yes" /> 122 <CustomAction Id="$(var.Prefix)RollbackUnregisterEventManifest$(var.Suffix)" BinaryKey="$(var.Prefix)UtilCA$(var.Suffix)" DllEntry="CAQuietExec" Impersonate="no" Execute="rollback" Return="check" SuppressModularization="yes" />
124 123
125 <InstallExecuteSequence> 124 <InstallExecuteSequence>
126 <Custom Action="ConfigureEventManifestRegister$(var.Suffix)" After="SchedXmlFile" Overridable="yes">VersionNT &gt; 400</Custom> 125 <Custom Action="$(var.Prefix)ConfigureEventManifestRegister$(var.Suffix)" After="$(var.Prefix)SchedXmlFile$(var.Suffix)" Overridable="yes">VersionNT &gt; 400</Custom>
127 <Custom Action="ConfigureEventManifestUnregister$(var.Suffix)" After="RemoveRegistryValues" Overridable="yes">VersionNT &gt; 400</Custom> 126 <Custom Action="$(var.Prefix)ConfigureEventManifestUnregister$(var.Suffix)" After="RemoveRegistryValues" Overridable="yes">VersionNT &gt; 400</Custom>
128 </InstallExecuteSequence> 127 </InstallExecuteSequence>
129 </Fragment> 128 </Fragment>
130 129
131 <Fragment> 130 <Fragment>
132 <CustomAction Id="SchedServiceConfig$(var.Suffix)" BinaryKey="UtilCA$(var.Suffix)" DllEntry="SchedServiceConfig" Execute="immediate" Return="check" SuppressModularization="yes" /> 131 <CustomAction Id="$(var.Prefix)SchedServiceConfig$(var.Suffix)" BinaryKey="$(var.Prefix)UtilCA$(var.Suffix)" DllEntry="SchedServiceConfig" Execute="immediate" Return="check" SuppressModularization="yes" />
133 <CustomAction Id="ExecServiceConfig$(var.DeferredSuffix)" BinaryKey="UtilCA$(var.Suffix)" DllEntry="ExecServiceConfig" Execute="deferred" Impersonate="no" Return="check" SuppressModularization="yes" /> 132 <CustomAction Id="$(var.Prefix)ExecServiceConfig$(var.Suffix)" BinaryKey="$(var.Prefix)UtilCA$(var.Suffix)" DllEntry="ExecServiceConfig" Execute="deferred" Impersonate="no" Return="check" SuppressModularization="yes" />
134 <CustomAction Id="RollbackServiceConfig$(var.DeferredSuffix)" BinaryKey="UtilCA$(var.Suffix)" DllEntry="RollbackServiceConfig" Execute="rollback" Impersonate="no" Return="check" SuppressModularization="yes" /> 133 <CustomAction Id="$(var.Prefix)RollbackServiceConfig$(var.Suffix)" BinaryKey="$(var.Prefix)UtilCA$(var.Suffix)" DllEntry="RollbackServiceConfig" Execute="rollback" Impersonate="no" Return="check" SuppressModularization="yes" />
135 134
136 <InstallExecuteSequence> 135 <InstallExecuteSequence>
137 <!-- Condition this so it runs on install and MMode, but not uninstall --> 136 <!-- Condition this so it runs on install and MMode, but not uninstall -->
138 <Custom Action="SchedServiceConfig$(var.Suffix)" After="InstallServices" Overridable="yes">NOT REMOVE~="ALL" AND VersionNT &gt; 400</Custom> 137 <Custom Action="$(var.Prefix)SchedServiceConfig$(var.Suffix)" After="InstallServices" Overridable="yes">NOT REMOVE~="ALL" AND VersionNT &gt; 400</Custom>
139 </InstallExecuteSequence> 138 </InstallExecuteSequence>
140 </Fragment> 139 </Fragment>
141 140
142 <Fragment> 141 <Fragment>
143 <CustomAction Id="WixTouchFileDuringInstall" BinaryKey="UtilCA$(var.Suffix)" DllEntry="WixTouchFileDuringInstall" Execute="immediate" Return="check" SuppressModularization="yes" /> 142 <CustomAction Id="$(var.Prefix)TouchFileDuringInstall$(var.Suffix)" BinaryKey="$(var.Prefix)UtilCA$(var.Suffix)" DllEntry="WixTouchFileDuringInstall" Execute="immediate" Return="check" SuppressModularization="yes" />
144 <CustomAction Id="WixTouchFileDuringUninstall" BinaryKey="UtilCA$(var.Suffix)" DllEntry="WixTouchFileDuringUninstall" Execute="immediate" Return="check" SuppressModularization="yes" /> 143 <CustomAction Id="$(var.Prefix)TouchFileDuringUninstall$(var.Suffix)" BinaryKey="$(var.Prefix)UtilCA$(var.Suffix)" DllEntry="WixTouchFileDuringUninstall" Execute="immediate" Return="check" SuppressModularization="yes" />
145 <CustomAction Id="WixExecuteTouchFile" BinaryKey="UtilCA$(var.Suffix)" DllEntry="WixExecuteTouchFile" Execute="deferred" Impersonate="no" Return="check" SuppressModularization="yes" /> 144 <CustomAction Id="$(var.Prefix)ExecuteTouchFile$(var.Suffix)" BinaryKey="$(var.Prefix)UtilCA$(var.Suffix)" DllEntry="WixExecuteTouchFile" Execute="deferred" Impersonate="no" Return="check" SuppressModularization="yes" />
146 <CustomAction Id="WixRollbackTouchFile" BinaryKey="UtilCA$(var.Suffix)" DllEntry="WixExecuteTouchFile" Execute="rollback" Impersonate="no" Return="check" SuppressModularization="yes" /> 145 <CustomAction Id="$(var.Prefix)RollbackTouchFile$(var.Suffix)" BinaryKey="$(var.Prefix)UtilCA$(var.Suffix)" DllEntry="WixExecuteTouchFile" Execute="rollback" Impersonate="no" Return="check" SuppressModularization="yes" />
147 146
148 <InstallExecuteSequence> 147 <InstallExecuteSequence>
149 <Custom Action="WixTouchFileDuringUninstall" Before="RemoveFiles" Overridable="yes" /> 148 <Custom Action="$(var.Prefix)TouchFileDuringUninstall" Before="RemoveFiles" Overridable="yes" />
150 <Custom Action="WixTouchFileDuringInstall" After="InstallFiles" Overridable="yes" /> 149 <Custom Action="$(var.Prefix)TouchFileDuringInstall" After="InstallFiles" Overridable="yes" />
151 </InstallExecuteSequence> 150 </InstallExecuteSequence>
152 </Fragment> 151 </Fragment>
153 152
154 <Fragment> 153 <Fragment>
155 <UIRef Id="XmlFileErrorsText" /> 154 <UIRef Id="XmlFileErrorsText" />
156 155
157 <CustomAction Id="SchedXmlFile$(var.Suffix)" BinaryKey="UtilCA$(var.Suffix)" DllEntry="SchedXmlFile" Execute="immediate" Return="check" SuppressModularization="yes" /> 156 <CustomAction Id="$(var.Prefix)SchedXmlFile$(var.Suffix)" BinaryKey="$(var.Prefix)UtilCA$(var.Suffix)" DllEntry="SchedXmlFile" Execute="immediate" Return="check" SuppressModularization="yes" />
158 <CustomAction Id="ExecXmlFile$(var.DeferredSuffix)" BinaryKey="UtilCA$(var.Suffix)" DllEntry="ExecXmlFile" Execute="deferred" Impersonate="no" Return="check" HideTarget="yes" SuppressModularization="yes" /> 157 <CustomAction Id="$(var.Prefix)ExecXmlFile$(var.Suffix)" BinaryKey="$(var.Prefix)UtilCA$(var.Suffix)" DllEntry="ExecXmlFile" Execute="deferred" Impersonate="no" Return="check" HideTarget="yes" SuppressModularization="yes" />
159 <CustomAction Id="ExecXmlFileRollback$(var.DeferredSuffix)" BinaryKey="UtilCA$(var.Suffix)" DllEntry="ExecXmlFileRollback" Execute="rollback" Impersonate="no" Return="check" HideTarget="yes" SuppressModularization="yes" /> 158 <CustomAction Id="$(var.Prefix)ExecXmlFileRollback$(var.Suffix)" BinaryKey="$(var.Prefix)UtilCA$(var.Suffix)" DllEntry="ExecXmlFileRollback" Execute="rollback" Impersonate="no" Return="check" HideTarget="yes" SuppressModularization="yes" />
160 159
161 <InstallExecuteSequence> 160 <InstallExecuteSequence>
162 <Custom Action="SchedXmlFile$(var.Suffix)" After="DuplicateFiles" Overridable="yes">VersionNT &gt; 400</Custom> 161 <Custom Action="$(var.Prefix)SchedXmlFile$(var.Suffix)" After="DuplicateFiles" Overridable="yes">VersionNT &gt; 400</Custom>
163 </InstallExecuteSequence> 162 </InstallExecuteSequence>
164 </Fragment> 163 </Fragment>
165 164
166 <Fragment> 165 <Fragment>
167 <UIRef Id="XmlConfigErrorsText" /> 166 <UIRef Id="XmlConfigErrorsText" />
168 167
169 <CustomAction Id="SchedXmlConfig$(var.Suffix)" BinaryKey="UtilCA$(var.Suffix)" DllEntry="SchedXmlConfig" Execute="immediate" Return="check" SuppressModularization="yes" /> 168 <CustomAction Id="$(var.Prefix)SchedXmlConfig$(var.Suffix)" BinaryKey="$(var.Prefix)UtilCA$(var.Suffix)" DllEntry="SchedXmlConfig" Execute="immediate" Return="check" SuppressModularization="yes" />
170 <CustomAction Id="ExecXmlConfig$(var.DeferredSuffix)" BinaryKey="UtilCA$(var.Suffix)" DllEntry="ExecXmlConfig" Execute="deferred" Impersonate="no" Return="check" HideTarget="yes" SuppressModularization="yes" /> 169 <CustomAction Id="$(var.Prefix)ExecXmlConfig$(var.Suffix)" BinaryKey="$(var.Prefix)UtilCA$(var.Suffix)" DllEntry="ExecXmlConfig" Execute="deferred" Impersonate="no" Return="check" HideTarget="yes" SuppressModularization="yes" />
171 <CustomAction Id="ExecXmlConfigRollback$(var.DeferredSuffix)" BinaryKey="UtilCA$(var.Suffix)" DllEntry="ExecXmlConfigRollback" Execute="rollback" Impersonate="no" Return="check" HideTarget="yes" SuppressModularization="yes" /> 170 <CustomAction Id="$(var.Prefix)ExecXmlConfigRollback$(var.Suffix)" BinaryKey="$(var.Prefix)UtilCA$(var.Suffix)" DllEntry="ExecXmlConfigRollback" Execute="rollback" Impersonate="no" Return="check" HideTarget="yes" SuppressModularization="yes" />
172 171
173 <InstallExecuteSequence> 172 <InstallExecuteSequence>
174 <Custom Action="SchedXmlConfig$(var.Suffix)" After="DuplicateFiles" Overridable="yes">VersionNT &gt; 400</Custom> 173 <Custom Action="$(var.Prefix)SchedXmlConfig$(var.Suffix)" After="DuplicateFiles" Overridable="yes">VersionNT &gt; 400</Custom>
175 </InstallExecuteSequence> 174 </InstallExecuteSequence>
176 </Fragment> 175 </Fragment>
177 176
178 <Fragment> 177 <Fragment>
179 <CustomAction Id="WixSchedInternetShortcuts$(var.Suffix)" BinaryKey="UtilCA$(var.Suffix)" DllEntry="WixSchedInternetShortcuts" Execute="immediate" Return="check" SuppressModularization="yes" /> 178 <CustomAction Id="$(var.Prefix)SchedInternetShortcuts$(var.Suffix)" BinaryKey="$(var.Prefix)UtilCA$(var.Suffix)" DllEntry="WixSchedInternetShortcuts" Execute="immediate" Return="check" SuppressModularization="yes" />
180 <CustomAction Id="WixRollbackInternetShortcuts$(var.DeferredSuffix)" BinaryKey="UtilCA$(var.Suffix)" DllEntry="WixRollbackInternetShortcuts" Impersonate="no" Execute="rollback" Return="check" SuppressModularization="yes" /> 179 <CustomAction Id="$(var.Prefix)RollbackInternetShortcuts$(var.Suffix)" BinaryKey="$(var.Prefix)UtilCA$(var.Suffix)" DllEntry="WixRollbackInternetShortcuts" Impersonate="no" Execute="rollback" Return="check" SuppressModularization="yes" />
181 <CustomAction Id="WixCreateInternetShortcuts$(var.DeferredSuffix)" BinaryKey="UtilCA$(var.Suffix)" DllEntry="WixCreateInternetShortcuts" Impersonate="no" Execute="deferred" Return="check" SuppressModularization="yes" /> 180 <CustomAction Id="$(var.Prefix)CreateInternetShortcuts$(var.Suffix)" BinaryKey="$(var.Prefix)UtilCA$(var.Suffix)" DllEntry="WixCreateInternetShortcuts" Impersonate="no" Execute="deferred" Return="check" SuppressModularization="yes" />
182 181
183 <InstallExecuteSequence> 182 <InstallExecuteSequence>
184 <Custom Action="WixSchedInternetShortcuts$(var.Suffix)" Before="RemoveFolders" Overridable="yes">VersionNT &gt; 400</Custom> 183 <Custom Action="$(var.Prefix)SchedInternetShortcuts$(var.Suffix)" Before="RemoveFolders" Overridable="yes">VersionNT &gt; 400</Custom>
185 <Custom Action="WixRollbackInternetShortcuts$(var.DeferredSuffix)" Before="WixCreateInternetShortcuts$(var.DeferredSuffix)" Overridable="yes">VersionNT &gt; 400</Custom> 184 <Custom Action="$(var.Prefix)RollbackInternetShortcuts$(var.Suffix)" Before="$(var.Prefix)CreateInternetShortcuts$(var.Suffix)" Overridable="yes">VersionNT &gt; 400</Custom>
186 <Custom Action="WixCreateInternetShortcuts$(var.DeferredSuffix)" After="CreateShortcuts" Overridable="yes">VersionNT &gt; 400</Custom> 185 <Custom Action="$(var.Prefix)CreateInternetShortcuts$(var.Suffix)" After="CreateShortcuts" Overridable="yes">VersionNT &gt; 400</Custom>
187 </InstallExecuteSequence> 186 </InstallExecuteSequence>
188 </Fragment> 187 </Fragment>
189 188
@@ -196,29 +195,29 @@
196 <Fragment> 195 <Fragment>
197 <UIRef Id="SecureObjectsErrors" /> 196 <UIRef Id="SecureObjectsErrors" />
198 197
199 <CustomAction Id="SchedSecureObjects$(var.Suffix)" BinaryKey="UtilCA$(var.Suffix)" DllEntry="SchedSecureObjects" Execute="immediate" Return="check" SuppressModularization="yes" /> 198 <CustomAction Id="$(var.Prefix)SchedSecureObjects$(var.Suffix)" BinaryKey="$(var.Prefix)UtilCA$(var.Suffix)" DllEntry="SchedSecureObjects" Execute="immediate" Return="check" SuppressModularization="yes" />
200 <CustomAction Id="SchedSecureObjectsRollback$(var.Suffix)" BinaryKey="UtilCA$(var.Suffix)" DllEntry="SchedSecureObjectsRollback" Execute="immediate" Return="check" SuppressModularization="yes" /> 199 <CustomAction Id="$(var.Prefix)SchedSecureObjectsRollback$(var.Suffix)" BinaryKey="$(var.Prefix)UtilCA$(var.Suffix)" DllEntry="SchedSecureObjectsRollback" Execute="immediate" Return="check" SuppressModularization="yes" />
201 <CustomAction Id="ExecSecureObjects$(var.DeferredSuffix)" BinaryKey="UtilCA$(var.Suffix)" DllEntry="ExecSecureObjects" Execute="deferred" Impersonate="no" Return="check" HideTarget="yes" SuppressModularization="yes" /> 200 <CustomAction Id="$(var.Prefix)ExecSecureObjects$(var.Suffix)" BinaryKey="$(var.Prefix)UtilCA$(var.Suffix)" DllEntry="ExecSecureObjects" Execute="deferred" Impersonate="no" Return="check" HideTarget="yes" SuppressModularization="yes" />
202 <CustomAction Id="ExecSecureObjectsRollback$(var.DeferredSuffix)" BinaryKey="UtilCA$(var.Suffix)" DllEntry="ExecSecureObjectsRollback" Execute="rollback" Impersonate="no" Return="check" HideTarget="yes" SuppressModularization="yes" /> 201 <CustomAction Id="$(var.Prefix)ExecSecureObjectsRollback$(var.Suffix)" BinaryKey="$(var.Prefix)UtilCA$(var.Suffix)" DllEntry="ExecSecureObjectsRollback" Execute="rollback" Impersonate="no" Return="check" HideTarget="yes" SuppressModularization="yes" />
203 202
204 <InstallExecuteSequence> 203 <InstallExecuteSequence>
205 <!-- Condition this so it runs on install and MMode, but not uninstall --> 204 <!-- Condition this so it runs on install and MMode, but not uninstall -->
206 <Custom Action="SchedSecureObjects$(var.Suffix)" After="InstallServices" Overridable="yes">NOT REMOVE~="ALL" AND VersionNT &gt; 400</Custom> 205 <Custom Action="$(var.Prefix)SchedSecureObjects$(var.Suffix)" After="InstallServices" Overridable="yes">NOT REMOVE~="ALL" AND VersionNT &gt; 400</Custom>
207 <Custom Action="SchedSecureObjectsRollback$(var.Suffix)" After="UnpublishFeatures" Overridable="yes">VersionNT &gt; 400</Custom> 206 <Custom Action="$(var.Prefix)SchedSecureObjectsRollback$(var.Suffix)" After="UnpublishFeatures" Overridable="yes">VersionNT &gt; 400</Custom>
208 </InstallExecuteSequence> 207 </InstallExecuteSequence>
209 </Fragment> 208 </Fragment>
210 209
211 <Fragment> 210 <Fragment>
212 <CustomAction Id="WixSchedFormatFiles$(var.Suffix)" BinaryKey="UtilCA$(var.Suffix)" DllEntry="WixSchedFormatFiles" Execute="immediate" Return="check" SuppressModularization="yes" /> 211 <CustomAction Id="$(var.Prefix)SchedFormatFiles$(var.Suffix)" BinaryKey="$(var.Prefix)UtilCA$(var.Suffix)" DllEntry="WixSchedFormatFiles" Execute="immediate" Return="check" SuppressModularization="yes" />
213 <CustomAction Id="WixExecFormatFiles$(var.DeferredSuffix)" BinaryKey="UtilCA$(var.Suffix)" DllEntry="WixExecFormatFiles" Execute="deferred" Impersonate="no" Return="check" SuppressModularization="yes" /> 212 <CustomAction Id="$(var.Prefix)ExecFormatFiles$(var.Suffix)" BinaryKey="$(var.Prefix)UtilCA$(var.Suffix)" DllEntry="WixExecFormatFiles" Execute="deferred" Impersonate="no" Return="check" SuppressModularization="yes" />
214 <CustomAction Id="WixRollbackFormatFiles$(var.DeferredSuffix)" BinaryKey="UtilCA$(var.Suffix)" DllEntry="WixExecFormatFiles" Execute="rollback" Impersonate="no" Return="check" SuppressModularization="yes" /> 213 <CustomAction Id="$(var.Prefix)RollbackFormatFiles$(var.Suffix)" BinaryKey="$(var.Prefix)UtilCA$(var.Suffix)" DllEntry="WixExecFormatFiles" Execute="rollback" Impersonate="no" Return="check" SuppressModularization="yes" />
215 214
216 <InstallExecuteSequence> 215 <InstallExecuteSequence>
217 <Custom Action="WixSchedFormatFiles$(var.Suffix)" After="InstallFiles" /> 216 <Custom Action="$(var.Prefix)SchedFormatFiles$(var.Suffix)" After="InstallFiles" />
218 </InstallExecuteSequence> 217 </InstallExecuteSequence>
219 </Fragment> 218 </Fragment>
220 219
221 <Fragment> 220 <Fragment>
222 <Binary Id="UtilCA$(var.Suffix)" SourceFile="!(bindpath.$(var.platform))utilca.dll" /> 221 <Binary Id="$(var.Prefix)UtilCA$(var.Suffix)" SourceFile="!(bindpath.$(var.platform))utilca.dll" />
223 </Fragment> 222 </Fragment>
224</Include> 223</Include>
diff --git a/src/wixlib/caDecor.wxi b/src/wixlib/caDecor.wxi
new file mode 100644
index 00000000..1d00df8f
--- /dev/null
+++ b/src/wixlib/caDecor.wxi
@@ -0,0 +1,40 @@
1<?xml version="1.0" encoding="utf-8"?>
2<!-- 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. -->
3
4
5<Include xmlns="http://schemas.microsoft.com/wix/2006/wi">
6 <?ifdef Prefix ?>
7 <?undef Prefix ?>
8 <?endif ?>
9
10 <?define Prefix="Wix4" ?>
11
12 <?ifndef platform ?>
13 <?define platform="x86" ?>
14 <?endif ?>
15
16 <?if $(var.platform)="" ?>
17 <?undef platform ?>
18 <?define platform="x86" ?>
19 <?endif ?>
20
21 <?ifdef Suffix ?>
22 <?undef Suffix ?>
23 <?endif ?>
24
25 <?if $(var.platform)~="x86" ?>
26 <?define Suffix="_X86" ?>
27 <?endif ?>
28
29 <?if $(var.platform)~="x64" ?>
30 <?define Suffix="_X64" ?>
31 <?endif ?>
32
33 <?if $(var.platform)~="arm" ?>
34 <?define Suffix="_A32" ?>
35 <?endif ?>
36
37 <?if $(var.platform)~="arm64" ?>
38 <?define Suffix="_A64" ?>
39 <?endif ?>
40</Include>
diff --git a/src/wixlib/caSuffix.wxi b/src/wixlib/caSuffix.wxi
deleted file mode 100644
index a56a2393..00000000
--- a/src/wixlib/caSuffix.wxi
+++ /dev/null
@@ -1,28 +0,0 @@
1<?xml version="1.0" encoding="utf-8"?>
2<!-- 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. -->
3
4<Include xmlns="http://wixtoolset.org/schemas/v4/wxs">
5 <?ifndef platform ?>
6 <?error Required value "platform" not defined in include caSuffix.wxi ?>
7 <?endif ?>
8
9 <?ifdef Suffix ?>
10 <?undef Suffix ?>
11 <?undef DeferredSuffix ?>
12 <?endif ?>
13
14 <?if $(var.platform)="x86" ?>
15 <?define Suffix="" ?>
16 <?define DeferredSuffix="" ?>
17 <?endif ?>
18
19 <?if $(var.platform)="x64" ?>
20 <?define Suffix="_x64" ?>
21 <?define DeferredSuffix="_64" ?>
22 <?endif ?>
23
24 <?if $(var.platform)="arm" ?>
25 <?define Suffix="_ARM" ?>
26 <?define DeferredSuffix="_ARM" ?>
27 <?endif ?>
28</Include>
diff --git a/src/wixlib/util.wixproj b/src/wixlib/util.wixproj
index f9dbabb8..21d96832 100644
--- a/src/wixlib/util.wixproj
+++ b/src/wixlib/util.wixproj
@@ -33,7 +33,7 @@
33 </ItemGroup> 33 </ItemGroup>
34 <ItemGroup> 34 <ItemGroup>
35 <None Include="caerr.wxi" /> 35 <None Include="caerr.wxi" />
36 <None Include="caSuffix.wxi" /> 36 <None Include="caDecor.wxi" />
37 <None Include="UtilExtension_Platform.wxi" /> 37 <None Include="UtilExtension_Platform.wxi" />
38 </ItemGroup> 38 </ItemGroup>
39 <Import Project="$(WixTargetsPath)" Condition=" '$(WixTargetsPath)' != '' AND Exists('$(WixTargetsPath)') " /> 39 <Import Project="$(WixTargetsPath)" Condition=" '$(WixTargetsPath)' != '' AND Exists('$(WixTargetsPath)') " />