diff options
author | Sean Hall <r.sean.hall@gmail.com> | 2022-03-21 23:22:23 -0500 |
---|---|---|
committer | Sean Hall <r.sean.hall@gmail.com> | 2022-03-22 12:26:48 -0500 |
commit | fc3e4722307c86b5d06918f0721b98323735bb40 (patch) | |
tree | 1a8c6fa25274cce22f0e274a6b3b1c5c06614745 /src/burn/engine/plan.cpp | |
parent | 9bb420a19538321789b8300051cd595d6c00c710 (diff) | |
download | wix-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.cpp | 33 |
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 | } |