From fc3e4722307c86b5d06918f0721b98323735bb40 Mon Sep 17 00:00:00 2001 From: Sean Hall Date: Mon, 21 Mar 2022 23:22:23 -0500 Subject: Add `ExePackage/@Bundle` to opt-in to v3 behavior. Automatically add '-norestart' for bundle ExePackages. Fixes 6252 --- src/burn/engine/plan.cpp | 33 ++++++++++++++++++++++----------- 1 file changed, 22 insertions(+), 11 deletions(-) (limited to 'src/burn/engine/plan.cpp') 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( ReleaseStr(pExecuteAction->relatedBundle.sczEngineWorkingDirectory); break; + case BURN_EXECUTE_ACTION_TYPE_EXE_PACKAGE: + ReleaseStr(pExecuteAction->exePackage.sczIgnoreDependencies); + ReleaseStr(pExecuteAction->exePackage.sczAncestors); + ReleaseStr(pExecuteAction->exePackage.sczEngineWorkingDirectory); + break; + case BURN_EXECUTE_ACTION_TYPE_MSI_PACKAGE: ReleaseStr(pExecuteAction->msiPackage.sczLogPath); ReleaseMem(pExecuteAction->msiPackage.rgFeatures); @@ -1495,26 +1501,21 @@ extern "C" HRESULT PlanRelatedBundlesComplete( for (DWORD i = 0; i < pPlan->cExecuteActions; ++i) { BOOTSTRAPPER_ACTION_STATE packageAction = BOOTSTRAPPER_ACTION_STATE_NONE; + BURN_PACKAGE* pPackage = &pPlan->rgExecuteActions[i].relatedBundle.pRelatedBundle->package; + BOOL fBundle = FALSE; switch (pPlan->rgExecuteActions[i].type) { case BURN_EXECUTE_ACTION_TYPE_RELATED_BUNDLE: packageAction = pPlan->rgExecuteActions[i].relatedBundle.action; - - if (BOOTSTRAPPER_ACTION_STATE_NONE != packageAction) - { - BURN_PACKAGE* pPackage = &pPlan->rgExecuteActions[i].relatedBundle.pRelatedBundle->package; - if (pPackage->cDependencyProviders) - { - // Bundles only support a single provider key. - const BURN_DEPENDENCY_PROVIDER* pProvider = pPackage->rgDependencyProviders; - DictAddKey(sdProviderKeys, pProvider->sczKey); - } - } + pPackage = &pPlan->rgExecuteActions[i].relatedBundle.pRelatedBundle->package; + fBundle = TRUE; break; case BURN_EXECUTE_ACTION_TYPE_EXE_PACKAGE: packageAction = pPlan->rgExecuteActions[i].exePackage.action; + pPackage = pPlan->rgExecuteActions[i].exePackage.pPackage; + fBundle = TRUE; break; case BURN_EXECUTE_ACTION_TYPE_MSI_PACKAGE: @@ -1530,6 +1531,16 @@ extern "C" HRESULT PlanRelatedBundlesComplete( break; } + if (fBundle && BOOTSTRAPPER_ACTION_STATE_NONE != packageAction) + { + if (pPackage->cDependencyProviders) + { + // Bundles only support a single provider key. + const BURN_DEPENDENCY_PROVIDER* pProvider = pPackage->rgDependencyProviders; + DictAddKey(sdProviderKeys, pProvider->sczKey); + } + } + fExecutingAnyPackage |= BOOTSTRAPPER_ACTION_STATE_NONE != packageAction; fInstallingAnyPackage |= BOOTSTRAPPER_ACTION_STATE_INSTALL == packageAction || BOOTSTRAPPER_ACTION_STATE_MINOR_UPGRADE == packageAction; } -- cgit v1.2.3-55-g6feb