aboutsummaryrefslogtreecommitdiff
path: root/src/ext
diff options
context:
space:
mode:
authorSean Hall <r.sean.hall@gmail.com>2022-03-13 23:51:36 -0500
committerSean Hall <r.sean.hall@gmail.com>2022-03-14 14:53:29 -0500
commit9453eaa9a38f78e248526ddd996485140a5d4d9a (patch)
tree8ef6bda85836fd3f1b9c2c6c16cb4a994519e863 /src/ext
parent78125b7c4bd59468275d65b63860bdb68b1bc6f1 (diff)
downloadwix-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.cpp56
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
2122public: //CBalBaseBootstrapperApplication 2120public: //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;