aboutsummaryrefslogtreecommitdiff
path: root/src/burn/engine
diff options
context:
space:
mode:
authorNir Bar <nir.bar@panel-sw.co.il>2025-02-25 11:31:17 +0200
committerRob Mensching <rob@firegiant.com>2026-01-21 08:10:14 -0800
commit49fbdf6f34b69a0157addcda2e28a96227a72630 (patch)
tree525e82fcd8c9064eb97b29f3ccb7dbb57f821984 /src/burn/engine
parent9a26c32398337aff57da6e92088b90314b81cf03 (diff)
downloadwix-49fbdf6f34b69a0157addcda2e28a96227a72630.tar.gz
wix-49fbdf6f34b69a0157addcda2e28a96227a72630.tar.bz2
wix-49fbdf6f34b69a0157addcda2e28a96227a72630.zip
ForceAbsent can now remove a package even if it still has dependents
Resolves 8962
Diffstat (limited to 'src/burn/engine')
-rw-r--r--src/burn/engine/dependency.cpp12
-rw-r--r--src/burn/engine/engine.mc6
2 files changed, 17 insertions, 1 deletions
diff --git a/src/burn/engine/dependency.cpp b/src/burn/engine/dependency.cpp
index 767d5004..6f80c21b 100644
--- a/src/burn/engine/dependency.cpp
+++ b/src/burn/engine/dependency.cpp
@@ -419,6 +419,7 @@ extern "C" HRESULT DependencyPlanPackageBegin(
419 STRINGDICT_HANDLE sdIgnoredDependents = NULL; 419 STRINGDICT_HANDLE sdIgnoredDependents = NULL;
420 BURN_DEPENDENCY_ACTION dependencyExecuteAction = BURN_DEPENDENCY_ACTION_NONE; 420 BURN_DEPENDENCY_ACTION dependencyExecuteAction = BURN_DEPENDENCY_ACTION_NONE;
421 BURN_DEPENDENCY_ACTION dependencyRollbackAction = BURN_DEPENDENCY_ACTION_NONE; 421 BURN_DEPENDENCY_ACTION dependencyRollbackAction = BURN_DEPENDENCY_ACTION_NONE;
422 BOOL fDependenciesForcedAbsent = FALSE;
422 BOOL fDependentBlocksUninstall = FALSE; 423 BOOL fDependentBlocksUninstall = FALSE;
423 BOOL fAttemptingUninstall = BOOTSTRAPPER_ACTION_STATE_UNINSTALL == pPackage->execute || pPackage->compatiblePackage.fRemove; 424 BOOL fAttemptingUninstall = BOOTSTRAPPER_ACTION_STATE_UNINSTALL == pPackage->execute || pPackage->compatiblePackage.fRemove;
424 425
@@ -467,7 +468,16 @@ extern "C" HRESULT DependencyPlanPackageBegin(
467 { 468 {
468 hr = S_OK; 469 hr = S_OK;
469 470
470 if (!fDependentBlocksUninstall) 471 if (BOOTSTRAPPER_REQUEST_STATE_FORCE_ABSENT == pPackage->requested)
472 {
473 if (!fDependenciesForcedAbsent)
474 {
475 fDependenciesForcedAbsent = TRUE;
476
477 LogId(REPORT_STANDARD, MSG_DEPENDENCY_PACKAGE_DEPENDENTS_OVERRIDDEN, pPackage->sczId);
478 }
479 }
480 else if (!fDependentBlocksUninstall)
471 { 481 {
472 fDependentBlocksUninstall = TRUE; 482 fDependentBlocksUninstall = TRUE;
473 483
diff --git a/src/burn/engine/engine.mc b/src/burn/engine/engine.mc
index c7a07385..776f7832 100644
--- a/src/burn/engine/engine.mc
+++ b/src/burn/engine/engine.mc
@@ -1282,3 +1282,9 @@ Language=English
1282Skipping MSI property '%1!ls!' because condition '%2!ls!' evaluates to %3!hs!. 1282Skipping MSI property '%1!ls!' because condition '%2!ls!' evaluates to %3!hs!.
1283. 1283.
1284 1284
1285MessageId=701
1286Severity=Warning
1287SymbolicName=MSG_DEPENDENCY_PACKAGE_DEPENDENTS_OVERRIDDEN
1288Language=English
1289BA requested to uninstall package: %1!ls!, despite dependents:
1290.