summaryrefslogtreecommitdiff
path: root/src/burn/engine/plan.cpp
diff options
context:
space:
mode:
authorSean Hall <r.sean.hall@gmail.com>2022-03-21 23:22:23 -0500
committerSean Hall <r.sean.hall@gmail.com>2022-03-22 12:26:48 -0500
commitfc3e4722307c86b5d06918f0721b98323735bb40 (patch)
tree1a8c6fa25274cce22f0e274a6b3b1c5c06614745 /src/burn/engine/plan.cpp
parent9bb420a19538321789b8300051cd595d6c00c710 (diff)
downloadwix-fc3e4722307c86b5d06918f0721b98323735bb40.tar.gz
wix-fc3e4722307c86b5d06918f0721b98323735bb40.tar.bz2
wix-fc3e4722307c86b5d06918f0721b98323735bb40.zip
Add `ExePackage/@Bundle` to opt-in to v3 behavior.
Automatically add '-norestart' for bundle ExePackages. Fixes 6252
Diffstat (limited to 'src/burn/engine/plan.cpp')
-rw-r--r--src/burn/engine/plan.cpp33
1 files changed, 22 insertions, 11 deletions
diff --git a/src/burn/engine/plan.cpp b/src/burn/engine/plan.cpp
index 5e1d2654..cb50b0c9 100644
--- a/src/burn/engine/plan.cpp
+++ b/src/burn/engine/plan.cpp
@@ -291,6 +291,12 @@ extern "C" void PlanUninitializeExecuteAction(
291 ReleaseStr(pExecuteAction->relatedBundle.sczEngineWorkingDirectory); 291 ReleaseStr(pExecuteAction->relatedBundle.sczEngineWorkingDirectory);
292 break; 292 break;
293 293
294 case BURN_EXECUTE_ACTION_TYPE_EXE_PACKAGE:
295 ReleaseStr(pExecuteAction->exePackage.sczIgnoreDependencies);
296 ReleaseStr(pExecuteAction->exePackage.sczAncestors);
297 ReleaseStr(pExecuteAction->exePackage.sczEngineWorkingDirectory);
298 break;
299
294 case BURN_EXECUTE_ACTION_TYPE_MSI_PACKAGE: 300 case BURN_EXECUTE_ACTION_TYPE_MSI_PACKAGE:
295 ReleaseStr(pExecuteAction->msiPackage.sczLogPath); 301 ReleaseStr(pExecuteAction->msiPackage.sczLogPath);
296 ReleaseMem(pExecuteAction->msiPackage.rgFeatures); 302 ReleaseMem(pExecuteAction->msiPackage.rgFeatures);
@@ -1495,26 +1501,21 @@ extern "C" HRESULT PlanRelatedBundlesComplete(
1495 for (DWORD i = 0; i < pPlan->cExecuteActions; ++i) 1501 for (DWORD i = 0; i < pPlan->cExecuteActions; ++i)
1496 { 1502 {
1497 BOOTSTRAPPER_ACTION_STATE packageAction = BOOTSTRAPPER_ACTION_STATE_NONE; 1503 BOOTSTRAPPER_ACTION_STATE packageAction = BOOTSTRAPPER_ACTION_STATE_NONE;
1504 BURN_PACKAGE* pPackage = &pPlan->rgExecuteActions[i].relatedBundle.pRelatedBundle->package;
1505 BOOL fBundle = FALSE;
1498 1506
1499 switch (pPlan->rgExecuteActions[i].type) 1507 switch (pPlan->rgExecuteActions[i].type)
1500 { 1508 {
1501 case BURN_EXECUTE_ACTION_TYPE_RELATED_BUNDLE: 1509 case BURN_EXECUTE_ACTION_TYPE_RELATED_BUNDLE:
1502 packageAction = pPlan->rgExecuteActions[i].relatedBundle.action; 1510 packageAction = pPlan->rgExecuteActions[i].relatedBundle.action;
1503 1511 pPackage = &pPlan->rgExecuteActions[i].relatedBundle.pRelatedBundle->package;
1504 if (BOOTSTRAPPER_ACTION_STATE_NONE != packageAction) 1512 fBundle = TRUE;
1505 {
1506 BURN_PACKAGE* pPackage = &pPlan->rgExecuteActions[i].relatedBundle.pRelatedBundle->package;
1507 if (pPackage->cDependencyProviders)
1508 {
1509 // Bundles only support a single provider key.
1510 const BURN_DEPENDENCY_PROVIDER* pProvider = pPackage->rgDependencyProviders;
1511 DictAddKey(sdProviderKeys, pProvider->sczKey);
1512 }
1513 }
1514 break; 1513 break;
1515 1514
1516 case BURN_EXECUTE_ACTION_TYPE_EXE_PACKAGE: 1515 case BURN_EXECUTE_ACTION_TYPE_EXE_PACKAGE:
1517 packageAction = pPlan->rgExecuteActions[i].exePackage.action; 1516 packageAction = pPlan->rgExecuteActions[i].exePackage.action;
1517 pPackage = pPlan->rgExecuteActions[i].exePackage.pPackage;
1518 fBundle = TRUE;
1518 break; 1519 break;
1519 1520
1520 case BURN_EXECUTE_ACTION_TYPE_MSI_PACKAGE: 1521 case BURN_EXECUTE_ACTION_TYPE_MSI_PACKAGE:
@@ -1530,6 +1531,16 @@ extern "C" HRESULT PlanRelatedBundlesComplete(
1530 break; 1531 break;
1531 } 1532 }
1532 1533
1534 if (fBundle && BOOTSTRAPPER_ACTION_STATE_NONE != packageAction)
1535 {
1536 if (pPackage->cDependencyProviders)
1537 {
1538 // Bundles only support a single provider key.
1539 const BURN_DEPENDENCY_PROVIDER* pProvider = pPackage->rgDependencyProviders;
1540 DictAddKey(sdProviderKeys, pProvider->sczKey);
1541 }
1542 }
1543
1533 fExecutingAnyPackage |= BOOTSTRAPPER_ACTION_STATE_NONE != packageAction; 1544 fExecutingAnyPackage |= BOOTSTRAPPER_ACTION_STATE_NONE != packageAction;
1534 fInstallingAnyPackage |= BOOTSTRAPPER_ACTION_STATE_INSTALL == packageAction || BOOTSTRAPPER_ACTION_STATE_MINOR_UPGRADE == packageAction; 1545 fInstallingAnyPackage |= BOOTSTRAPPER_ACTION_STATE_INSTALL == packageAction || BOOTSTRAPPER_ACTION_STATE_MINOR_UPGRADE == packageAction;
1535 } 1546 }