diff options
Diffstat (limited to '')
-rw-r--r-- | src/engine/dependency.cpp | 29 |
1 files changed, 29 insertions, 0 deletions
diff --git a/src/engine/dependency.cpp b/src/engine/dependency.cpp index 1c33aaf2..a6a8fe4d 100644 --- a/src/engine/dependency.cpp +++ b/src/engine/dependency.cpp | |||
@@ -708,6 +708,9 @@ static HRESULT DetectPackageDependents( | |||
708 | { | 708 | { |
709 | HRESULT hr = S_OK; | 709 | HRESULT hr = S_OK; |
710 | HKEY hkHive = pPackage->fPerMachine ? HKEY_LOCAL_MACHINE : HKEY_CURRENT_USER; | 710 | HKEY hkHive = pPackage->fPerMachine ? HKEY_LOCAL_MACHINE : HKEY_CURRENT_USER; |
711 | BOOL fCanIgnorePresence = pPackage->fCanAffectRegistration && 0 < pPackage->cDependencyProviders && | ||
712 | (BURN_PACKAGE_REGISTRATION_STATE_PRESENT == pPackage->cacheRegistrationState || BURN_PACKAGE_REGISTRATION_STATE_PRESENT == pPackage->installRegistrationState); | ||
713 | BOOL fBundleRegisteredAsDependent = FALSE; | ||
711 | 714 | ||
712 | // There's currently no point in getting the dependents if the scope doesn't match, | 715 | // There's currently no point in getting the dependents if the scope doesn't match, |
713 | // because they will just get ignored. | 716 | // because they will just get ignored. |
@@ -729,6 +732,20 @@ static HRESULT DetectPackageDependents( | |||
729 | { | 732 | { |
730 | pPackage->fPackageProviderExists = TRUE; | 733 | pPackage->fPackageProviderExists = TRUE; |
731 | } | 734 | } |
735 | |||
736 | if (fCanIgnorePresence && !fBundleRegisteredAsDependent) | ||
737 | { | ||
738 | for (DWORD iDependent = 0; iDependent < pProvider->cDependents; ++iDependent) | ||
739 | { | ||
740 | DEPENDENCY* pDependent = pProvider->rgDependents + iDependent; | ||
741 | |||
742 | if (CSTR_EQUAL == ::CompareStringW(LOCALE_NEUTRAL, NORM_IGNORECASE, pRegistration->sczId, -1, pDependent->sczKey, -1)) | ||
743 | { | ||
744 | fBundleRegisteredAsDependent = TRUE; | ||
745 | break; | ||
746 | } | ||
747 | } | ||
748 | } | ||
732 | } | 749 | } |
733 | else | 750 | else |
734 | { | 751 | { |
@@ -747,6 +764,18 @@ static HRESULT DetectPackageDependents( | |||
747 | pPackage->fPackageProviderExists = TRUE; | 764 | pPackage->fPackageProviderExists = TRUE; |
748 | } | 765 | } |
749 | 766 | ||
767 | if (fCanIgnorePresence && !fBundleRegisteredAsDependent) | ||
768 | { | ||
769 | if (BURN_PACKAGE_REGISTRATION_STATE_PRESENT == pPackage->cacheRegistrationState) | ||
770 | { | ||
771 | pPackage->cacheRegistrationState = BURN_PACKAGE_REGISTRATION_STATE_IGNORED; | ||
772 | } | ||
773 | if (BURN_PACKAGE_REGISTRATION_STATE_PRESENT == pPackage->installRegistrationState) | ||
774 | { | ||
775 | pPackage->installRegistrationState = BURN_PACKAGE_REGISTRATION_STATE_IGNORED; | ||
776 | } | ||
777 | } | ||
778 | |||
750 | LExit: | 779 | LExit: |
751 | return hr; | 780 | return hr; |
752 | } | 781 | } |