From fbc1a73743368211d5d8c7fc0625adf6eb9ca50c Mon Sep 17 00:00:00 2001 From: Sean Hall Date: Fri, 18 Mar 2022 20:16:07 -0500 Subject: Add checkpoint so Exe and Msu packages rollback after being cancelled. Fixes 5950 --- src/burn/engine/msuengine.cpp | 27 +++++++++++++++------------ 1 file changed, 15 insertions(+), 12 deletions(-) (limited to 'src/burn/engine/msuengine.cpp') diff --git a/src/burn/engine/msuengine.cpp b/src/burn/engine/msuengine.cpp index 2f1fb61c..2591973f 100644 --- a/src/burn/engine/msuengine.cpp +++ b/src/burn/engine/msuengine.cpp @@ -222,30 +222,33 @@ extern "C" HRESULT MsuEnginePlanAddPackage( hr = DependencyPlanPackage(NULL, pPackage, pPlan); ExitOnFailure(hr, "Failed to plan package dependency actions."); - // add execute action - if (BOOTSTRAPPER_ACTION_STATE_NONE != pPackage->execute) + // add rollback action + if (BOOTSTRAPPER_ACTION_STATE_NONE != pPackage->rollback) { - hr = PlanAppendExecuteAction(pPlan, &pAction); - ExitOnFailure(hr, "Failed to append execute action."); + hr = PlanAppendRollbackAction(pPlan, &pAction); + ExitOnFailure(hr, "Failed to append rollback action."); pAction->type = BURN_EXECUTE_ACTION_TYPE_MSU_PACKAGE; pAction->msuPackage.pPackage = pPackage; - pAction->msuPackage.action = pPackage->execute; + pAction->msuPackage.action = pPackage->rollback; - LoggingSetPackageVariable(pPackage, NULL, FALSE, pLog, pVariables, &pAction->msuPackage.sczLogPath); // ignore errors. + LoggingSetPackageVariable(pPackage, NULL, TRUE, pLog, pVariables, &pAction->msuPackage.sczLogPath); // ignore errors. + + hr = PlanExecuteCheckpoint(pPlan); + ExitOnFailure(hr, "Failed to append execute checkpoint."); } - // add rollback action - if (BOOTSTRAPPER_ACTION_STATE_NONE != pPackage->rollback) + // add execute action + if (BOOTSTRAPPER_ACTION_STATE_NONE != pPackage->execute) { - hr = PlanAppendRollbackAction(pPlan, &pAction); - ExitOnFailure(hr, "Failed to append rollback action."); + hr = PlanAppendExecuteAction(pPlan, &pAction); + ExitOnFailure(hr, "Failed to append execute action."); pAction->type = BURN_EXECUTE_ACTION_TYPE_MSU_PACKAGE; pAction->msuPackage.pPackage = pPackage; - pAction->msuPackage.action = pPackage->rollback; + pAction->msuPackage.action = pPackage->execute; - LoggingSetPackageVariable(pPackage, NULL, TRUE, pLog, pVariables, &pAction->msuPackage.sczLogPath); // ignore errors. + LoggingSetPackageVariable(pPackage, NULL, FALSE, pLog, pVariables, &pAction->msuPackage.sczLogPath); // ignore errors. } LExit: -- cgit v1.2.3-55-g6feb