Remove feature to uninstall compatible orphaned MSI packages.
Sean Hall committed
Feb 1, 2021 at 18:54 UTC
cede270b2bd3da6bd8d5205b8834e786c8d6c1ce
15 files changed
+7
-611
src/WixToolset.BootstrapperCore.Native/inc/BootstrapperApplication.h
-50
@@ -92,15 +92,12 @@ enum BOOTSTRAPPER_APPLICATION_MESSAGE
92
BOOTSTRAPPER_APPLICATION_MESSAGE_ONDETECTUPDATECOMPLETE,
93
BOOTSTRAPPER_APPLICATION_MESSAGE_ONDETECTRELATEDBUNDLE,
94
BOOTSTRAPPER_APPLICATION_MESSAGE_ONDETECTPACKAGEBEGIN,
95
- BOOTSTRAPPER_APPLICATION_MESSAGE_ONDETECTCOMPATIBLEMSIPACKAGE,
95
BOOTSTRAPPER_APPLICATION_MESSAGE_ONDETECTRELATEDMSIPACKAGE,
96
BOOTSTRAPPER_APPLICATION_MESSAGE_ONDETECTTARGETMSIPACKAGE,
97
BOOTSTRAPPER_APPLICATION_MESSAGE_ONDETECTMSIFEATURE,
98
BOOTSTRAPPER_APPLICATION_MESSAGE_ONDETECTPACKAGECOMPLETE,
99
BOOTSTRAPPER_APPLICATION_MESSAGE_ONPLANRELATEDBUNDLE,
100
BOOTSTRAPPER_APPLICATION_MESSAGE_ONPLANPACKAGEBEGIN,
102
- BOOTSTRAPPER_APPLICATION_MESSAGE_ONPLANCOMPATIBLEMSIPACKAGEBEGIN,
103
- BOOTSTRAPPER_APPLICATION_MESSAGE_ONPLANCOMPATIBLEMSIPACKAGECOMPLETE,
101
BOOTSTRAPPER_APPLICATION_MESSAGE_ONPLANTARGETMSIPACKAGE,
102
BOOTSTRAPPER_APPLICATION_MESSAGE_ONPLANMSIFEATURE,
103
BOOTSTRAPPER_APPLICATION_MESSAGE_ONPLANPACKAGECOMPLETE,
@@ -469,20 +466,6 @@ struct BA_ONDETECTBEGIN_RESULTS
466
BOOL fCancel;
467
};
468
472
-struct BA_ONDETECTCOMPATIBLEMSIPACKAGE_ARGS
473
-{
474
- DWORD cbSize;
475
- LPCWSTR wzPackageId;
476
- LPCWSTR wzCompatiblePackageId;
477
- LPCWSTR wzCompatiblePackageVersion;
478
-};
479
-
480
-struct BA_ONDETECTCOMPATIBLEMSIPACKAGE_RESULTS
481
-{
482
- DWORD cbSize;
483
- BOOL fCancel;
484
-};
485
-
469
struct BA_ONDETECTCOMPLETE_ARGS
470
{
471
DWORD cbSize;
@@ -855,39 +838,6 @@ struct BA_ONPLANBEGIN_RESULTS
838
BOOL fCancel;
839
};
840
858
-struct BA_ONPLANCOMPATIBLEMSIPACKAGEBEGIN_ARGS
859
-{
860
- DWORD cbSize;
861
- LPCWSTR wzPackageId;
862
- LPCWSTR wzCompatiblePackageId;
863
- LPCWSTR wzCompatiblePackageVersion;
864
- BOOTSTRAPPER_REQUEST_STATE recommendedState;
865
-};
866
-
867
-struct BA_ONPLANCOMPATIBLEMSIPACKAGEBEGIN_RESULTS
868
-{
869
- DWORD cbSize;
870
- BOOL fCancel;
871
- BOOTSTRAPPER_REQUEST_STATE requestedState;
872
-};
873
-
874
-struct BA_ONPLANCOMPATIBLEMSIPACKAGECOMPLETE_ARGS
875
-{
876
- DWORD cbSize;
877
- LPCWSTR wzPackageId;
878
- LPCWSTR wzCompatiblePackageId;
879
- HRESULT hrStatus;
880
- BOOTSTRAPPER_PACKAGE_STATE state;
881
- BOOTSTRAPPER_REQUEST_STATE requested;
882
- BOOTSTRAPPER_ACTION_STATE execute;
883
- BOOTSTRAPPER_ACTION_STATE rollback;
884
-};
885
-
886
-struct BA_ONPLANCOMPATIBLEMSIPACKAGECOMPLETE_RESULTS
887
-{
888
- DWORD cbSize;
889
-};
890
-
841
struct BA_ONPLANCOMPLETE_ARGS
842
{
843
DWORD cbSize;
src/engine/apply.cpp
-28
@@ -199,10 +199,6 @@ static HRESULT ExecuteDependencyAction(
199
__in BURN_EXECUTE_ACTION* pAction,
200
__in BURN_EXECUTE_CONTEXT* pContext
201
);
202
-static HRESULT ExecuteCompatiblePackageAction(
203
- __in BURN_ENGINE_STATE* pEngineState,
204
- __in BURN_EXECUTE_ACTION* pAction
205
- );
202
static HRESULT ExecuteMsiBeginTransaction(
203
__in BURN_ENGINE_STATE* pEngineState,
204
__in BURN_ROLLBACK_BOUNDARY* pRollbackBoundary,
@@ -1727,11 +1723,6 @@ static HRESULT DoExecuteAction(
1723
ExitOnFailure(hr, "Failed to execute dependency action.");
1724
break;
1725
1730
- case BURN_EXECUTE_ACTION_TYPE_COMPATIBLE_PACKAGE:
1731
- hr = ExecuteCompatiblePackageAction(pEngineState, pExecuteAction);
1732
- ExitOnFailure(hr, "Failed to execute compatible package action.");
1733
- break;
1734
-
1726
case BURN_EXECUTE_ACTION_TYPE_REGISTRATION:
1727
*pfKeepRegistration = pExecuteAction->registration.fKeep;
1728
break;
@@ -2183,25 +2174,6 @@ LExit:
2174
return hr;
2175
}
2176
2186
-static HRESULT ExecuteCompatiblePackageAction(
2187
- __in BURN_ENGINE_STATE* pEngineState,
2188
- __in BURN_EXECUTE_ACTION* pAction
2189
- )
2190
-{
2191
- HRESULT hr = S_OK;
2192
-
2193
- if (pAction->compatiblePackage.pReferencePackage->fPerMachine)
2194
- {
2195
- hr = ElevationLoadCompatiblePackageAction(pEngineState->companionConnection.hPipe, pAction);
2196
- ExitOnFailure(hr, "Failed to load compatible package on per-machine package.");
2197
- }
2198
-
2199
- // Compatible package already loaded in this process.
2200
-
2201
-LExit:
2202
- return hr;
2203
-}
2204
-
2177
static HRESULT ExecuteMsiBeginTransaction(
2178
__in BURN_ENGINE_STATE* pEngineState,
2179
__in BURN_ROLLBACK_BOUNDARY* pRollbackBoundary,
src/engine/core.cpp
-8
@@ -1692,14 +1692,6 @@ static void LogPackages(
1692
LogId(REPORT_STANDARD, MSG_PLANNED_PACKAGE, pPackage->sczId, LoggingPackageStateToString(pPackage->currentState), LoggingRequestStateToString(pPackage->defaultRequested), LoggingRequestStateToString(pPackage->requested), LoggingActionStateToString(pPackage->execute), LoggingActionStateToString(pPackage->rollback), LoggingBoolToString(pPackage->fAcquire), LoggingBoolToString(pPackage->fUncache), LoggingDependencyActionToString(pPackage->dependencyExecute));
1693
}
1694
1695
- for (DWORD i = 0; i < pPackages->cCompatiblePackages; ++i)
1696
- {
1697
- const DWORD iPackage = (BOOTSTRAPPER_ACTION_UNINSTALL == action) ? pPackages->cCompatiblePackages - 1 - i : i;
1698
- const BURN_PACKAGE* pPackage = &pPackages->rgCompatiblePackages[iPackage];
1699
-
1700
- LogId(REPORT_STANDARD, MSG_PLANNED_PACKAGE, pPackage->sczId, LoggingPackageStateToString(pPackage->currentState), LoggingRequestStateToString(pPackage->defaultRequested), LoggingRequestStateToString(pPackage->requested), LoggingActionStateToString(pPackage->execute), LoggingActionStateToString(pPackage->rollback), LoggingBoolToString(pPackage->fAcquire), LoggingBoolToString(pPackage->fUncache), LoggingDependencyActionToString(pPackage->dependencyExecute));
1701
- }
1702
-
1695
// Display related bundles last if caching, installing, modifying, or repairing.
1696
if (BOOTSTRAPPER_ACTION_UNINSTALL < action && 0 < pRelatedBundles->cRelatedBundles)
1697
{
src/engine/detect.cpp
-2
@@ -63,8 +63,6 @@ extern "C" void DetectReset(
63
64
pFeature->currentState = BOOTSTRAPPER_FEATURE_STATE_UNKNOWN;
65
}
66
-
67
- pPackage->Msi.fCompatibleInstalled = FALSE;
66
}
67
else if (BURN_PACKAGE_TYPE_MSP == pPackage->type)
68
{
src/engine/elevation.cpp
-98
@@ -24,7 +24,6 @@ typedef enum _BURN_ELEVATION_MESSAGE_TYPE
24
BURN_ELEVATION_MESSAGE_TYPE_EXECUTE_MSU_PACKAGE,
25
BURN_ELEVATION_MESSAGE_TYPE_EXECUTE_PACKAGE_PROVIDER,
26
BURN_ELEVATION_MESSAGE_TYPE_EXECUTE_PACKAGE_DEPENDENCY,
27
- BURN_ELEVATION_MESSAGE_TYPE_LOAD_COMPATIBLE_PACKAGE,
27
BURN_ELEVATION_MESSAGE_TYPE_LAUNCH_EMBEDDED_CHILD,
28
BURN_ELEVATION_MESSAGE_TYPE_CLEAN_PACKAGE,
29
BURN_ELEVATION_MESSAGE_TYPE_LAUNCH_APPROVED_EXE,
@@ -95,11 +94,6 @@ static HRESULT WaitForElevatedChildCacheThread(
94
__in HANDLE hCacheThread,
95
__in DWORD dwExpectedExitCode
96
);
98
-static HRESULT OnLoadCompatiblePackage(
99
- __in BURN_PACKAGES* pPackages,
100
- __in BYTE* pbData,
101
- __in DWORD cbData
102
- );
97
static HRESULT ProcessApplyInitializeMessages(
98
__in BURN_PIPE_MESSAGE* pMsg,
99
__in_opt LPVOID pvContext,
@@ -1114,45 +1108,6 @@ LExit:
1108
return hr;
1109
}
1110
1117
-/*******************************************************************
1118
- ElevationLoadCompatiblePackageAction - Load compatible package
1119
- information from the referenced package.
1120
-
1121
-*******************************************************************/
1122
-extern "C" HRESULT ElevationLoadCompatiblePackageAction(
1123
- __in HANDLE hPipe,
1124
- __in BURN_EXECUTE_ACTION* pExecuteAction
1125
- )
1126
-{
1127
- HRESULT hr = S_OK;
1128
- BYTE* pbData = NULL;
1129
- SIZE_T cbData = 0;
1130
- DWORD dwResult = 0;
1131
- BOOTSTRAPPER_APPLY_RESTART restart = BOOTSTRAPPER_APPLY_RESTART_NONE;
1132
-
1133
- // Serialize message data.
1134
- hr = BuffWriteString(&pbData, &cbData, pExecuteAction->compatiblePackage.pReferencePackage->sczId);
1135
- ExitOnFailure(hr, "Failed to write package id to message buffer.");
1136
-
1137
- hr = BuffWriteString(&pbData, &cbData, pExecuteAction->compatiblePackage.sczInstalledProductCode);
1138
- ExitOnFailure(hr, "Failed to write installed ProductCode to message buffer.");
1139
-
1140
- hr = BuffWriteString(&pbData, &cbData, pExecuteAction->compatiblePackage.pInstalledVersion->sczVersion);
1141
- ExitOnFailure(hr, "Failed to write installed version to message buffer.");
1142
-
1143
- // Send the message.
1144
- hr = PipeSendMessage(hPipe, BURN_ELEVATION_MESSAGE_TYPE_LOAD_COMPATIBLE_PACKAGE, pbData, cbData, NULL, NULL, &dwResult);
1145
- ExitOnFailure(hr, "Failed to send BURN_ELEVATION_MESSAGE_TYPE_LOAD_COMPATIBLE_PACKAGE message to per-machine process.");
1146
-
1147
- // Ignore the restart since this action only loads data into memory.
1148
- hr = ProcessResult(dwResult, &restart);
1149
-
1150
-LExit:
1151
- ReleaseBuffer(pbData);
1152
-
1153
- return hr;
1154
-}
1155
-
1111
/*******************************************************************
1112
ElevationCleanPackage -
1113
@@ -1719,10 +1674,6 @@ static HRESULT ProcessElevatedChildMessage(
1674
hrResult = OnExecutePackageDependencyAction(pContext->pPackages, &pContext->pRegistration->relatedBundles, (BYTE*)pMsg->pvData, pMsg->cbData);
1675
break;
1676
1722
- case BURN_ELEVATION_MESSAGE_TYPE_LOAD_COMPATIBLE_PACKAGE:
1723
- hrResult = OnLoadCompatiblePackage(pContext->pPackages, (BYTE*)pMsg->pvData, pMsg->cbData);
1724
- break;
1725
-
1677
case BURN_ELEVATION_MESSAGE_TYPE_CLEAN_PACKAGE:
1678
hrResult = OnCleanPackage(pContext->pPackages, (BYTE*)pMsg->pvData, pMsg->cbData);
1679
break;
@@ -2636,55 +2587,6 @@ LExit:
2587
return hr;
2588
}
2589
2639
-static HRESULT OnLoadCompatiblePackage(
2640
- __in BURN_PACKAGES* pPackages,
2641
- __in BYTE* pbData,
2642
- __in DWORD cbData
2643
- )
2644
-{
2645
- HRESULT hr = S_OK;
2646
- SIZE_T iData = 0;
2647
- LPWSTR sczPackage = NULL;
2648
- LPWSTR sczVersion = NULL;
2649
- BURN_EXECUTE_ACTION executeAction = { };
2650
-
2651
- executeAction.type = BURN_EXECUTE_ACTION_TYPE_COMPATIBLE_PACKAGE;
2652
-
2653
- // Deserialize the message data.
2654
- hr = BuffReadString(pbData, cbData, &iData, &sczPackage);
2655
- ExitOnFailure(hr, "Failed to read package id from message buffer.");
2656
-
2657
- // Find the reference package.
2658
- hr = PackageFindById(pPackages, sczPackage, &executeAction.compatiblePackage.pReferencePackage);
2659
- ExitOnFailure(hr, "Failed to find package: %ls", sczPackage);
2660
-
2661
- hr = BuffReadString(pbData, cbData, &iData, &executeAction.compatiblePackage.sczInstalledProductCode);
2662
- ExitOnFailure(hr, "Failed to read installed ProductCode from message buffer.");
2663
-
2664
- hr = BuffReadString(pbData, cbData, &iData, &sczVersion);
2665
- ExitOnFailure(hr, "Failed to read installed version from message buffer.");
2666
-
2667
- hr = VerParseVersion(sczVersion, 0, FALSE, &executeAction.compatiblePackage.pInstalledVersion);
2668
- ExitOnFailure(hr, "Failed to parse installed version from compatible package.");
2669
-
2670
- // Copy the installed data to the reference package.
2671
- hr = StrAllocString(&executeAction.compatiblePackage.pReferencePackage->Msi.sczInstalledProductCode, executeAction.compatiblePackage.sczInstalledProductCode, 0);
2672
- ExitOnFailure(hr, "Failed to copy installed ProductCode.");
2673
-
2674
- executeAction.compatiblePackage.pReferencePackage->Msi.pInstalledVersion = executeAction.compatiblePackage.pInstalledVersion;
2675
-
2676
- // Load the compatible package and add it to the list.
2677
- hr = MsiEngineAddCompatiblePackage(pPackages, executeAction.compatiblePackage.pReferencePackage, NULL);
2678
- ExitOnFailure(hr, "Failed to load compatible package.");
2679
-
2680
-LExit:
2681
- ReleaseStr(sczVersion);
2682
- ReleaseStr(sczPackage);
2683
- PlanUninitializeExecuteAction(&executeAction);
2684
-
2685
- return hr;
2686
-}
2687
-
2590
static int GenericExecuteMessageHandler(
2591
__in GENERIC_EXECUTE_MESSAGE* pMessage,
2592
__in LPVOID pvContext
src/engine/elevation.h
-4
@@ -117,10 +117,6 @@ HRESULT ElevationExecutePackageDependencyAction(
117
__in HANDLE hPipe,
118
__in BURN_EXECUTE_ACTION* pExecuteAction
119
);
120
-HRESULT ElevationLoadCompatiblePackageAction(
121
- __in HANDLE hPipe,
122
- __in BURN_EXECUTE_ACTION* pExecuteAction
123
- );
120
HRESULT ElevationLaunchElevatedChild(
121
__in HANDLE hPipe,
122
__in BURN_PACKAGE* pPackage,
src/engine/engine.mc
-14
@@ -226,13 +226,6 @@ Language=English
226
Detected forward compatible bundle: %1!ls!, type: %2!hs!, scope: %3!hs!, version: %4!ls!, enabled: %5!hs!
227
.
228
229
-MessageId=108
230
-Severity=Success
231
-SymbolicName=MSG_DETECTED_COMPATIBLE_PACKAGE_FROM_PROVIDER
232
-Language=English
233
-Detected compatible package: %1!ls!, provider: %2!ls!, installed: %3!ls!, version: %4!ls!, chained: %5!ls!
234
-.
235
-
229
MessageId=120
230
Severity=Warning
231
SymbolicName=MSG_DETECT_PACKAGE_NOT_FULLY_CACHED
@@ -394,13 +387,6 @@ Language=English
387
Plan skipped related bundle: %1!ls!, type: %2!hs!, because it was previously scheduled.
388
.
389
397
-MessageId=215
398
-Severity=Success
399
-SymbolicName=MSG_PLANNED_ORPHAN_PACKAGE_FROM_PROVIDER
400
-Language=English
401
-Will remove orphan package: %1!ls!, installed: %2!ls!, chained: %3!ls!
402
-.
403
-
390
MessageId=216
391
Severity=Success
392
SymbolicName=MSG_PLAN_SKIPPED_RELATED_BUNDLE_EMBEDDED_BUNDLE_NEWER
src/engine/msiengine.cpp
-156
@@ -325,7 +325,6 @@ extern "C" void MsiEnginePackageUninitialize(
325
{
326
ReleaseStr(pPackage->Msi.sczProductCode);
327
ReleaseStr(pPackage->Msi.sczUpgradeCode);
328
- ReleaseStr(pPackage->Msi.sczInstalledProductCode);
328
329
// free features
330
if (pPackage->Msi.rgFeatures)
@@ -404,8 +403,6 @@ extern "C" HRESULT MsiEngineDetectPackage(
403
int nCompareResult = 0;
404
LPWSTR sczInstalledVersion = NULL;
405
LPWSTR sczInstalledLanguage = NULL;
407
- LPWSTR sczInstalledProductCode = NULL;
408
- LPWSTR sczInstalledProviderKey = NULL;
406
INSTALLSTATE installState = INSTALLSTATE_UNKNOWN;
407
BOOTSTRAPPER_RELATED_OPERATION operation = BOOTSTRAPPER_RELATED_OPERATION_NONE;
408
BOOTSTRAPPER_RELATED_OPERATION relatedMsiOperation = BOOTSTRAPPER_RELATED_OPERATION_NONE;
@@ -457,42 +454,6 @@ extern "C" HRESULT MsiEngineDetectPackage(
454
}
455
else if (HRESULT_FROM_WIN32(ERROR_UNKNOWN_PRODUCT) == hr || HRESULT_FROM_WIN32(ERROR_UNKNOWN_PROPERTY) == hr) // package not present.
456
{
460
- // Check for newer, compatible packages based on a fixed provider key.
461
- hr = DependencyDetectProviderKeyPackageId(pPackage, &sczInstalledProviderKey, &sczInstalledProductCode);
462
- if (SUCCEEDED(hr))
463
- {
464
- hr = WiuGetProductInfoEx(sczInstalledProductCode, NULL, pPackage->fPerMachine ? MSIINSTALLCONTEXT_MACHINE : MSIINSTALLCONTEXT_USERUNMANAGED, INSTALLPROPERTY_VERSIONSTRING, &sczInstalledVersion);
465
- if (SUCCEEDED(hr))
466
- {
467
- hr = VerParseVersion(sczInstalledVersion, 0, FALSE, &pVersion);
468
- ExitOnFailure(hr, "Failed to parse dependency version: '%ls' for ProductCode: %ls", sczInstalledVersion, sczInstalledProductCode);
469
-
470
- if (pVersion->fInvalid)
471
- {
472
- LogId(REPORT_WARNING, MSG_DETECTED_MSI_PACKAGE_INVALID_VERSION, sczInstalledProductCode, sczInstalledVersion);
473
- }
474
-
475
- // compare versions
476
- hr = VerCompareParsedVersions(pPackage->Msi.pVersion, pVersion, &nCompareResult);
477
- ExitOnFailure(hr, "Failed to compare version '%ls' to dependency version: '%ls'", pPackage->Msi.pVersion->sczVersion, pVersion->sczVersion);
478
-
479
- if (nCompareResult < 0)
480
- {
481
- LogId(REPORT_STANDARD, MSG_DETECTED_COMPATIBLE_PACKAGE_FROM_PROVIDER, pPackage->sczId, sczInstalledProviderKey, sczInstalledProductCode, sczInstalledVersion, pPackage->Msi.sczProductCode);
482
-
483
- hr = UserExperienceOnDetectCompatibleMsiPackage(pUserExperience, pPackage->sczId, sczInstalledProductCode, pVersion);
484
- ExitOnRootFailure(hr, "BA aborted detect compatible MSI package.");
485
-
486
- hr = StrAllocString(&pPackage->Msi.sczInstalledProductCode, sczInstalledProductCode, 0);
487
- ExitOnFailure(hr, "Failed to copy the installed ProductCode to the package.");
488
-
489
- pPackage->Msi.pInstalledVersion = pVersion;
490
- pPackage->Msi.fCompatibleInstalled = TRUE;
491
- pVersion = NULL;
492
- }
493
- }
494
- }
495
-
457
pPackage->currentState = BOOTSTRAPPER_PACKAGE_STATE_ABSENT;
458
hr = S_OK;
459
}
@@ -701,8 +662,6 @@ extern "C" HRESULT MsiEngineDetectPackage(
662
}
663
664
LExit:
704
- ReleaseStr(sczInstalledProviderKey);
705
- ReleaseStr(sczInstalledProductCode);
665
ReleaseStr(sczInstalledLanguage);
666
ReleaseStr(sczInstalledVersion);
667
ReleaseVerutilVersion(pVersion);
@@ -1023,121 +982,6 @@ LExit:
982
return hr;
983
}
984
1026
-extern "C" HRESULT MsiEngineAddCompatiblePackage(
1027
- __in BURN_PACKAGES* pPackages,
1028
- __in const BURN_PACKAGE* pPackage,
1029
- __out_opt BURN_PACKAGE** ppCompatiblePackage
1030
- )
1031
-{
1032
- Assert(BURN_PACKAGE_TYPE_MSI == pPackage->type);
1033
-
1034
- HRESULT hr = S_OK;
1035
- BURN_PACKAGE* pCompatiblePackage = NULL;
1036
- LPWSTR sczInstalledVersion = NULL;
1037
-
1038
- // Allocate enough memory all at once so pointers to packages within
1039
- // aren't invalidated if we otherwise reallocated.
1040
- hr = PackageEnsureCompatiblePackagesArray(pPackages);
1041
- ExitOnFailure(hr, "Failed to allocate memory for compatible MSI package.");
1042
-
1043
- pCompatiblePackage = pPackages->rgCompatiblePackages + pPackages->cCompatiblePackages;
1044
- ++pPackages->cCompatiblePackages;
1045
-
1046
- pCompatiblePackage->type = BURN_PACKAGE_TYPE_MSI;
1047
-
1048
- // Read in the compatible ProductCode if not already available.
1049
- if (pPackage->Msi.sczInstalledProductCode)
1050
- {
1051
- hr = StrAllocString(&pCompatiblePackage->Msi.sczProductCode, pPackage->Msi.sczInstalledProductCode, 0);
1052
- ExitOnFailure(hr, "Failed to copy installed ProductCode to compatible package.");
1053
- }
1054
- else
1055
- {
1056
- hr = DependencyDetectProviderKeyPackageId(pPackage, NULL, &pCompatiblePackage->Msi.sczProductCode);
1057
- ExitOnFailure(hr, "Failed to detect compatible package from provider key.");
1058
- }
1059
-
1060
- // Read in the compatible ProductVersion if not already available.
1061
- if (pPackage->Msi.pInstalledVersion)
1062
- {
1063
- hr = VerCopyVersion(pPackage->Msi.pInstalledVersion, &pCompatiblePackage->Msi.pVersion);
1064
- ExitOnFailure(hr, "Failed to copy version for compatible package.");
1065
- }
1066
- else
1067
- {
1068
- hr = WiuGetProductInfoEx(pCompatiblePackage->Msi.sczProductCode, NULL, pPackage->fPerMachine ? MSIINSTALLCONTEXT_MACHINE : MSIINSTALLCONTEXT_USERUNMANAGED, INSTALLPROPERTY_VERSIONSTRING, &sczInstalledVersion);
1069
- ExitOnFailure(hr, "Failed to read version from compatible package.");
1070
-
1071
- hr = VerParseVersion(sczInstalledVersion, 0, FALSE, &pCompatiblePackage->Msi.pVersion);
1072
- ExitOnFailure(hr, "Failed to parse version: '%ls' for ProductCode: %ls", sczInstalledVersion, pCompatiblePackage->Msi.sczProductCode);
1073
-
1074
- if (pCompatiblePackage->Msi.pVersion->fInvalid)
1075
- {
1076
- LogId(REPORT_WARNING, MSG_DETECTED_MSI_PACKAGE_INVALID_VERSION, pCompatiblePackage->Msi.sczProductCode, sczInstalledVersion);
1077
- }
1078
- }
1079
-
1080
- // For now, copy enough information to support uninstalling the newer, compatible package.
1081
- hr = StrAllocString(&pCompatiblePackage->sczId, pCompatiblePackage->Msi.sczProductCode, 0);
1082
- ExitOnFailure(hr, "Failed to copy installed ProductCode as compatible package ID.");
1083
-
1084
- pCompatiblePackage->fPerMachine = pPackage->fPerMachine;
1085
- pCompatiblePackage->fUninstallable = pPackage->fUninstallable;
1086
- pCompatiblePackage->cacheType = pPackage->cacheType;
1087
-
1088
- // Removing compatible packages is best effort.
1089
- pCompatiblePackage->fVital = FALSE;
1090
-
1091
- // Format a suitable log path variable from the original package.
1092
- hr = StrAllocFormatted(&pCompatiblePackage->sczLogPathVariable, L"%ls_Compatible", pPackage->sczLogPathVariable);
1093
- ExitOnFailure(hr, "Failed to format log path variable for compatible package.");
1094
-
1095
- // Use the default cache ID generation from the binder.
1096
- hr = StrAllocFormatted(&pCompatiblePackage->sczCacheId, L"%lsv%ls", pCompatiblePackage->sczId, pCompatiblePackage->Msi.pVersion->sczVersion);
1097
- ExitOnFailure(hr, "Failed to format cache ID for compatible package.");
1098
-
1099
- pCompatiblePackage->currentState = BOOTSTRAPPER_PACKAGE_STATE_PRESENT;
1100
- pCompatiblePackage->cache = BURN_CACHE_STATE_PARTIAL; // Cannot know if it's complete or not.
1101
-
1102
- // Copy all the providers to ensure no dependents.
1103
- if (pPackage->cDependencyProviders)
1104
- {
1105
- pCompatiblePackage->rgDependencyProviders = (BURN_DEPENDENCY_PROVIDER*)MemAlloc(sizeof(BURN_DEPENDENCY_PROVIDER) * pPackage->cDependencyProviders, TRUE);
1106
- ExitOnNull(pCompatiblePackage->rgDependencyProviders, hr, E_OUTOFMEMORY, "Failed to allocate for compatible package providers.");
1107
-
1108
- for (DWORD i = 0; i < pPackage->cDependencyProviders; ++i)
1109
- {
1110
- BURN_DEPENDENCY_PROVIDER* pProvider = pPackage->rgDependencyProviders + i;
1111
- BURN_DEPENDENCY_PROVIDER* pCompatibleProvider = pCompatiblePackage->rgDependencyProviders + i;
1112
-
1113
- // Only need to copy the key for uninstall.
1114
- hr = StrAllocString(&pCompatibleProvider->sczKey, pProvider->sczKey, 0);
1115
- ExitOnFailure(hr, "Failed to copy the compatible provider key.");
1116
-
1117
- // Assume the package version is the same as the provider version.
1118
- hr = StrAllocString(&pCompatibleProvider->sczVersion, pCompatiblePackage->Msi.pVersion->sczVersion, 0);
1119
- ExitOnFailure(hr, "Failed to copy the compatible provider version.");
1120
-
1121
- // Assume provider keys are similarly authored for this package.
1122
- pCompatibleProvider->fImported = pProvider->fImported;
1123
- }
1124
-
1125
- pCompatiblePackage->cDependencyProviders = pPackage->cDependencyProviders;
1126
- }
1127
-
1128
- pCompatiblePackage->type = BURN_PACKAGE_TYPE_MSI;
1129
-
1130
- if (ppCompatiblePackage)
1131
- {
1132
- *ppCompatiblePackage = pCompatiblePackage;
1133
- }
1134
-
1135
-LExit:
1136
- ReleaseStr(sczInstalledVersion);
1137
-
1138
- return hr;
1139
-}
1140
-
985
extern "C" HRESULT MsiEngineBeginTransaction(
986
__in LPCWSTR wzName
987
)
src/engine/msiengine.h
-5
@@ -48,11 +48,6 @@ HRESULT MsiEnginePlanAddPackage(
48
__in_opt HANDLE hCacheEvent,
49
__in BOOL fPlanPackageCacheRollback
50
);
51
-HRESULT MsiEngineAddCompatiblePackage(
52
- __in BURN_PACKAGES* pPackages,
53
- __in const BURN_PACKAGE* pPackage,
54
- __out_opt BURN_PACKAGE** ppCompatiblePackage
55
- );
51
HRESULT MsiEngineBeginTransaction(
52
__in LPCWSTR wzName
53
);
src/engine/package.cpp
-36
@@ -369,15 +369,6 @@ extern "C" void PackagesUninitialize(
369
MemFree(pPackages->rgPackages);
370
}
371
372
- if (pPackages->rgCompatiblePackages)
373
- {
374
- for (DWORD i = 0; i < pPackages->cCompatiblePackages; ++i)
375
- {
376
- PackageUninitialize(pPackages->rgCompatiblePackages + i);
377
- }
378
- MemFree(pPackages->rgCompatiblePackages);
379
- }
380
-
372
if (pPackages->rgPatchTargetCodes)
373
{
374
for (DWORD i = 0; i < pPackages->cPatchTargetCodes; ++i)
@@ -414,17 +405,6 @@ extern "C" HRESULT PackageFindById(
405
}
406
}
407
417
- for (DWORD i = 0; i < pPackages->cCompatiblePackages; ++i)
418
- {
419
- pPackage = &pPackages->rgCompatiblePackages[i];
420
-
421
- if (CSTR_EQUAL == ::CompareStringW(LOCALE_INVARIANT, 0, pPackage->sczId, -1, wzId, -1))
422
- {
423
- *ppPackage = pPackage;
424
- ExitFunction1(hr = S_OK);
425
- }
426
- }
427
-
408
hr = E_NOTFOUND;
409
410
LExit:
@@ -510,22 +490,6 @@ LExit:
490
return hr;
491
}
492
513
-HRESULT PackageEnsureCompatiblePackagesArray(
514
- __in BURN_PACKAGES* pPackages
515
- )
516
-{
517
- HRESULT hr = S_OK;
518
-
519
- if (!pPackages->rgCompatiblePackages)
520
- {
521
- pPackages->rgCompatiblePackages = (BURN_PACKAGE*)MemAlloc(sizeof(BURN_PACKAGE) * pPackages->cPackages, TRUE);
522
- ExitOnNull(pPackages->rgCompatiblePackages, hr, E_OUTOFMEMORY, "Failed to allocate memory for compatible packages.");
523
- }
524
-
525
-LExit:
526
- return hr;
527
-}
528
-
493
494
// internal function declarations
495
src/engine/package.h
-9
@@ -248,7 +248,6 @@ typedef struct _BURN_PACKAGE
248
LPWSTR sczProductCode;
249
DWORD dwLanguage;
250
VERUTIL_VERSION* pVersion;
251
- LPWSTR sczInstalledProductCode;
251
VERUTIL_VERSION* pInstalledVersion;
252
LPWSTR sczUpgradeCode;
253
@@ -264,8 +263,6 @@ typedef struct _BURN_PACKAGE
263
_BURN_PACKAGE** rgpSlipstreamMspPackages;
264
LPWSTR* rgsczSlipstreamMspPackageIds;
265
DWORD cSlipstreamMspPackages;
267
-
268
- BOOL fCompatibleInstalled;
266
} Msi;
267
struct
268
{
@@ -294,9 +291,6 @@ typedef struct _BURN_PACKAGES
291
BURN_PACKAGE* rgPackages;
292
DWORD cPackages;
293
297
- BURN_PACKAGE* rgCompatiblePackages;
298
- DWORD cCompatiblePackages;
299
-
294
BURN_PATCH_TARGETCODE* rgPatchTargetCodes;
295
DWORD cPatchTargetCodes;
296
@@ -335,9 +329,6 @@ HRESULT PackageGetProperty(
329
__in_z LPCWSTR wzProperty,
330
__out_z_opt LPWSTR* psczValue
331
);
338
-HRESULT PackageEnsureCompatiblePackagesArray(
339
- __in BURN_PACKAGES* pPackages
340
- );
332
333
334
#if defined(__cplusplus)
src/engine/plan.cpp
+6
-73
@@ -30,7 +30,6 @@ static void ResetPlannedRollbackBoundaryState(
30
);
31
static HRESULT ProcessPackage(
32
__in BOOL fBundlePerMachine,
33
- __in_opt BURN_PACKAGE* pCompatiblePackageParent,
33
__in BURN_USER_EXPERIENCE* pUX,
34
__in BURN_PLAN* pPlan,
35
__in BURN_PACKAGE* pPackage,
@@ -311,10 +310,6 @@ extern "C" void PlanUninitializeExecuteAction(
310
case BURN_EXECUTE_ACTION_TYPE_PACKAGE_DEPENDENCY:
311
ReleaseStr(pExecuteAction->packageDependency.sczBundleProviderKey);
312
break;
314
-
315
- case BURN_EXECUTE_ACTION_TYPE_COMPATIBLE_PACKAGE:
316
- ReleaseStr(pExecuteAction->compatiblePackage.sczInstalledProductCode);
317
- break;
313
}
314
}
315
@@ -523,39 +518,8 @@ extern "C" HRESULT PlanPackages(
518
}
519
}
520
526
- hr = ProcessPackage(fBundlePerMachine, NULL, pUX, pPlan, pPackage, pLog, pVariables, display, relationType, wzLayoutDirectory, phSyncpointEvent, &pRollbackBoundary, &nonpermanentPackageIndices);
521
+ hr = ProcessPackage(fBundlePerMachine, pUX, pPlan, pPackage, pLog, pVariables, display, relationType, wzLayoutDirectory, phSyncpointEvent, &pRollbackBoundary, &nonpermanentPackageIndices);
522
ExitOnFailure(hr, "Failed to process package.");
528
-
529
- // Attempt to remove orphaned packages during uninstall. Currently only MSI packages are supported and should not require source.
530
- if (BOOTSTRAPPER_ACTION_UNINSTALL == pPlan->action && BURN_PACKAGE_TYPE_MSI == pPackage->type && pPackage->Msi.fCompatibleInstalled)
531
- {
532
- BURN_PACKAGE* pCompatiblePackage = NULL;
533
- BURN_EXECUTE_ACTION* pAction = NULL;
534
-
535
- // Add the compatible package to the list.
536
- hr = MsiEngineAddCompatiblePackage(pPackages, pPackage, &pCompatiblePackage);
537
- ExitOnFailure(hr, "Failed to add compatible package for package: %ls", pPackage->sczId);
538
-
539
- // Plan to load the compatible package into the elevated engine before its needed.
540
- hr = PlanAppendExecuteAction(pPlan, &pAction);
541
- ExitOnFailure(hr, "Failed to append execute action.");
542
-
543
- pAction->type = BURN_EXECUTE_ACTION_TYPE_COMPATIBLE_PACKAGE;
544
- pAction->compatiblePackage.pReferencePackage = pPackage;
545
- pAction->compatiblePackage.pInstalledVersion = pCompatiblePackage->Msi.pVersion;
546
-
547
- hr = StrAllocString(&pAction->compatiblePackage.sczInstalledProductCode, pCompatiblePackage->Msi.sczProductCode, 0);
548
- ExitOnFailure(hr, "Failed to copy installed ProductCode");
549
-
550
- // Process the compatible MSI package like any other.
551
- hr = ProcessPackage(fBundlePerMachine, pPackage, pUX, pPlan, pCompatiblePackage, pLog, pVariables, display, relationType, wzLayoutDirectory, phSyncpointEvent, &pRollbackBoundary, &nonpermanentPackageIndices);
552
- ExitOnFailure(hr, "Failed to process compatible package.");
553
-
554
- if (BOOTSTRAPPER_ACTION_STATE_UNINSTALL == pCompatiblePackage->execute)
555
- {
556
- LogId(REPORT_STANDARD, MSG_PLANNED_ORPHAN_PACKAGE_FROM_PROVIDER, pPackage->sczId, pCompatiblePackage->Msi.sczProductCode, pPackage->Msi.sczProductCode);
557
- }
558
- }
523
}
524
525
// Insert the "keep registration" and "remove registration" actions in the plan when installing the first time and anytime we are uninstalling respectively.
@@ -601,15 +565,6 @@ extern "C" HRESULT PlanPackages(
565
ExitOnFailure(hr, "Failed to plan clean package.");
566
}
567
604
- // Plan best-effort clean up of compatible packages.
605
- for (DWORD i = 0; i < pPackages->cCompatiblePackages; ++i)
606
- {
607
- DWORD iPackage = (BOOTSTRAPPER_ACTION_UNINSTALL == pPlan->action) ? pPackages->cCompatiblePackages - 1 - i : i;
608
- BURN_PACKAGE* pCompatiblePackage = pPackages->rgCompatiblePackages + iPackage;
609
-
610
- PlanCleanPackage(pPlan, pCompatiblePackage);
611
- }
612
-
568
LExit:
569
return hr;
570
}
@@ -809,7 +764,7 @@ extern "C" HRESULT PlanPassThroughBundle(
764
BURN_ROLLBACK_BOUNDARY* pRollbackBoundary = NULL;
765
766
// Plan passthrough package.
812
- hr = ProcessPackage(fBundlePerMachine, NULL, pUX, pPlan, pPackage, pLog, pVariables, display, relationType, NULL, phSyncpointEvent, &pRollbackBoundary, NULL);
767
+ hr = ProcessPackage(fBundlePerMachine, pUX, pPlan, pPackage, pLog, pVariables, display, relationType, NULL, phSyncpointEvent, &pRollbackBoundary, NULL);
768
ExitOnFailure(hr, "Failed to process passthrough package.");
769
770
// If we still have an open rollback boundary, complete it.
@@ -843,7 +798,7 @@ extern "C" HRESULT PlanUpdateBundle(
798
BURN_ROLLBACK_BOUNDARY* pRollbackBoundary = NULL;
799
800
// Plan update package.
846
- hr = ProcessPackage(fBundlePerMachine, NULL, pUX, pPlan, pPackage, pLog, pVariables, display, relationType, NULL, phSyncpointEvent, &pRollbackBoundary, NULL);
801
+ hr = ProcessPackage(fBundlePerMachine, pUX, pPlan, pPackage, pLog, pVariables, display, relationType, NULL, phSyncpointEvent, &pRollbackBoundary, NULL);
802
ExitOnFailure(hr, "Failed to process update package.");
803
804
// If we still have an open rollback boundary, complete it.
@@ -863,7 +818,6 @@ LExit:
818
819
static HRESULT ProcessPackage(
820
__in BOOL fBundlePerMachine,
866
- __in_opt BURN_PACKAGE* pCompatiblePackageParent,
821
__in BURN_USER_EXPERIENCE* pUX,
822
__in BURN_PLAN* pPlan,
823
__in BURN_PACKAGE* pPackage,
@@ -888,18 +842,8 @@ static HRESULT ProcessPackage(
842
pPackage->requested = pPackage->defaultRequested;
843
fPlanPackageBegan = TRUE;
844
891
- if (pCompatiblePackageParent)
892
- {
893
- AssertSz(BURN_PACKAGE_TYPE_MSI == pPackage->type, "Currently only MSI packages have compatible packages.");
894
-
895
- hr = UserExperienceOnPlanCompatibleMsiPackageBegin(pUX, pCompatiblePackageParent->sczId, pPackage->sczId, pPackage->Msi.pVersion, &pPackage->requested);
896
- ExitOnRootFailure(hr, "BA aborted plan compatible MSI package begin.");
897
- }
898
- else
899
- {
900
- hr = UserExperienceOnPlanPackageBegin(pUX, pPackage->sczId, &pPackage->requested);
901
- ExitOnRootFailure(hr, "BA aborted plan package begin.");
902
- }
845
+ hr = UserExperienceOnPlanPackageBegin(pUX, pPackage->sczId, &pPackage->requested);
846
+ ExitOnRootFailure(hr, "BA aborted plan package begin.");
847
848
pEffectiveRollbackBoundary = (BOOTSTRAPPER_ACTION_UNINSTALL == pPlan->action) ? pPackage->pRollbackBoundaryBackward : pPackage->pRollbackBoundaryForward;
849
hr = ProcessPackageRollbackBoundary(pPlan, pEffectiveRollbackBoundary, ppRollbackBoundary);
@@ -964,14 +908,7 @@ static HRESULT ProcessPackage(
908
LExit:
909
if (fPlanPackageBegan)
910
{
967
- if (pCompatiblePackageParent)
968
- {
969
- UserExperienceOnPlanCompatibleMsiPackageComplete(pUX, pCompatiblePackageParent->sczId, pPackage->sczId, hr, pPackage->currentState, pPackage->requested, pPackage->execute, pPackage->rollback);
970
- }
971
- else
972
- {
973
- UserExperienceOnPlanPackageComplete(pUX, pPackage->sczId, hr, pPackage->currentState, pPackage->requested, pPackage->execute, pPackage->rollback);
974
- }
911
+ UserExperienceOnPlanPackageComplete(pUX, pPackage->sczId, hr, pPackage->currentState, pPackage->requested, pPackage->execute, pPackage->rollback);
912
}
913
914
return hr;
@@ -3175,10 +3112,6 @@ static void ExecuteActionLog(
3112
LogStringLine(PlanDumpLevel, "%ls action[%u]: UNCACHE_PACKAGE id: %ls", wzBase, iAction, pAction->uncachePackage.pPackage->sczId);
3113
break;
3114
3178
- case BURN_EXECUTE_ACTION_TYPE_COMPATIBLE_PACKAGE:
3179
- LogStringLine(PlanDumpLevel, "%ls action[%u]: COMPATIBLE_PACKAGE reference id: %ls, installed ProductCode: %ls", wzBase, iAction, pAction->compatiblePackage.pReferencePackage->sczId, pAction->compatiblePackage.sczInstalledProductCode);
3180
- break;
3181
-
3115
case BURN_EXECUTE_ACTION_TYPE_BEGIN_MSI_TRANSACTION:
3116
LogStringLine(PlanDumpLevel, "%ls action[%u]: BEGIN_MSI_TRANSACTION id: %ls", wzBase, iAction, pAction->msiTransaction.pRollbackBoundary->sczId);
3117
break;
src/engine/plan.h
-7
@@ -65,7 +65,6 @@ enum BURN_EXECUTE_ACTION_TYPE
65
BURN_EXECUTE_ACTION_TYPE_PACKAGE_DEPENDENCY,
66
BURN_EXECUTE_ACTION_TYPE_ROLLBACK_BOUNDARY,
67
BURN_EXECUTE_ACTION_TYPE_REGISTRATION,
68
- BURN_EXECUTE_ACTION_TYPE_COMPATIBLE_PACKAGE,
68
BURN_EXECUTE_ACTION_TYPE_BEGIN_MSI_TRANSACTION,
69
BURN_EXECUTE_ACTION_TYPE_COMMIT_MSI_TRANSACTION,
70
};
@@ -301,12 +300,6 @@ typedef struct _BURN_EXECUTE_ACTION
300
BURN_DEPENDENCY_ACTION action;
301
} packageDependency;
302
struct
304
- {
305
- BURN_PACKAGE* pReferencePackage;
306
- LPWSTR sczInstalledProductCode;
307
- VERUTIL_VERSION* pInstalledVersion;
308
- } compatiblePackage;
309
- struct
303
{
304
BURN_ROLLBACK_BOUNDARY* pRollbackBoundary;
305
} msiTransaction;
src/engine/userexperience.cpp
+1
-98
@@ -104,7 +104,7 @@ extern "C" HRESULT UserExperienceLoad(
104
args.pCommand = pCommand;
105
args.pfnBootstrapperEngineProc = EngineForApplicationProc;
106
args.pvBootstrapperEngineProcContext = pEngineContext;
107
- args.qwEngineAPIVersion = MAKEQWORDVERSION(2020, 11, 17, 0);
107
+ args.qwEngineAPIVersion = MAKEQWORDVERSION(2021, 1, 30, 0);
108
109
results.cbSize = sizeof(BOOTSTRAPPER_CREATE_RESULTS);
110
@@ -747,36 +747,6 @@ LExit:
747
return hr;
748
}
749
750
-EXTERN_C BAAPI UserExperienceOnDetectCompatibleMsiPackage(
751
- __in BURN_USER_EXPERIENCE* pUserExperience,
752
- __in_z LPCWSTR wzPackageId,
753
- __in_z LPCWSTR wzCompatiblePackageId,
754
- __in VERUTIL_VERSION* pCompatiblePackageVersion
755
- )
756
-{
757
- HRESULT hr = S_OK;
758
- BA_ONDETECTCOMPATIBLEMSIPACKAGE_ARGS args = { };
759
- BA_ONDETECTCOMPATIBLEMSIPACKAGE_RESULTS results = { };
760
-
761
- args.cbSize = sizeof(args);
762
- args.wzPackageId = wzPackageId;
763
- args.wzCompatiblePackageId = wzCompatiblePackageId;
764
- args.wzCompatiblePackageVersion = pCompatiblePackageVersion->sczVersion;
765
-
766
- results.cbSize = sizeof(results);
767
-
768
- hr = SendBAMessage(pUserExperience, BOOTSTRAPPER_APPLICATION_MESSAGE_ONDETECTCOMPATIBLEMSIPACKAGE, &args, &results);
769
- ExitOnFailure(hr, "BA OnDetectCompatibleMsiPackage failed.");
770
-
771
- if (results.fCancel)
772
- {
773
- hr = HRESULT_FROM_WIN32(ERROR_INSTALL_USEREXIT);
774
- }
775
-
776
-LExit:
777
- return hr;
778
-}
779
-
750
EXTERN_C BAAPI UserExperienceOnDetectComplete(
751
__in BURN_USER_EXPERIENCE* pUserExperience,
752
__in HRESULT hrStatus
@@ -1555,73 +1525,6 @@ LExit:
1525
return hr;
1526
}
1527
1558
-EXTERN_C BAAPI UserExperienceOnPlanCompatibleMsiPackageBegin(
1559
- __in BURN_USER_EXPERIENCE* pUserExperience,
1560
- __in_z LPCWSTR wzPackageId,
1561
- __in_z LPCWSTR wzCompatiblePackageId,
1562
- __in VERUTIL_VERSION* pCompatiblePackageVersion,
1563
- __inout BOOTSTRAPPER_REQUEST_STATE* pRequestedState
1564
- )
1565
-{
1566
- HRESULT hr = S_OK;
1567
- BA_ONPLANCOMPATIBLEMSIPACKAGEBEGIN_ARGS args = { };
1568
- BA_ONPLANCOMPATIBLEMSIPACKAGEBEGIN_RESULTS results = { };
1569
-
1570
- args.cbSize = sizeof(args);
1571
- args.wzPackageId = wzPackageId;
1572
- args.wzCompatiblePackageId = wzCompatiblePackageId;
1573
- args.wzCompatiblePackageVersion = pCompatiblePackageVersion->sczVersion;
1574
- args.recommendedState = *pRequestedState;
1575
-
1576
- results.cbSize = sizeof(results);
1577
- results.requestedState = *pRequestedState;
1578
-
1579
- hr = SendBAMessage(pUserExperience, BOOTSTRAPPER_APPLICATION_MESSAGE_ONPLANCOMPATIBLEMSIPACKAGEBEGIN, &args, &results);
1580
- ExitOnFailure(hr, "BA OnPlanCompatibleMsiPackageBegin failed.");
1581
-
1582
- if (results.fCancel)
1583
- {
1584
- hr = HRESULT_FROM_WIN32(ERROR_INSTALL_USEREXIT);
1585
- }
1586
- *pRequestedState = results.requestedState;
1587
-
1588
-LExit:
1589
- return hr;
1590
-}
1591
-
1592
-EXTERN_C BAAPI UserExperienceOnPlanCompatibleMsiPackageComplete(
1593
- __in BURN_USER_EXPERIENCE* pUserExperience,
1594
- __in_z LPCWSTR wzPackageId,
1595
- __in_z LPCWSTR wzCompatiblePackageId,
1596
- __in HRESULT hrStatus,
1597
- __in BOOTSTRAPPER_PACKAGE_STATE state,
1598
- __in BOOTSTRAPPER_REQUEST_STATE requested,
1599
- __in BOOTSTRAPPER_ACTION_STATE execute,
1600
- __in BOOTSTRAPPER_ACTION_STATE rollback
1601
- )
1602
-{
1603
- HRESULT hr = S_OK;
1604
- BA_ONPLANCOMPATIBLEMSIPACKAGECOMPLETE_ARGS args = { };
1605
- BA_ONPLANCOMPATIBLEMSIPACKAGECOMPLETE_RESULTS results = { };
1606
-
1607
- args.cbSize = sizeof(args);
1608
- args.wzPackageId = wzPackageId;
1609
- args.wzCompatiblePackageId = wzCompatiblePackageId;
1610
- args.hrStatus = hrStatus;
1611
- args.state = state;
1612
- args.requested = requested;
1613
- args.execute = execute;
1614
- args.rollback = rollback;
1615
-
1616
- results.cbSize = sizeof(results);
1617
-
1618
- hr = SendBAMessage(pUserExperience, BOOTSTRAPPER_APPLICATION_MESSAGE_ONPLANCOMPATIBLEMSIPACKAGECOMPLETE, &args, &results);
1619
- ExitOnFailure(hr, "BA OnPlanCompatibleMsiPackageComplete failed.");
1620
-
1621
-LExit:
1622
- return hr;
1623
-}
1624
-
1528
EXTERN_C BAAPI UserExperienceOnPlanMsiFeature(
1529
__in BURN_USER_EXPERIENCE* pUserExperience,
1530
__in_z LPCWSTR wzPackageId,
src/engine/userexperience.h
-23
@@ -185,12 +185,6 @@ BAAPI UserExperienceOnDetectBegin(
185
__in BOOL fInstalled,
186
__in DWORD cPackages
187
);
188
-BAAPI UserExperienceOnDetectCompatibleMsiPackage(
189
- __in BURN_USER_EXPERIENCE* pUserExperience,
190
- __in_z LPCWSTR wzPackageId,
191
- __in_z LPCWSTR wzCompatiblePackageId,
192
- __in VERUTIL_VERSION* pCompatiblePackageVersion
193
- );
188
BAAPI UserExperienceOnDetectComplete(
189
__in BURN_USER_EXPERIENCE* pUserExperience,
190
__in HRESULT hrStatus
@@ -354,23 +348,6 @@ BAAPI UserExperienceOnPlanBegin(
348
__in BURN_USER_EXPERIENCE* pUserExperience,
349
__in DWORD cPackages
350
);
357
-BAAPI UserExperienceOnPlanCompatibleMsiPackageBegin(
358
- __in BURN_USER_EXPERIENCE* pUserExperience,
359
- __in_z LPCWSTR wzPackageId,
360
- __in_z LPCWSTR wzCompatiblePackageId,
361
- __in VERUTIL_VERSION* pCompatiblePackageVersion,
362
- __inout BOOTSTRAPPER_REQUEST_STATE* pRequestedState
363
- );
364
-BAAPI UserExperienceOnPlanCompatibleMsiPackageComplete(
365
- __in BURN_USER_EXPERIENCE* pUserExperience,
366
- __in_z LPCWSTR wzPackageId,
367
- __in_z LPCWSTR wzCompatiblePackageId,
368
- __in HRESULT hrStatus,
369
- __in BOOTSTRAPPER_PACKAGE_STATE state,
370
- __in BOOTSTRAPPER_REQUEST_STATE requested,
371
- __in BOOTSTRAPPER_ACTION_STATE execute,
372
- __in BOOTSTRAPPER_ACTION_STATE rollback
373
- );
351
BAAPI UserExperienceOnPlanComplete(
352
__in BURN_USER_EXPERIENCE* pUserExperience,
353
__in HRESULT hrStatus