diff options
| author | Sean Hall <r.sean.hall@gmail.com> | 2022-03-13 23:51:36 -0500 |
|---|---|---|
| committer | Sean Hall <r.sean.hall@gmail.com> | 2022-03-14 14:53:29 -0500 |
| commit | 9453eaa9a38f78e248526ddd996485140a5d4d9a (patch) | |
| tree | 8ef6bda85836fd3f1b9c2c6c16cb4a994519e863 /src/ext | |
| parent | 78125b7c4bd59468275d65b63860bdb68b1bc6f1 (diff) | |
| download | wix-9453eaa9a38f78e248526ddd996485140a5d4d9a.tar.gz wix-9453eaa9a38f78e248526ddd996485140a5d4d9a.tar.bz2 wix-9453eaa9a38f78e248526ddd996485140a5d4d9a.zip | |
Make engine skip planning if there are any downgrade related bundles.
Fixes 6677, 6722
Reverts 6537
Diffstat (limited to 'src/ext')
| -rw-r--r-- | src/ext/Bal/wixstdba/WixStandardBootstrapperApplication.cpp | 56 |
1 files changed, 26 insertions, 30 deletions
diff --git a/src/ext/Bal/wixstdba/WixStandardBootstrapperApplication.cpp b/src/ext/Bal/wixstdba/WixStandardBootstrapperApplication.cpp index 91033a26..2a5d839a 100644 --- a/src/ext/Bal/wixstdba/WixStandardBootstrapperApplication.cpp +++ b/src/ext/Bal/wixstdba/WixStandardBootstrapperApplication.cpp | |||
| @@ -254,7 +254,6 @@ public: // IBootstrapperApplication | |||
| 254 | ) | 254 | ) |
| 255 | { | 255 | { |
| 256 | BAL_INFO_PACKAGE* pPackage = NULL; | 256 | BAL_INFO_PACKAGE* pPackage = NULL; |
| 257 | int nCompare = 0; | ||
| 258 | 257 | ||
| 259 | if (!fMissingFromCache) | 258 | if (!fMissingFromCache) |
| 260 | { | 259 | { |
| @@ -262,14 +261,6 @@ public: // IBootstrapperApplication | |||
| 262 | { | 261 | { |
| 263 | InitializePackageInfoForPackage(pPackage); | 262 | InitializePackageInfoForPackage(pPackage); |
| 264 | } | 263 | } |
| 265 | |||
| 266 | // If we're not doing a prerequisite install, remember when our bundle would cause a downgrade. | ||
| 267 | if (!m_fPrereq && BOOTSTRAPPER_RELATION_UPGRADE == relationType && | ||
| 268 | SUCCEEDED(m_pEngine->CompareVersions(m_sczBundleVersion, wzVersion, &nCompare)) && 0 > nCompare) | ||
| 269 | { | ||
| 270 | BalLog(BOOTSTRAPPER_LOG_LEVEL_STANDARD, "A newer version (v%ls) of this product is installed.", wzVersion); | ||
| 271 | m_fDowngrading = TRUE; | ||
| 272 | } | ||
| 273 | } | 264 | } |
| 274 | 265 | ||
| 275 | return CBalBaseBootstrapperApplication::OnDetectRelatedBundle(wzBundleId, relationType, wzBundleTag, fPerMachine, wzVersion, fMissingFromCache, pfCancel); | 266 | return CBalBaseBootstrapperApplication::OnDetectRelatedBundle(wzBundleId, relationType, wzBundleTag, fPerMachine, wzVersion, fMissingFromCache, pfCancel); |
| @@ -345,23 +336,6 @@ public: // IBootstrapperApplication | |||
| 345 | } | 336 | } |
| 346 | } | 337 | } |
| 347 | } | 338 | } |
| 348 | else if (m_fDowngrading && BOOTSTRAPPER_ACTION_UNINSTALL < m_command.action) | ||
| 349 | { | ||
| 350 | if (m_fSuppressDowngradeFailure) | ||
| 351 | { | ||
| 352 | BalLog(BOOTSTRAPPER_LOG_LEVEL_STANDARD, "Downgrade failure has been suppressed; exiting bundle."); | ||
| 353 | |||
| 354 | hr = S_OK; | ||
| 355 | SetState(WIXSTDBA_STATE_APPLIED, hr); | ||
| 356 | ExitFunction(); | ||
| 357 | } | ||
| 358 | else | ||
| 359 | { | ||
| 360 | // If we are going to apply a downgrade, bail. | ||
| 361 | hr = HRESULT_FROM_WIN32(ERROR_PRODUCT_VERSION); | ||
| 362 | BalExitOnFailure(hr, "Cannot install a product when a newer version is installed."); | ||
| 363 | } | ||
| 364 | } | ||
| 365 | } | 339 | } |
| 366 | 340 | ||
| 367 | SetState(WIXSTDBA_STATE_DETECTED, hrStatus); | 341 | SetState(WIXSTDBA_STATE_DETECTED, hrStatus); |
| @@ -371,7 +345,6 @@ public: // IBootstrapperApplication | |||
| 371 | ::PostMessageW(m_hWnd, WM_WIXSTDBA_PLAN_PACKAGES, 0, m_command.action); | 345 | ::PostMessageW(m_hWnd, WM_WIXSTDBA_PLAN_PACKAGES, 0, m_command.action); |
| 372 | } | 346 | } |
| 373 | 347 | ||
| 374 | LExit: | ||
| 375 | return hr; | 348 | return hr; |
| 376 | } | 349 | } |
| 377 | 350 | ||
| @@ -1092,6 +1065,20 @@ public: // IBootstrapperApplication | |||
| 1092 | return hr; | 1065 | return hr; |
| 1093 | } | 1066 | } |
| 1094 | 1067 | ||
| 1068 | virtual STDMETHODIMP OnApplyDowngrade( | ||
| 1069 | __in HRESULT /*hrRecommendation*/, | ||
| 1070 | __in HRESULT* phrStatus | ||
| 1071 | ) | ||
| 1072 | { | ||
| 1073 | HRESULT hr = S_OK; | ||
| 1074 | |||
| 1075 | if (m_fSuppressDowngradeFailure) | ||
| 1076 | { | ||
| 1077 | *phrStatus = S_OK; | ||
| 1078 | } | ||
| 1079 | |||
| 1080 | return hr; | ||
| 1081 | } | ||
| 1095 | 1082 | ||
| 1096 | virtual STDMETHODIMP OnApplyComplete( | 1083 | virtual STDMETHODIMP OnApplyComplete( |
| 1097 | __in HRESULT hrStatus, | 1084 | __in HRESULT hrStatus, |
| @@ -1445,6 +1432,9 @@ public: // IBootstrapperApplication | |||
| 1445 | case BOOTSTRAPPER_APPLICATION_MESSAGE_ONPLANRELATEDBUNDLETYPE: | 1432 | case BOOTSTRAPPER_APPLICATION_MESSAGE_ONPLANRELATEDBUNDLETYPE: |
| 1446 | OnPlanRelatedBundleTypeFallback(reinterpret_cast<BA_ONPLANRELATEDBUNDLETYPE_ARGS*>(pvArgs), reinterpret_cast<BA_ONPLANRELATEDBUNDLETYPE_RESULTS*>(pvResults)); | 1433 | OnPlanRelatedBundleTypeFallback(reinterpret_cast<BA_ONPLANRELATEDBUNDLETYPE_ARGS*>(pvArgs), reinterpret_cast<BA_ONPLANRELATEDBUNDLETYPE_RESULTS*>(pvResults)); |
| 1447 | break; | 1434 | break; |
| 1435 | case BOOTSTRAPPER_APPLICATION_MESSAGE_ONAPPLYDOWNGRADE: | ||
| 1436 | OnApplyDowngradeFallback(reinterpret_cast<BA_ONAPPLYDOWNGRADE_ARGS*>(pvArgs), reinterpret_cast<BA_ONAPPLYDOWNGRADE_RESULTS*>(pvResults)); | ||
| 1437 | break; | ||
| 1448 | default: | 1438 | default: |
| 1449 | #ifdef DEBUG | 1439 | #ifdef DEBUG |
| 1450 | BalLog(BOOTSTRAPPER_LOG_LEVEL_STANDARD, "WIXSTDBA: Forwarding unknown BA message: %d", message); | 1440 | BalLog(BOOTSTRAPPER_LOG_LEVEL_STANDARD, "WIXSTDBA: Forwarding unknown BA message: %d", message); |
| @@ -2118,6 +2108,14 @@ private: // privates | |||
| 2118 | BalLogId(BOOTSTRAPPER_LOG_LEVEL_STANDARD, MSG_WIXSTDBA_PLANNED_RESTORE_RELATED_BUNDLE, m_hModule, pArgs->wzBundleId, LoggingRequestStateToString(requestedState), LoggingRequestStateToString(pResults->requestedState)); | 2108 | BalLogId(BOOTSTRAPPER_LOG_LEVEL_STANDARD, MSG_WIXSTDBA_PLANNED_RESTORE_RELATED_BUNDLE, m_hModule, pArgs->wzBundleId, LoggingRequestStateToString(requestedState), LoggingRequestStateToString(pResults->requestedState)); |
| 2119 | } | 2109 | } |
| 2120 | 2110 | ||
| 2111 | void OnApplyDowngradeFallback( | ||
| 2112 | __in BA_ONAPPLYDOWNGRADE_ARGS* pArgs, | ||
| 2113 | __inout BA_ONAPPLYDOWNGRADE_RESULTS* pResults | ||
| 2114 | ) | ||
| 2115 | { | ||
| 2116 | m_pfnBAFunctionsProc(BA_FUNCTIONS_MESSAGE_ONAPPLYDOWNGRADE, pArgs, pResults, m_pvBAFunctionsProcContext); | ||
| 2117 | } | ||
| 2118 | |||
| 2121 | 2119 | ||
| 2122 | public: //CBalBaseBootstrapperApplication | 2120 | public: //CBalBaseBootstrapperApplication |
| 2123 | virtual STDMETHODIMP Initialize( | 2121 | virtual STDMETHODIMP Initialize( |
| @@ -4195,7 +4193,7 @@ public: | |||
| 4195 | __in BOOL fPrereq, | 4193 | __in BOOL fPrereq, |
| 4196 | __in HRESULT hrHostInitialization, | 4194 | __in HRESULT hrHostInitialization, |
| 4197 | __in IBootstrapperEngine* pEngine | 4195 | __in IBootstrapperEngine* pEngine |
| 4198 | ) : CBalBaseBootstrapperApplication(pEngine, 3, 3000) | 4196 | ) : CBalBaseBootstrapperApplication(pEngine, 3, 3000) |
| 4199 | { | 4197 | { |
| 4200 | THEME_ASSIGN_CONTROL_ID* pAssignControl = NULL; | 4198 | THEME_ASSIGN_CONTROL_ID* pAssignControl = NULL; |
| 4201 | 4199 | ||
| @@ -4224,7 +4222,6 @@ public: | |||
| 4224 | m_state = WIXSTDBA_STATE_INITIALIZING; | 4222 | m_state = WIXSTDBA_STATE_INITIALIZING; |
| 4225 | m_hrFinal = hrHostInitialization; | 4223 | m_hrFinal = hrHostInitialization; |
| 4226 | 4224 | ||
| 4227 | m_fDowngrading = FALSE; | ||
| 4228 | m_restartResult = BOOTSTRAPPER_APPLY_RESTART_NONE; | 4225 | m_restartResult = BOOTSTRAPPER_APPLY_RESTART_NONE; |
| 4229 | m_fRestartRequired = FALSE; | 4226 | m_fRestartRequired = FALSE; |
| 4230 | m_fShouldRestart = FALSE; | 4227 | m_fShouldRestart = FALSE; |
| @@ -4529,7 +4526,6 @@ private: | |||
| 4529 | DWORD m_dwCalculatedCacheProgress; | 4526 | DWORD m_dwCalculatedCacheProgress; |
| 4530 | DWORD m_dwCalculatedExecuteProgress; | 4527 | DWORD m_dwCalculatedExecuteProgress; |
| 4531 | 4528 | ||
| 4532 | BOOL m_fDowngrading; | ||
| 4533 | BOOTSTRAPPER_APPLY_RESTART m_restartResult; | 4529 | BOOTSTRAPPER_APPLY_RESTART m_restartResult; |
| 4534 | BOOL m_fRestartRequired; | 4530 | BOOL m_fRestartRequired; |
| 4535 | BOOL m_fShouldRestart; | 4531 | BOOL m_fShouldRestart; |
