aboutsummaryrefslogtreecommitdiff
path: root/src/ext/ComPlus/ca/cpsched.cpp
diff options
context:
space:
mode:
authorBevan Weiss <bevan.weiss@gmail.com>2024-07-28 00:12:25 +1000
committerRob Mensching <rob@firegiant.com>2024-12-26 08:26:26 -0800
commitee41358bb583619ef4fe6707958dc3c6c62cd13f (patch)
tree04d702b39cd37be9b6c66c897f6c774a7dd1c0a6 /src/ext/ComPlus/ca/cpsched.cpp
parent85745284cd76858f8699190c53719607e0058712 (diff)
downloadwix-ee41358bb583619ef4fe6707958dc3c6c62cd13f.tar.gz
wix-ee41358bb583619ef4fe6707958dc3c6c62cd13f.tar.bz2
wix-ee41358bb583619ef4fe6707958dc3c6c62cd13f.zip
Fix up COM+ to be back in working order under Wix4+
Table names updated for Wix4 prefix. Custom action names similarly updated. Table names Wix4ComPlusUserInApplicationRole, Wix4ComPlusGroupInApplicationRole and Wix4ComPlusApplicationRoleProperty had to be shortened to fit within MSI 31 character table name limit. Migrated from fixed GUID for RegistrationHelper to use CLSIDFromProgID in an attempt to fix behaviour under .NET 4+ DLLs. Added setting of Partition enable if a Partition is configured in authoring, new Windows config has Partitions disabled by default, and they don't work at all under Windows workstation (non-server) versions. Added a new Runtime condition for `RequireWindowsServer` which will skip execution of Runtime test on workstation/desktop OSes, since COM+ Partitions only work correctly under Windows Server. Quite a lot of basic typos fixed also. Signed-off-by: Bevan Weiss <bevan.weiss@gmail.com>
Diffstat (limited to 'src/ext/ComPlus/ca/cpsched.cpp')
-rw-r--r--src/ext/ComPlus/ca/cpsched.cpp80
1 files changed, 33 insertions, 47 deletions
diff --git a/src/ext/ComPlus/ca/cpsched.cpp b/src/ext/ComPlus/ca/cpsched.cpp
index ebc547ae..acde3cd3 100644
--- a/src/ext/ComPlus/ca/cpsched.cpp
+++ b/src/ext/ComPlus/ca/cpsched.cpp
@@ -3,31 +3,17 @@
3#include "precomp.h" 3#include "precomp.h"
4 4
5 5
6#ifdef _WIN64 6#define CP_COMPLUSROLLBACKINSTALLPREPARE CUSTOM_ACTION_DECORATION(L"ComPlusRollbackInstallPrepare")
7#define CP_COMPLUSROLLBACKINSTALLPREPARE L"ComPlusRollbackInstallPrepare_64" 7#define CP_COMPLUSINSTALLPREPARE CUSTOM_ACTION_DECORATION(L"ComPlusInstallPrepare")
8#define CP_COMPLUSINSTALLPREPARE L"ComPlusInstallPrepare_64" 8#define CP_COMPLUSROLLBACKINSTALLEXECUTE CUSTOM_ACTION_DECORATION(L"ComPlusRollbackInstallExecute")
9#define CP_COMPLUSROLLBACKINSTALLEXECUTE L"ComPlusRollbackInstallExecute_64" 9#define CP_COMPLUSINSTALLEXECUTE CUSTOM_ACTION_DECORATION(L"ComPlusInstallExecute")
10#define CP_COMPLUSINSTALLEXECUTE L"ComPlusInstallExecute_64" 10#define CP_COMPLUSINSTALLEXECUTECOMMIT CUSTOM_ACTION_DECORATION(L"ComPlusInstallExecuteCommit")
11#define CP_COMPLUSINSTALLEXECUTECOMMIT L"ComPlusInstallExecuteCommit_64" 11#define CP_COMPLUSINSTALLCOMMIT CUSTOM_ACTION_DECORATION(L"ComPlusInstallCommit")
12#define CP_COMPLUSINSTALLCOMMIT L"ComPlusInstallCommit_64" 12#define CP_COMPLUSROLLBACKINSTALLPREPARE CUSTOM_ACTION_DECORATION(L"ComPlusRollbackInstallPrepare")
13#define CP_COMPLUSROLLBACKINSTALLPREPARE L"ComPlusRollbackInstallPrepare_64" 13#define CP_COMPLUSINSTALLPREPARE CUSTOM_ACTION_DECORATION(L"ComPlusInstallPrepare")
14#define CP_COMPLUSINSTALLPREPARE L"ComPlusInstallPrepare_64" 14#define CP_COMPLUSROLLBACKUNINSTALLEXECUTE CUSTOM_ACTION_DECORATION(L"ComPlusRollbackUninstallExecute")
15#define CP_COMPLUSROLLBACKUNINSTALLEXECUTE L"ComPlusRollbackUninstallExecute_64" 15#define CP_COMPLUSUNINSTALLEXECUTE CUSTOM_ACTION_DECORATION(L"ComPlusUninstallExecute")
16#define CP_COMPLUSUNINSTALLEXECUTE L"ComPlusUninstallExecute_64" 16#define CP_COMPLUSINSTALLCOMMIT CUSTOM_ACTION_DECORATION(L"ComPlusInstallCommit")
17#define CP_COMPLUSINSTALLCOMMIT L"ComPlusInstallCommit_64"
18#else
19#define CP_COMPLUSROLLBACKINSTALLPREPARE L"ComPlusRollbackInstallPrepare"
20#define CP_COMPLUSINSTALLPREPARE L"ComPlusInstallPrepare"
21#define CP_COMPLUSROLLBACKINSTALLEXECUTE L"ComPlusRollbackInstallExecute"
22#define CP_COMPLUSINSTALLEXECUTE L"ComPlusInstallExecute"
23#define CP_COMPLUSINSTALLEXECUTECOMMIT L"ComPlusInstallExecuteCommit"
24#define CP_COMPLUSINSTALLCOMMIT L"ComPlusInstallCommit"
25#define CP_COMPLUSROLLBACKINSTALLPREPARE L"ComPlusRollbackInstallPrepare"
26#define CP_COMPLUSINSTALLPREPARE L"ComPlusInstallPrepare"
27#define CP_COMPLUSROLLBACKUNINSTALLEXECUTE L"ComPlusRollbackUninstallExecute"
28#define CP_COMPLUSUNINSTALLEXECUTE L"ComPlusUninstallExecute"
29#define CP_COMPLUSINSTALLCOMMIT L"ComPlusInstallCommit"
30#endif
31 17
32/******************************************************************** 18/********************************************************************
33 ConfigureComPlusInstall - CUSTOM ACTION ENTRY POINT for installing COM+ components 19 ConfigureComPlusInstall - CUSTOM ACTION ENTRY POINT for installing COM+ components
@@ -81,7 +67,7 @@ extern "C" UINT __stdcall ConfigureComPlusInstall(MSIHANDLE hInstall)
81 67
82 CpiSchedInitialize(); 68 CpiSchedInitialize();
83 69
84 // check for the prerequsite tables 70 // check for the prerequisite tables
85 if (!CpiTableExists(cptComPlusPartition) && !CpiTableExists(cptComPlusApplication) && !CpiTableExists(cptComPlusAssembly)) 71 if (!CpiTableExists(cptComPlusPartition) && !CpiTableExists(cptComPlusApplication) && !CpiTableExists(cptComPlusAssembly))
86 { 72 {
87 WcaLog(LOGMSG_VERBOSE, "skipping install COM+ CustomAction, no ComPlusPartition, ComPlusApplication or ComPlusAssembly table present"); 73 WcaLog(LOGMSG_VERBOSE, "skipping install COM+ CustomAction, no ComPlusPartition, ComPlusApplication or ComPlusAssembly table present");
@@ -117,55 +103,55 @@ extern "C" UINT __stdcall ConfigureComPlusInstall(MSIHANDLE hInstall)
117 if (502 <= iVersionNT && CpiTableExists(cptComPlusPartition)) 103 if (502 <= iVersionNT && CpiTableExists(cptComPlusPartition))
118 { 104 {
119 hr = CpiPartitionsRead(&partList); 105 hr = CpiPartitionsRead(&partList);
120 MessageExitOnFailure(hr, msierrComPlusPartitionReadFailed, "Failed to read ComPlusPartitions table"); 106 MessageExitOnFailure(hr, msierrComPlusPartitionReadFailed, "Failed to read Wix4ComPlusPartitions table");
121 } 107 }
122 108
123 if (502 <= iVersionNT && CpiTableExists(cptComPlusPartitionRole)) 109 if (502 <= iVersionNT && CpiTableExists(cptComPlusPartitionRole))
124 { 110 {
125 hr = CpiPartitionRolesRead(&partList, &partRoleList); 111 hr = CpiPartitionRolesRead(&partList, &partRoleList);
126 MessageExitOnFailure(hr, msierrComPlusPartitionRoleReadFailed, "Failed to read ComPlusPartitionRole table"); 112 MessageExitOnFailure(hr, msierrComPlusPartitionRoleReadFailed, "Failed to read Wix4ComPlusPartitionRole table");
127 } 113 }
128 114
129 if (502 <= iVersionNT && (CpiTableExists(cptComPlusUserInPartitionRole) || CpiTableExists(cptComPlusGroupInPartitionRole))) 115 if (502 <= iVersionNT && (CpiTableExists(cptComPlusUserInPartitionRole) || CpiTableExists(cptComPlusGroupInPartitionRole)))
130 { 116 {
131 hr = CpiUsersInPartitionRolesRead(&partRoleList, &usrInPartRoleList); 117 hr = CpiUsersInPartitionRolesRead(&partRoleList, &usrInPartRoleList);
132 MessageExitOnFailure(hr, msierrComPlusUserInPartitionRoleReadFailed, "Failed to read ComPlusUserInPartitionRole table"); 118 MessageExitOnFailure(hr, msierrComPlusUserInPartitionRoleReadFailed, "Failed to read Wix4ComPlusUserInPartitionRole table");
133 } 119 }
134 120
135 if (502 <= iVersionNT && CpiTableExists(cptComPlusPartitionUser)) 121 if (502 <= iVersionNT && CpiTableExists(cptComPlusPartitionUser))
136 { 122 {
137 hr = CpiPartitionUsersRead(&partList, &partUsrList); 123 hr = CpiPartitionUsersRead(&partList, &partUsrList);
138 MessageExitOnFailure(hr, msierrComPlusPartitionUserReadFailed, "Failed to read ComPlusPartitionUser table"); 124 MessageExitOnFailure(hr, msierrComPlusPartitionUserReadFailed, "Failed to read Wix4ComPlusPartitionUser table");
139 } 125 }
140 126
141 if (CpiTableExists(cptComPlusApplication)) 127 if (CpiTableExists(cptComPlusApplication))
142 { 128 {
143 hr = CpiApplicationsRead(&partList, &appList); 129 hr = CpiApplicationsRead(&partList, &appList);
144 MessageExitOnFailure(hr, msierrComPlusApplicationReadFailed, "Failed to read ComPlusApplication table"); 130 MessageExitOnFailure(hr, msierrComPlusApplicationReadFailed, "Failed to read Wix4ComPlusApplication table");
145 } 131 }
146 132
147 if (CpiTableExists(cptComPlusApplicationRole)) 133 if (CpiTableExists(cptComPlusApplicationRole))
148 { 134 {
149 hr = CpiApplicationRolesRead(&appList, &appRoleList); 135 hr = CpiApplicationRolesRead(&appList, &appRoleList);
150 MessageExitOnFailure(hr, msierrComPlusApplicationRoleReadFailed, "Failed to read ComPlusApplicationRole table"); 136 MessageExitOnFailure(hr, msierrComPlusApplicationRoleReadFailed, "Failed to read Wix4ComPlusApplicationRole table");
151 } 137 }
152 138
153 if (CpiTableExists(cptComPlusUserInApplicationRole) || CpiTableExists(cptComPlusGroupInApplicationRole)) 139 if (CpiTableExists(cptComPlusUserInApplicationRole) || CpiTableExists(cptComPlusGroupInApplicationRole))
154 { 140 {
155 hr = CpiUsersInApplicationRolesRead(&appRoleList, &usrInAppRoleList); 141 hr = CpiUsersInApplicationRolesRead(&appRoleList, &usrInAppRoleList);
156 MessageExitOnFailure(hr, msierrComPlusUserInApplicationRoleReadFailed, "Failed to read ComPlusUserInApplicationRole table"); 142 MessageExitOnFailure(hr, msierrComPlusUserInApplicationRoleReadFailed, "Failed to read Wix4ComPlusUserInApplicationRole table");
157 } 143 }
158 144
159 if (CpiTableExists(cptComPlusAssembly)) 145 if (CpiTableExists(cptComPlusAssembly))
160 { 146 {
161 hr = CpiAssembliesRead(&appList, &appRoleList, &asmList); 147 hr = CpiAssembliesRead(&appList, &appRoleList, &asmList);
162 MessageExitOnFailure(hr, msierrComPlusAssembliesReadFailed, "Failed to read ComPlusAssembly table"); 148 MessageExitOnFailure(hr, msierrComPlusAssembliesReadFailed, "Failed to read Wix4ComPlusAssembly table");
163 } 149 }
164 150
165 if (CpiTableExists(cptComPlusSubscription)) 151 if (CpiTableExists(cptComPlusSubscription))
166 { 152 {
167 hr = CpiSubscriptionsRead(&asmList, &subList); 153 hr = CpiSubscriptionsRead(&asmList, &subList);
168 MessageExitOnFailure(hr, msierrComPlusSubscriptionReadFailed, "Failed to read ComPlusSubscription table"); 154 MessageExitOnFailure(hr, msierrComPlusSubscriptionReadFailed, "Failed to read Wix4ComPlusSubscription table");
169 } 155 }
170 156
171 // verify elements 157 // verify elements
@@ -295,7 +281,7 @@ LExit:
295 CpiAssemblyListFree(&asmList); 281 CpiAssemblyListFree(&asmList);
296 CpiSubscriptionListFree(&subList); 282 CpiSubscriptionListFree(&subList);
297 283
298 // unitialize 284 // uninitialize
299 CpiSchedFinalize(); 285 CpiSchedFinalize();
300 286
301 if (fInitializedCom) 287 if (fInitializedCom)
@@ -359,7 +345,7 @@ extern "C" UINT __stdcall ConfigureComPlusUninstall(MSIHANDLE hInstall)
359 // check for the prerequsite tables 345 // check for the prerequsite tables
360 if (!CpiTableExists(cptComPlusPartition) && !CpiTableExists(cptComPlusApplication) && !CpiTableExists(cptComPlusAssembly)) 346 if (!CpiTableExists(cptComPlusPartition) && !CpiTableExists(cptComPlusApplication) && !CpiTableExists(cptComPlusAssembly))
361 { 347 {
362 WcaLog(LOGMSG_VERBOSE, "skipping uninstall COM+ CustomAction, no ComPlusPartition, ComPlusApplication or ComPlusAssembly table present"); 348 WcaLog(LOGMSG_VERBOSE, "skipping uninstall COM+ CustomAction, no Wix4ComPlusPartition, Wix4ComPlusApplication or Wix4ComPlusAssembly table present");
363 ExitFunction1(hr = S_FALSE); 349 ExitFunction1(hr = S_FALSE);
364 } 350 }
365 351
@@ -392,55 +378,55 @@ extern "C" UINT __stdcall ConfigureComPlusUninstall(MSIHANDLE hInstall)
392 if (502 <= iVersionNT && CpiTableExists(cptComPlusPartition)) 378 if (502 <= iVersionNT && CpiTableExists(cptComPlusPartition))
393 { 379 {
394 hr = CpiPartitionsRead(&partList); 380 hr = CpiPartitionsRead(&partList);
395 MessageExitOnFailure(hr, msierrComPlusPartitionReadFailed, "Failed to read ComPlusPartitions table"); 381 MessageExitOnFailure(hr, msierrComPlusPartitionReadFailed, "Failed to read Wix4ComPlusPartitions table");
396 } 382 }
397 383
398 if (502 <= iVersionNT && CpiTableExists(cptComPlusPartitionRole)) 384 if (502 <= iVersionNT && CpiTableExists(cptComPlusPartitionRole))
399 { 385 {
400 hr = CpiPartitionRolesRead(&partList, &partRoleList); 386 hr = CpiPartitionRolesRead(&partList, &partRoleList);
401 MessageExitOnFailure(hr, msierrComPlusPartitionRoleReadFailed, "Failed to read ComPlusPartitionRole table"); 387 MessageExitOnFailure(hr, msierrComPlusPartitionRoleReadFailed, "Failed to read Wix4ComPlusPartitionRole table");
402 } 388 }
403 389
404 if (502 <= iVersionNT && (CpiTableExists(cptComPlusUserInPartitionRole) || CpiTableExists(cptComPlusGroupInPartitionRole))) 390 if (502 <= iVersionNT && (CpiTableExists(cptComPlusUserInPartitionRole) || CpiTableExists(cptComPlusGroupInPartitionRole)))
405 { 391 {
406 hr = CpiUsersInPartitionRolesRead(&partRoleList, &usrInPartRoleList); 392 hr = CpiUsersInPartitionRolesRead(&partRoleList, &usrInPartRoleList);
407 MessageExitOnFailure(hr, msierrComPlusUserInPartitionRoleReadFailed, "Failed to read ComPlusUserInPartitionRole table"); 393 MessageExitOnFailure(hr, msierrComPlusUserInPartitionRoleReadFailed, "Failed to read Wix4ComPlusUserInPartitionRole table");
408 } 394 }
409 395
410 if (502 <= iVersionNT && CpiTableExists(cptComPlusPartitionUser)) 396 if (502 <= iVersionNT && CpiTableExists(cptComPlusPartitionUser))
411 { 397 {
412 hr = CpiPartitionUsersRead(&partList, &partUsrList); 398 hr = CpiPartitionUsersRead(&partList, &partUsrList);
413 MessageExitOnFailure(hr, msierrComPlusPartitionUserReadFailed, "Failed to read ComPlusPartitionUser table"); 399 MessageExitOnFailure(hr, msierrComPlusPartitionUserReadFailed, "Failed to read Wix4ComPlusPartitionUser table");
414 } 400 }
415 401
416 if (CpiTableExists(cptComPlusApplication)) 402 if (CpiTableExists(cptComPlusApplication))
417 { 403 {
418 hr = CpiApplicationsRead(&partList, &appList); 404 hr = CpiApplicationsRead(&partList, &appList);
419 MessageExitOnFailure(hr, msierrComPlusApplicationReadFailed, "Failed to read ComPlusApplication table"); 405 MessageExitOnFailure(hr, msierrComPlusApplicationReadFailed, "Failed to read Wix4ComPlusApplication table");
420 } 406 }
421 407
422 if (CpiTableExists(cptComPlusApplicationRole)) 408 if (CpiTableExists(cptComPlusApplicationRole))
423 { 409 {
424 hr = CpiApplicationRolesRead(&appList, &appRoleList); 410 hr = CpiApplicationRolesRead(&appList, &appRoleList);
425 MessageExitOnFailure(hr, msierrComPlusApplicationRoleReadFailed, "Failed to read ComPlusApplicationRole table"); 411 MessageExitOnFailure(hr, msierrComPlusApplicationRoleReadFailed, "Failed to read Wix4ComPlusApplicationRole table");
426 } 412 }
427 413
428 if (CpiTableExists(cptComPlusUserInApplicationRole) || CpiTableExists(cptComPlusGroupInApplicationRole)) 414 if (CpiTableExists(cptComPlusUserInApplicationRole) || CpiTableExists(cptComPlusGroupInApplicationRole))
429 { 415 {
430 hr = CpiUsersInApplicationRolesRead(&appRoleList, &usrInAppRoleList); 416 hr = CpiUsersInApplicationRolesRead(&appRoleList, &usrInAppRoleList);
431 MessageExitOnFailure(hr, msierrComPlusUserInApplicationRoleReadFailed, "Failed to read ComPlusUserInApplicationRole table"); 417 MessageExitOnFailure(hr, msierrComPlusUserInApplicationRoleReadFailed, "Failed to read Wix4ComPlusUserInApplicationRole table");
432 } 418 }
433 419
434 if (CpiTableExists(cptComPlusAssembly)) 420 if (CpiTableExists(cptComPlusAssembly))
435 { 421 {
436 hr = CpiAssembliesRead(&appList, &appRoleList, &asmList); 422 hr = CpiAssembliesRead(&appList, &appRoleList, &asmList);
437 MessageExitOnFailure(hr, msierrComPlusAssembliesReadFailed, "Failed to read ComPlusAssembly table"); 423 MessageExitOnFailure(hr, msierrComPlusAssembliesReadFailed, "Failed to read Wix4ComPlusAssembly table");
438 } 424 }
439 425
440 if (CpiTableExists(cptComPlusSubscription)) 426 if (CpiTableExists(cptComPlusSubscription))
441 { 427 {
442 hr = CpiSubscriptionsRead(&asmList, &subList); 428 hr = CpiSubscriptionsRead(&asmList, &subList);
443 MessageExitOnFailure(hr, msierrComPlusSubscriptionReadFailed, "Failed to read ComPlusSubscription table"); 429 MessageExitOnFailure(hr, msierrComPlusSubscriptionReadFailed, "Failed to read Wix4ComPlusSubscription table");
444 } 430 }
445 431
446 // verify elements 432 // verify elements
@@ -555,7 +541,7 @@ LExit:
555 CpiAssemblyListFree(&asmList); 541 CpiAssemblyListFree(&asmList);
556 CpiSubscriptionListFree(&subList); 542 CpiSubscriptionListFree(&subList);
557 543
558 // unitialize 544 // uninitialize
559 CpiSchedFinalize(); 545 CpiSchedFinalize();
560 546
561 if (fInitializedCom) 547 if (fInitializedCom)