diff options
author | Sean Hall <r.sean.hall@gmail.com> | 2022-08-22 15:11:15 -0500 |
---|---|---|
committer | Sean Hall <r.sean.hall@gmail.com> | 2022-08-23 10:26:26 -0500 |
commit | 42964da2a12df3b6e7d658a8037f17be003b1947 (patch) | |
tree | a4780a50a0fea0f51525e8a3c05d318e88aac9be /src/burn | |
parent | cb3776e5e3e075e8e4fe2ae7231ec19f3345c546 (diff) | |
download | wix-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.cpp | 14 |
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""); |