diff options
author | Sean Hall <r.sean.hall@gmail.com> | 2022-01-16 16:35:36 -0600 |
---|---|---|
committer | Sean Hall <r.sean.hall@gmail.com> | 2022-01-16 22:59:50 -0600 |
commit | 5ed5a24fae06b35351235d708b6ab410d8310d33 (patch) | |
tree | 1b3e15d3d1fdb5b81c2bb8095f64c8f40a44c464 /src/burn/engine/msiengine.cpp | |
parent | eee408f4f52823038ca6da83693efd135c8511c8 (diff) | |
download | wix-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.cpp | 36 |
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 | ||
1100 | LExit: | 1112 | LExit: |
1101 | ReleaseMem(rgFeatureActions); | 1113 | ReleaseMem(rgFeatureActions); |