aboutsummaryrefslogtreecommitdiff
path: root/src/burn
diff options
context:
space:
mode:
authorSean Hall <r.sean.hall@gmail.com>2022-08-22 15:11:15 -0500
committerSean Hall <r.sean.hall@gmail.com>2022-08-23 10:26:26 -0500
commit42964da2a12df3b6e7d658a8037f17be003b1947 (patch)
treea4780a50a0fea0f51525e8a3c05d318e88aac9be /src/burn
parentcb3776e5e3e075e8e4fe2ae7231ec19f3345c546 (diff)
downloadwix-42964da2a12df3b6e7d658a8037f17be003b1947.tar.gz
wix-42964da2a12df3b6e7d658a8037f17be003b1947.tar.bz2
wix-42964da2a12df3b6e7d658a8037f17be003b1947.zip
Port EnableFeatureSelection tests from v3 repo, add a new one, fix them
Fixes 4616
Diffstat (limited to 'src/burn')
-rw-r--r--src/burn/engine/msiengine.cpp14
1 files changed, 9 insertions, 5 deletions
diff --git a/src/burn/engine/msiengine.cpp b/src/burn/engine/msiengine.cpp
index edbf4d45..2c1b0d4f 100644
--- a/src/burn/engine/msiengine.cpp
+++ b/src/burn/engine/msiengine.cpp
@@ -448,12 +448,15 @@ extern "C" HRESULT MsiEngineDetectPackage(
448 VERUTIL_VERSION* pVersion = NULL; 448 VERUTIL_VERSION* pVersion = NULL;
449 UINT uLcid = 0; 449 UINT uLcid = 0;
450 BOOL fPerMachine = FALSE; 450 BOOL fPerMachine = FALSE;
451 BOOL fDetectFeatures = FALSE;
451 452
452 // detect self by product code 453 // detect self by product code
453 // TODO: what to do about MSIINSTALLCONTEXT_USERMANAGED? 454 // TODO: what to do about MSIINSTALLCONTEXT_USERMANAGED?
454 hr = WiuGetProductInfoEx(pPackage->Msi.sczProductCode, NULL, pPackage->fPerMachine ? MSIINSTALLCONTEXT_MACHINE : MSIINSTALLCONTEXT_USERUNMANAGED, INSTALLPROPERTY_VERSIONSTRING, &sczInstalledVersion); 455 hr = WiuGetProductInfoEx(pPackage->Msi.sczProductCode, NULL, pPackage->fPerMachine ? MSIINSTALLCONTEXT_MACHINE : MSIINSTALLCONTEXT_USERUNMANAGED, INSTALLPROPERTY_VERSIONSTRING, &sczInstalledVersion);
455 if (SUCCEEDED(hr)) 456 if (SUCCEEDED(hr))
456 { 457 {
458 fDetectFeatures = TRUE;
459
457 hr = VerParseVersion(sczInstalledVersion, 0, FALSE, &pVersion); 460 hr = VerParseVersion(sczInstalledVersion, 0, FALSE, &pVersion);
458 ExitOnFailure(hr, "Failed to parse installed version: '%ls' for ProductCode: %ls", sczInstalledVersion, pPackage->Msi.sczProductCode); 461 ExitOnFailure(hr, "Failed to parse installed version: '%ls' for ProductCode: %ls", sczInstalledVersion, pPackage->Msi.sczProductCode);
459 462
@@ -661,7 +664,7 @@ extern "C" HRESULT MsiEngineDetectPackage(
661 BURN_MSIFEATURE* pFeature = &pPackage->Msi.rgFeatures[i]; 664 BURN_MSIFEATURE* pFeature = &pPackage->Msi.rgFeatures[i];
662 665
663 // Try to detect features state if the product is present on the machine. 666 // Try to detect features state if the product is present on the machine.
664 if (BOOTSTRAPPER_PACKAGE_STATE_PRESENT <= pPackage->currentState) 667 if (fDetectFeatures)
665 { 668 {
666 hr = WiuQueryFeatureState(pPackage->Msi.sczProductCode, pFeature->sczId, &installState); 669 hr = WiuQueryFeatureState(pPackage->Msi.sczProductCode, pFeature->sczId, &installState);
667 ExitOnFailure(hr, "Failed to query feature state."); 670 ExitOnFailure(hr, "Failed to query feature state.");
@@ -864,8 +867,9 @@ extern "C" HRESULT MsiEnginePlanCalculatePackage(
864 867
865 if (pPackage->Msi.cFeatures) 868 if (pPackage->Msi.cFeatures)
866 { 869 {
867 // If the package is present and we're repairing it. 870 // If the package is present and we're repairing it, or we're doing a minor update.
868 BOOL fRepairingPackage = (BOOTSTRAPPER_PACKAGE_STATE_ABSENT < pPackage->currentState && BOOTSTRAPPER_REQUEST_STATE_REPAIR == pPackage->requested); 871 BOOL fRepairingPackage = (BOOTSTRAPPER_PACKAGE_STATE_ABSENT < pPackage->currentState && BOOTSTRAPPER_REQUEST_STATE_REPAIR == pPackage->requested) ||
872 BOOTSTRAPPER_RELATED_OPERATION_MINOR_UPDATE == pPackage->Msi.operation;
869 873
870 // plan features 874 // plan features
871 for (DWORD i = 0; i < pPackage->Msi.cFeatures; ++i) 875 for (DWORD i = 0; i < pPackage->Msi.cFeatures; ++i)
@@ -1282,10 +1286,10 @@ extern "C" HRESULT MsiEngineExecutePackage(
1282 hr = ConcatPatchProperty(pCache, pPackage, fRollback, &sczObfuscatedProperties); 1286 hr = ConcatPatchProperty(pCache, pPackage, fRollback, &sczObfuscatedProperties);
1283 ExitOnFailure(hr, "Failed to add patch properties to obfuscated argument string."); 1287 ExitOnFailure(hr, "Failed to add patch properties to obfuscated argument string.");
1284 1288
1285 hr = MsiEngineConcatBurnProperties(pExecuteAction->msiPackage.action, pExecuteAction->msiPackage.actionMsiProperty, pExecuteAction->msiPackage.fileVersioning, TRUE, !pPackage->Msi.cFeatures, &sczProperties); 1289 hr = MsiEngineConcatBurnProperties(pExecuteAction->msiPackage.action, pExecuteAction->msiPackage.actionMsiProperty, pExecuteAction->msiPackage.fileVersioning, TRUE, 0 != pPackage->Msi.cFeatures, &sczProperties);
1286 ExitOnFailure(hr, "Failed to add action property to argument string."); 1290 ExitOnFailure(hr, "Failed to add action property to argument string.");
1287 1291
1288 hr = MsiEngineConcatBurnProperties(pExecuteAction->msiPackage.action, pExecuteAction->msiPackage.actionMsiProperty, pExecuteAction->msiPackage.fileVersioning, TRUE, !pPackage->Msi.cFeatures, &sczObfuscatedProperties); 1292 hr = MsiEngineConcatBurnProperties(pExecuteAction->msiPackage.action, pExecuteAction->msiPackage.actionMsiProperty, pExecuteAction->msiPackage.fileVersioning, TRUE, 0 != pPackage->Msi.cFeatures, &sczObfuscatedProperties);
1289 ExitOnFailure(hr, "Failed to add action property to obfuscated argument string."); 1293 ExitOnFailure(hr, "Failed to add action property to obfuscated argument string.");
1290 1294
1291 LogId(REPORT_STANDARD, MSG_APPLYING_PACKAGE, LoggingRollbackOrExecute(fRollback), pPackage->sczId, LoggingActionStateToString(pExecuteAction->msiPackage.action), sczMsiPath, sczObfuscatedProperties ? sczObfuscatedProperties : L""); 1295 LogId(REPORT_STANDARD, MSG_APPLYING_PACKAGE, LoggingRollbackOrExecute(fRollback), pPackage->sczId, LoggingActionStateToString(pExecuteAction->msiPackage.action), sczMsiPath, sczObfuscatedProperties ? sczObfuscatedProperties : L"");