aboutsummaryrefslogtreecommitdiff
path: root/src/engine/dependency.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/engine/dependency.cpp')
-rw-r--r--src/engine/dependency.cpp17
1 files changed, 16 insertions, 1 deletions
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:
680} 680}
681 681
682extern "C" void DependencyUnregisterBundle( 682extern "C" void DependencyUnregisterBundle(
683 __in const BURN_REGISTRATION* pRegistration 683 __in const BURN_REGISTRATION* pRegistration,
684 __in const BURN_PACKAGES* pPackages
684 ) 685 )
685{ 686{
686 HRESULT hr = S_OK; 687 HRESULT hr = S_OK;
688 LPCWSTR wzDependentProviderKey = pRegistration->sczId;
687 689
688 // Remove the bundle provider key. 690 // Remove the bundle provider key.
689 hr = DepUnregisterDependency(pRegistration->hkRoot, pRegistration->sczProviderKey); 691 hr = DepUnregisterDependency(pRegistration->hkRoot, pRegistration->sczProviderKey);
@@ -695,6 +697,19 @@ extern "C" void DependencyUnregisterBundle(
695 { 697 {
696 LogId(REPORT_VERBOSE, MSG_DEPENDENCY_BUNDLE_UNREGISTERED_FAILED, pRegistration->sczProviderKey, hr); 698 LogId(REPORT_VERBOSE, MSG_DEPENDENCY_BUNDLE_UNREGISTERED_FAILED, pRegistration->sczProviderKey, hr);
697 } 699 }
700
701 // Best effort to make sure this bundle is not registered as a dependent for anything.
702 for (DWORD i = 0; i < pPackages->cPackages; ++i)
703 {
704 const BURN_PACKAGE* pPackage = pPackages->rgPackages + i;
705 UnregisterPackageDependency(pPackage->fPerMachine, pPackage, wzDependentProviderKey);
706 }
707
708 for (DWORD i = 0; i < pRegistration->relatedBundles.cRelatedBundles; ++i)
709 {
710 const BURN_PACKAGE* pPackage = &pRegistration->relatedBundles.rgRelatedBundles[i].package;
711 UnregisterPackageDependency(pPackage->fPerMachine, pPackage, wzDependentProviderKey);
712 }
698} 713}
699 714
700// internal functions 715// internal functions