aboutsummaryrefslogtreecommitdiff
path: root/src/burn/engine/msiengine.cpp
diff options
context:
space:
mode:
authorSean Hall <r.sean.hall@gmail.com>2022-01-16 16:35:36 -0600
committerSean Hall <r.sean.hall@gmail.com>2022-01-16 22:59:50 -0600
commit5ed5a24fae06b35351235d708b6ab410d8310d33 (patch)
tree1b3e15d3d1fdb5b81c2bb8095f64c8f40a44c464 /src/burn/engine/msiengine.cpp
parenteee408f4f52823038ca6da83693efd135c8511c8 (diff)
downloadwix-5ed5a24fae06b35351235d708b6ab410d8310d33.tar.gz
wix-5ed5a24fae06b35351235d708b6ab410d8310d33.tar.bz2
wix-5ed5a24fae06b35351235d708b6ab410d8310d33.zip
Add BOOTSTRAPPER_REQUEST_STATE_FORCE_PRESENT.
Make BOOTSTRAPPER_REQUEST_STATE_FORCE_ABSENT uninstall even if detected absent. Remove fPseudoBundle.
Diffstat (limited to 'src/burn/engine/msiengine.cpp')
-rw-r--r--src/burn/engine/msiengine.cpp36
1 files changed, 24 insertions, 12 deletions
diff --git a/src/burn/engine/msiengine.cpp b/src/burn/engine/msiengine.cpp
index 9dd2312e..e3a80c9f 100644
--- a/src/burn/engine/msiengine.cpp
+++ b/src/burn/engine/msiengine.cpp
@@ -920,6 +920,10 @@ extern "C" HRESULT MsiEnginePlanCalculatePackage(
920 { 920 {
921 execute = BOOTSTRAPPER_ACTION_STATE_UNINSTALL; 921 execute = BOOTSTRAPPER_ACTION_STATE_UNINSTALL;
922 } 922 }
923 else if (BOOTSTRAPPER_REQUEST_STATE_FORCE_PRESENT == pPackage->requested)
924 {
925 execute = BOOTSTRAPPER_ACTION_STATE_INSTALL;
926 }
923 else 927 else
924 { 928 {
925 execute = BOOTSTRAPPER_ACTION_STATE_NONE; 929 execute = BOOTSTRAPPER_ACTION_STATE_NONE;
@@ -931,10 +935,15 @@ extern "C" HRESULT MsiEnginePlanCalculatePackage(
931 switch (pPackage->requested) 935 switch (pPackage->requested)
932 { 936 {
933 case BOOTSTRAPPER_REQUEST_STATE_PRESENT: __fallthrough; 937 case BOOTSTRAPPER_REQUEST_STATE_PRESENT: __fallthrough;
938 case BOOTSTRAPPER_REQUEST_STATE_FORCE_PRESENT: __fallthrough;
934 case BOOTSTRAPPER_REQUEST_STATE_REPAIR: 939 case BOOTSTRAPPER_REQUEST_STATE_REPAIR:
935 execute = BOOTSTRAPPER_ACTION_STATE_INSTALL; 940 execute = BOOTSTRAPPER_ACTION_STATE_INSTALL;
936 break; 941 break;
937 942
943 case BOOTSTRAPPER_REQUEST_STATE_FORCE_ABSENT:
944 execute = BOOTSTRAPPER_ACTION_STATE_UNINSTALL;
945 break;
946
938 default: 947 default:
939 execute = BOOTSTRAPPER_ACTION_STATE_NONE; 948 execute = BOOTSTRAPPER_ACTION_STATE_NONE;
940 break; 949 break;
@@ -958,6 +967,7 @@ extern "C" HRESULT MsiEnginePlanCalculatePackage(
958 case BOOTSTRAPPER_REQUEST_STATE_PRESENT: 967 case BOOTSTRAPPER_REQUEST_STATE_PRESENT:
959 rollback = fRollbackFeatureActionDelta ? BOOTSTRAPPER_ACTION_STATE_MODIFY : BOOTSTRAPPER_ACTION_STATE_NONE; 968 rollback = fRollbackFeatureActionDelta ? BOOTSTRAPPER_ACTION_STATE_MODIFY : BOOTSTRAPPER_ACTION_STATE_NONE;
960 break; 969 break;
970 case BOOTSTRAPPER_REQUEST_STATE_FORCE_PRESENT: __fallthrough;
961 case BOOTSTRAPPER_REQUEST_STATE_REPAIR: 971 case BOOTSTRAPPER_REQUEST_STATE_REPAIR:
962 rollback = BOOTSTRAPPER_ACTION_STATE_NONE; 972 rollback = BOOTSTRAPPER_ACTION_STATE_NONE;
963 break; 973 break;
@@ -972,11 +982,12 @@ extern "C" HRESULT MsiEnginePlanCalculatePackage(
972 break; 982 break;
973 983
974 case BOOTSTRAPPER_PACKAGE_STATE_OBSOLETE: __fallthrough; 984 case BOOTSTRAPPER_PACKAGE_STATE_OBSOLETE: __fallthrough;
975 case BOOTSTRAPPER_PACKAGE_STATE_ABSENT: __fallthrough; 985 case BOOTSTRAPPER_PACKAGE_STATE_ABSENT:
976 // If the package is not permanent and we requested to put the package on the machine then 986 // If the package is not permanent and we requested to put the package on the machine then
977 // remove the package during rollback. 987 // remove the package during rollback.
978 if (!pPackage->fPermanent && 988 if (!pPackage->fPermanent &&
979 (BOOTSTRAPPER_REQUEST_STATE_PRESENT == pPackage->requested || 989 (BOOTSTRAPPER_REQUEST_STATE_PRESENT == pPackage->requested ||
990 BOOTSTRAPPER_REQUEST_STATE_FORCE_PRESENT == pPackage->requested ||
980 BOOTSTRAPPER_REQUEST_STATE_REPAIR == pPackage->requested)) 991 BOOTSTRAPPER_REQUEST_STATE_REPAIR == pPackage->requested))
981 { 992 {
982 rollback = BOOTSTRAPPER_ACTION_STATE_UNINSTALL; 993 rollback = BOOTSTRAPPER_ACTION_STATE_UNINSTALL;
@@ -1040,6 +1051,18 @@ extern "C" HRESULT MsiEnginePlanAddPackage(
1040 hr = DependencyPlanPackage(NULL, pPackage, pPlan); 1051 hr = DependencyPlanPackage(NULL, pPackage, pPlan);
1041 ExitOnFailure(hr, "Failed to plan package dependency actions."); 1052 ExitOnFailure(hr, "Failed to plan package dependency actions.");
1042 1053
1054 if (pPackage->compatiblePackage.fRemove)
1055 {
1056 hr = PlanAppendExecuteAction(pPlan, &pAction);
1057 ExitOnFailure(hr, "Failed to append execute action.");
1058
1059 pAction->type = BURN_EXECUTE_ACTION_TYPE_UNINSTALL_MSI_COMPATIBLE_PACKAGE;
1060 pAction->uninstallMsiCompatiblePackage.pParentPackage = pPackage;
1061 pAction->uninstallMsiCompatiblePackage.dwLoggingAttributes = pLog->dwAttributes;
1062
1063 LoggingSetCompatiblePackageVariable(pPackage, pLog, pVariables, &pAction->uninstallMsiCompatiblePackage.sczLogPath); // ignore errors.
1064 }
1065
1043 // add rollback action 1066 // add rollback action
1044 if (BOOTSTRAPPER_ACTION_STATE_NONE != pPackage->rollback) 1067 if (BOOTSTRAPPER_ACTION_STATE_NONE != pPackage->rollback)
1045 { 1068 {
@@ -1085,17 +1108,6 @@ extern "C" HRESULT MsiEnginePlanAddPackage(
1085 LoggingSetPackageVariable(pPackage, NULL, FALSE, pLog, pVariables, &pAction->msiPackage.sczLogPath); // ignore errors. 1108 LoggingSetPackageVariable(pPackage, NULL, FALSE, pLog, pVariables, &pAction->msiPackage.sczLogPath); // ignore errors.
1086 pAction->msiPackage.dwLoggingAttributes = pLog->dwAttributes; 1109 pAction->msiPackage.dwLoggingAttributes = pLog->dwAttributes;
1087 } 1110 }
1088 else if (pPackage->compatiblePackage.fRemove)
1089 {
1090 hr = PlanAppendExecuteAction(pPlan, &pAction);
1091 ExitOnFailure(hr, "Failed to append execute action.");
1092
1093 pAction->type = BURN_EXECUTE_ACTION_TYPE_UNINSTALL_MSI_COMPATIBLE_PACKAGE;
1094 pAction->uninstallMsiCompatiblePackage.pParentPackage = pPackage;
1095 pAction->uninstallMsiCompatiblePackage.dwLoggingAttributes = pLog->dwAttributes;
1096
1097 LoggingSetCompatiblePackageVariable(pPackage, pLog, pVariables, &pAction->uninstallMsiCompatiblePackage.sczLogPath); // ignore errors.
1098 }
1099 1111
1100LExit: 1112LExit:
1101 ReleaseMem(rgFeatureActions); 1113 ReleaseMem(rgFeatureActions);