From b5c4d92528dd088d0065c634eb1a353c424a4441 Mon Sep 17 00:00:00 2001 From: Sean Hall Date: Wed, 24 Feb 2021 17:02:31 -0600 Subject: Always remove all dependencies the bundle could have registered. #6297 --- src/engine/dependency.cpp | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) (limited to 'src/engine/dependency.cpp') diff --git a/src/engine/dependency.cpp b/src/engine/dependency.cpp index 3d978740..4833de94 100644 --- a/src/engine/dependency.cpp +++ b/src/engine/dependency.cpp @@ -680,10 +680,12 @@ LExit: } extern "C" void DependencyUnregisterBundle( - __in const BURN_REGISTRATION* pRegistration + __in const BURN_REGISTRATION* pRegistration, + __in const BURN_PACKAGES* pPackages ) { HRESULT hr = S_OK; + LPCWSTR wzDependentProviderKey = pRegistration->sczId; // Remove the bundle provider key. hr = DepUnregisterDependency(pRegistration->hkRoot, pRegistration->sczProviderKey); @@ -695,6 +697,19 @@ extern "C" void DependencyUnregisterBundle( { LogId(REPORT_VERBOSE, MSG_DEPENDENCY_BUNDLE_UNREGISTERED_FAILED, pRegistration->sczProviderKey, hr); } + + // Best effort to make sure this bundle is not registered as a dependent for anything. + for (DWORD i = 0; i < pPackages->cPackages; ++i) + { + const BURN_PACKAGE* pPackage = pPackages->rgPackages + i; + UnregisterPackageDependency(pPackage->fPerMachine, pPackage, wzDependentProviderKey); + } + + for (DWORD i = 0; i < pRegistration->relatedBundles.cRelatedBundles; ++i) + { + const BURN_PACKAGE* pPackage = &pRegistration->relatedBundles.rgRelatedBundles[i].package; + UnregisterPackageDependency(pPackage->fPerMachine, pPackage, wzDependentProviderKey); + } } // internal functions -- cgit v1.2.3-55-g6feb