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; |