aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSean Hall <r.sean.hall@gmail.com>2021-02-18 10:45:20 -0600
committerSean Hall <r.sean.hall@gmail.com>2021-02-22 20:25:06 -0600
commit837f2e309c8ef0476668c342f612dfe1bb26cb87 (patch)
treef8a5fbef5e17e88b27a2a4cb6dc7a52f7cba4a5e
parentb29af5d005c2cc802aa60a123d435042038ba8ef (diff)
downloadwix-837f2e309c8ef0476668c342f612dfe1bb26cb87.tar.gz
wix-837f2e309c8ef0476668c342f612dfe1bb26cb87.tar.bz2
wix-837f2e309c8ef0476668c342f612dfe1bb26cb87.zip
Only the requested state and Cache=always should affect requestedCache.
-rw-r--r--src/engine/exeengine.cpp24
-rw-r--r--src/engine/exeengine.h3
-rw-r--r--src/engine/msiengine.cpp14
-rw-r--r--src/engine/msiengine.h3
-rw-r--r--src/engine/mspengine.cpp14
-rw-r--r--src/engine/mspengine.h3
-rw-r--r--src/engine/msuengine.cpp13
-rw-r--r--src/engine/msuengine.h3
-rw-r--r--src/engine/package.cpp1
-rw-r--r--src/engine/package.h1
-rw-r--r--src/engine/plan.cpp39
11 files changed, 28 insertions, 90 deletions
diff --git a/src/engine/exeengine.cpp b/src/engine/exeengine.cpp
index f734edca..cee755e3 100644
--- a/src/engine/exeengine.cpp
+++ b/src/engine/exeengine.cpp
@@ -157,25 +157,12 @@ LExit:
157// PlanCalculate - calculates the execute and rollback state for the requested package state. 157// PlanCalculate - calculates the execute and rollback state for the requested package state.
158// 158//
159extern "C" HRESULT ExeEnginePlanCalculatePackage( 159extern "C" HRESULT ExeEnginePlanCalculatePackage(
160 __in BURN_PACKAGE* pPackage, 160 __in BURN_PACKAGE* pPackage
161 __out_opt BOOL* pfBARequestedCache
162 ) 161 )
163{ 162{
164 HRESULT hr = S_OK; 163 HRESULT hr = S_OK;
165 //BOOL fCondition = FALSE;
166 //BOOTSTRAPPER_PACKAGE_STATE expected = BOOTSTRAPPER_PACKAGE_STATE_UNKNOWN;
167 BOOTSTRAPPER_ACTION_STATE execute = BOOTSTRAPPER_ACTION_STATE_NONE; 164 BOOTSTRAPPER_ACTION_STATE execute = BOOTSTRAPPER_ACTION_STATE_NONE;
168 BOOTSTRAPPER_ACTION_STATE rollback = BOOTSTRAPPER_ACTION_STATE_NONE; 165 BOOTSTRAPPER_ACTION_STATE rollback = BOOTSTRAPPER_ACTION_STATE_NONE;
169 BOOL fBARequestedCache = FALSE;
170
171 //// evaluate rollback install condition
172 //if (pPackage->sczRollbackInstallCondition)
173 //{
174 // hr = ConditionEvaluate(pVariables, pPackage->sczRollbackInstallCondition, &fCondition);
175 // ExitOnFailure(hr, "Failed to evaluate rollback install condition.");
176
177 // expected = fCondition ? BOOTSTRAPPER_PACKAGE_STATE_PRESENT : BOOTSTRAPPER_PACKAGE_STATE_ABSENT;
178 //}
179 166
180 // execute action 167 // execute action
181 switch (pPackage->currentState) 168 switch (pPackage->currentState)
@@ -209,10 +196,6 @@ extern "C" HRESULT ExeEnginePlanCalculatePackage(
209 case BOOTSTRAPPER_REQUEST_STATE_REPAIR: 196 case BOOTSTRAPPER_REQUEST_STATE_REPAIR:
210 execute = BOOTSTRAPPER_ACTION_STATE_INSTALL; 197 execute = BOOTSTRAPPER_ACTION_STATE_INSTALL;
211 break; 198 break;
212 case BOOTSTRAPPER_REQUEST_STATE_CACHE:
213 execute = BOOTSTRAPPER_ACTION_STATE_NONE;
214 fBARequestedCache = TRUE;
215 break;
216 default: 199 default:
217 execute = BOOTSTRAPPER_ACTION_STATE_NONE; 200 execute = BOOTSTRAPPER_ACTION_STATE_NONE;
218 break; 201 break;
@@ -273,11 +256,6 @@ extern "C" HRESULT ExeEnginePlanCalculatePackage(
273 pPackage->execute = execute; 256 pPackage->execute = execute;
274 pPackage->rollback = rollback; 257 pPackage->rollback = rollback;
275 258
276 if (pfBARequestedCache)
277 {
278 *pfBARequestedCache = fBARequestedCache;
279 }
280
281LExit: 259LExit:
282 return hr; 260 return hr;
283} 261}
diff --git a/src/engine/exeengine.h b/src/engine/exeengine.h
index 1eac4232..88a884eb 100644
--- a/src/engine/exeengine.h
+++ b/src/engine/exeengine.h
@@ -21,8 +21,7 @@ HRESULT ExeEngineDetectPackage(
21 __in BURN_VARIABLES* pVariables 21 __in BURN_VARIABLES* pVariables
22 ); 22 );
23HRESULT ExeEnginePlanCalculatePackage( 23HRESULT ExeEnginePlanCalculatePackage(
24 __in BURN_PACKAGE* pPackage, 24 __in BURN_PACKAGE* pPackage
25 __out_opt BOOL* pfBARequestedCache
26 ); 25 );
27HRESULT ExeEnginePlanAddPackage( 26HRESULT ExeEnginePlanAddPackage(
28 __in_opt DWORD *pdwInsertSequence, 27 __in_opt DWORD *pdwInsertSequence,
diff --git a/src/engine/msiengine.cpp b/src/engine/msiengine.cpp
index 252a17b7..801bf9a8 100644
--- a/src/engine/msiengine.cpp
+++ b/src/engine/msiengine.cpp
@@ -714,8 +714,7 @@ LExit:
714// 714//
715extern "C" HRESULT MsiEnginePlanCalculatePackage( 715extern "C" HRESULT MsiEnginePlanCalculatePackage(
716 __in BURN_PACKAGE* pPackage, 716 __in BURN_PACKAGE* pPackage,
717 __in BOOL fInsideMsiTransaction, 717 __in BOOL fInsideMsiTransaction
718 __out_opt BOOL* pfBARequestedCache
719 ) 718 )
720{ 719{
721 Trace(REPORT_STANDARD, "Planning MSI package 0x%p", pPackage); 720 Trace(REPORT_STANDARD, "Planning MSI package 0x%p", pPackage);
@@ -728,7 +727,6 @@ extern "C" HRESULT MsiEnginePlanCalculatePackage(
728 BOOTSTRAPPER_ACTION_STATE rollback = BOOTSTRAPPER_ACTION_STATE_NONE; 727 BOOTSTRAPPER_ACTION_STATE rollback = BOOTSTRAPPER_ACTION_STATE_NONE;
729 BOOL fFeatureActionDelta = FALSE; 728 BOOL fFeatureActionDelta = FALSE;
730 BOOL fRollbackFeatureActionDelta = FALSE; 729 BOOL fRollbackFeatureActionDelta = FALSE;
731 BOOL fBARequestedCache = FALSE;
732 730
733 if (pPackage->Msi.cFeatures) 731 if (pPackage->Msi.cFeatures)
734 { 732 {
@@ -813,11 +811,6 @@ extern "C" HRESULT MsiEnginePlanCalculatePackage(
813 execute = BOOTSTRAPPER_ACTION_STATE_INSTALL; 811 execute = BOOTSTRAPPER_ACTION_STATE_INSTALL;
814 break; 812 break;
815 813
816 case BOOTSTRAPPER_REQUEST_STATE_CACHE:
817 execute = BOOTSTRAPPER_ACTION_STATE_NONE;
818 fBARequestedCache = TRUE;
819 break;
820
821 default: 814 default:
822 execute = BOOTSTRAPPER_ACTION_STATE_NONE; 815 execute = BOOTSTRAPPER_ACTION_STATE_NONE;
823 break; 816 break;
@@ -880,11 +873,6 @@ extern "C" HRESULT MsiEnginePlanCalculatePackage(
880 pPackage->execute = execute; 873 pPackage->execute = execute;
881 pPackage->rollback = rollback; 874 pPackage->rollback = rollback;
882 875
883 if (pfBARequestedCache)
884 {
885 *pfBARequestedCache = fBARequestedCache;
886 }
887
888LExit: 876LExit:
889 return hr; 877 return hr;
890} 878}
diff --git a/src/engine/msiengine.h b/src/engine/msiengine.h
index b06866cd..fe742a16 100644
--- a/src/engine/msiengine.h
+++ b/src/engine/msiengine.h
@@ -38,8 +38,7 @@ HRESULT MsiEnginePlanInitializePackage(
38 ); 38 );
39HRESULT MsiEnginePlanCalculatePackage( 39HRESULT MsiEnginePlanCalculatePackage(
40 __in BURN_PACKAGE* pPackage, 40 __in BURN_PACKAGE* pPackage,
41 __in BOOL fInsideMsiTransaction, 41 __in BOOL fInsideMsiTransaction
42 __out_opt BOOL* pfBARequestedCache
43 ); 42 );
44HRESULT MsiEnginePlanAddPackage( 43HRESULT MsiEnginePlanAddPackage(
45 __in BOOTSTRAPPER_DISPLAY display, 44 __in BOOTSTRAPPER_DISPLAY display,
diff --git a/src/engine/mspengine.cpp b/src/engine/mspengine.cpp
index f742ecef..81e85e4c 100644
--- a/src/engine/mspengine.cpp
+++ b/src/engine/mspengine.cpp
@@ -305,12 +305,10 @@ LExit:
305// 305//
306extern "C" HRESULT MspEnginePlanCalculatePackage( 306extern "C" HRESULT MspEnginePlanCalculatePackage(
307 __in BURN_PACKAGE* pPackage, 307 __in BURN_PACKAGE* pPackage,
308 __in BOOL fInsideMsiTransaction, 308 __in BOOL fInsideMsiTransaction
309 __out BOOL* pfBARequestedCache
310 ) 309 )
311{ 310{
312 HRESULT hr = S_OK; 311 HRESULT hr = S_OK;
313 BOOL fBARequestedCache = FALSE;
314 312
315 for (DWORD i = 0; i < pPackage->Msp.cTargetProductCodes; ++i) 313 for (DWORD i = 0; i < pPackage->Msp.cTargetProductCodes; ++i)
316 { 314 {
@@ -352,11 +350,6 @@ extern "C" HRESULT MspEnginePlanCalculatePackage(
352 execute = BOOTSTRAPPER_ACTION_STATE_INSTALL; 350 execute = BOOTSTRAPPER_ACTION_STATE_INSTALL;
353 break; 351 break;
354 352
355 case BOOTSTRAPPER_REQUEST_STATE_CACHE:
356 execute = BOOTSTRAPPER_ACTION_STATE_NONE;
357 fBARequestedCache = TRUE;
358 break;
359
360 default: 353 default:
361 execute = BOOTSTRAPPER_ACTION_STATE_NONE; 354 execute = BOOTSTRAPPER_ACTION_STATE_NONE;
362 break; 355 break;
@@ -419,11 +412,6 @@ extern "C" HRESULT MspEnginePlanCalculatePackage(
419 } 412 }
420 } 413 }
421 414
422 if (pfBARequestedCache)
423 {
424 *pfBARequestedCache = fBARequestedCache;
425 }
426
427 return hr; 415 return hr;
428} 416}
429 417
diff --git a/src/engine/mspengine.h b/src/engine/mspengine.h
index 7ee01e8e..28682169 100644
--- a/src/engine/mspengine.h
+++ b/src/engine/mspengine.h
@@ -38,8 +38,7 @@ HRESULT MspEnginePlanInitializePackage(
38 ); 38 );
39HRESULT MspEnginePlanCalculatePackage( 39HRESULT MspEnginePlanCalculatePackage(
40 __in BURN_PACKAGE* pPackage, 40 __in BURN_PACKAGE* pPackage,
41 __in BOOL fInsideMsiTransaction, 41 __in BOOL fInsideMsiTransaction
42 __out_opt BOOL* pfBARequestedCache
43 ); 42 );
44HRESULT MspEnginePlanAddPackage( 43HRESULT MspEnginePlanAddPackage(
45 __in BOOTSTRAPPER_DISPLAY display, 44 __in BOOTSTRAPPER_DISPLAY display,
diff --git a/src/engine/msuengine.cpp b/src/engine/msuengine.cpp
index 499e1da6..91bbf361 100644
--- a/src/engine/msuengine.cpp
+++ b/src/engine/msuengine.cpp
@@ -82,14 +82,12 @@ LExit:
82// PlanCalculate - calculates the execute and rollback state for the requested package state. 82// PlanCalculate - calculates the execute and rollback state for the requested package state.
83// 83//
84extern "C" HRESULT MsuEnginePlanCalculatePackage( 84extern "C" HRESULT MsuEnginePlanCalculatePackage(
85 __in BURN_PACKAGE* pPackage, 85 __in BURN_PACKAGE* pPackage
86 __out_opt BOOL* pfBARequestedCache
87 ) 86 )
88{ 87{
89 HRESULT hr = S_OK; 88 HRESULT hr = S_OK;
90 BOOTSTRAPPER_ACTION_STATE execute = BOOTSTRAPPER_ACTION_STATE_NONE; 89 BOOTSTRAPPER_ACTION_STATE execute = BOOTSTRAPPER_ACTION_STATE_NONE;
91 BOOTSTRAPPER_ACTION_STATE rollback = BOOTSTRAPPER_ACTION_STATE_NONE; 90 BOOTSTRAPPER_ACTION_STATE rollback = BOOTSTRAPPER_ACTION_STATE_NONE;
92 BOOL fBARequestedCache = FALSE;
93 BOOL fAllowUninstall = FALSE; 91 BOOL fAllowUninstall = FALSE;
94 92
95 // We can only uninstall MSU packages if they have a KB and we are on Win7 or newer. 93 // We can only uninstall MSU packages if they have a KB and we are on Win7 or newer.
@@ -129,10 +127,6 @@ extern "C" HRESULT MsuEnginePlanCalculatePackage(
129 execute = BOOTSTRAPPER_ACTION_STATE_INSTALL; 127 execute = BOOTSTRAPPER_ACTION_STATE_INSTALL;
130 break; 128 break;
131 129
132 case BOOTSTRAPPER_REQUEST_STATE_CACHE:
133 execute = BOOTSTRAPPER_ACTION_STATE_NONE;
134 fBARequestedCache = TRUE;
135
136 default: 130 default:
137 execute = BOOTSTRAPPER_ACTION_STATE_NONE; 131 execute = BOOTSTRAPPER_ACTION_STATE_NONE;
138 break; 132 break;
@@ -187,11 +181,6 @@ extern "C" HRESULT MsuEnginePlanCalculatePackage(
187 pPackage->execute = execute; 181 pPackage->execute = execute;
188 pPackage->rollback = rollback; 182 pPackage->rollback = rollback;
189 183
190 if (pfBARequestedCache)
191 {
192 *pfBARequestedCache = fBARequestedCache;
193 }
194
195LExit: 184LExit:
196 return hr; 185 return hr;
197} 186}
diff --git a/src/engine/msuengine.h b/src/engine/msuengine.h
index 7f57a084..cd966b0a 100644
--- a/src/engine/msuengine.h
+++ b/src/engine/msuengine.h
@@ -21,8 +21,7 @@ HRESULT MsuEngineDetectPackage(
21 __in BURN_VARIABLES* pVariables 21 __in BURN_VARIABLES* pVariables
22 ); 22 );
23HRESULT MsuEnginePlanCalculatePackage( 23HRESULT MsuEnginePlanCalculatePackage(
24 __in BURN_PACKAGE* pPackage, 24 __in BURN_PACKAGE* pPackage
25 __out_opt BOOL* pfBARequestedCache
26 ); 25 );
27HRESULT MsuEnginePlanAddPackage( 26HRESULT MsuEnginePlanAddPackage(
28 __in BURN_PACKAGE* pPackage, 27 __in BURN_PACKAGE* pPackage,
diff --git a/src/engine/package.cpp b/src/engine/package.cpp
index b27b1e07..bb61cdcd 100644
--- a/src/engine/package.cpp
+++ b/src/engine/package.cpp
@@ -317,7 +317,6 @@ extern "C" void PackageUninitialize(
317 ReleaseStr(pPackage->sczLogPathVariable); 317 ReleaseStr(pPackage->sczLogPathVariable);
318 ReleaseStr(pPackage->sczRollbackLogPathVariable); 318 ReleaseStr(pPackage->sczRollbackLogPathVariable);
319 ReleaseStr(pPackage->sczInstallCondition); 319 ReleaseStr(pPackage->sczInstallCondition);
320 ReleaseStr(pPackage->sczRollbackInstallCondition);
321 ReleaseStr(pPackage->sczCacheId); 320 ReleaseStr(pPackage->sczCacheId);
322 321
323 if (pPackage->rgDependencyProviders) 322 if (pPackage->rgDependencyProviders)
diff --git a/src/engine/package.h b/src/engine/package.h
index a728fcc6..5feb3f46 100644
--- a/src/engine/package.h
+++ b/src/engine/package.h
@@ -201,7 +201,6 @@ typedef struct _BURN_PACKAGE
201 LPWSTR sczRollbackLogPathVariable; // name of the variable that will be set to the rollback path. 201 LPWSTR sczRollbackLogPathVariable; // name of the variable that will be set to the rollback path.
202 202
203 LPWSTR sczInstallCondition; 203 LPWSTR sczInstallCondition;
204 LPWSTR sczRollbackInstallCondition;
205 BOOL fPerMachine; 204 BOOL fPerMachine;
206 BOOL fUninstallable; 205 BOOL fUninstallable;
207 BOOL fVital; 206 BOOL fVital;
diff --git a/src/engine/plan.cpp b/src/engine/plan.cpp
index 29adfb42..d99fdde2 100644
--- a/src/engine/plan.cpp
+++ b/src/engine/plan.cpp
@@ -166,11 +166,11 @@ static HRESULT PlanDependencyActions(
166 ); 166 );
167static HRESULT CalculateExecuteActions( 167static HRESULT CalculateExecuteActions(
168 __in BURN_PACKAGE* pPackage, 168 __in BURN_PACKAGE* pPackage,
169 __in_opt BURN_ROLLBACK_BOUNDARY* pActiveRollbackBoundary, 169 __in_opt BURN_ROLLBACK_BOUNDARY* pActiveRollbackBoundary
170 __out_opt BOOL* pfBARequestedCache
171 ); 170 );
172static BOOL NeedsCache( 171static BOOL NeedsCache(
173 __in BURN_PACKAGE* pPackage 172 __in BURN_PACKAGE* pPackage,
173 __in BOOL fExecute
174 ); 174 );
175static HRESULT CreateContainerProgress( 175static HRESULT CreateContainerProgress(
176 __in BURN_PLAN* pPlan, 176 __in BURN_PLAN* pPlan,
@@ -1081,24 +1081,24 @@ extern "C" HRESULT PlanExecutePackage(
1081 ) 1081 )
1082{ 1082{
1083 HRESULT hr = S_OK; 1083 HRESULT hr = S_OK;
1084 BOOL fBARequestedCache = FALSE; 1084 BOOL fRequestedCache = BOOTSTRAPPER_REQUEST_STATE_CACHE == pPackage->requested ||
1085 BOOTSTRAPPER_REQUEST_STATE_ABSENT < pPackage->requested && BURN_CACHE_TYPE_ALWAYS == pPackage->cacheType;
1085 1086
1086 hr = CalculateExecuteActions(pPackage, pPlan->pActiveRollbackBoundary, &fBARequestedCache); 1087 hr = CalculateExecuteActions(pPackage, pPlan->pActiveRollbackBoundary);
1087 ExitOnFailure(hr, "Failed to calculate plan actions for package: %ls", pPackage->sczId); 1088 ExitOnFailure(hr, "Failed to calculate plan actions for package: %ls", pPackage->sczId);
1088 1089
1089 // Calculate package states based on reference count and plan certain dependency actions prior to planning the package execute action. 1090 // Calculate package states based on reference count and plan certain dependency actions prior to planning the package execute action.
1090 hr = DependencyPlanPackageBegin(fPerMachine, pPackage, pPlan); 1091 hr = DependencyPlanPackageBegin(fPerMachine, pPackage, pPlan);
1091 ExitOnFailure(hr, "Failed to begin plan dependency actions for package: %ls", pPackage->sczId); 1092 ExitOnFailure(hr, "Failed to begin plan dependency actions for package: %ls", pPackage->sczId);
1092 1093
1093 if (fBARequestedCache || NeedsCache(pPackage)) 1094 if (fRequestedCache || NeedsCache(pPackage, TRUE))
1094 { 1095 {
1095 hr = AddCachePackage(pPlan, pPackage, phSyncpointEvent); 1096 hr = AddCachePackage(pPlan, pPackage, phSyncpointEvent);
1096 ExitOnFailure(hr, "Failed to plan cache package."); 1097 ExitOnFailure(hr, "Failed to plan cache package.");
1097 } 1098 }
1098 else if (BURN_CACHE_STATE_COMPLETE != pPackage->cache && // if the package is not in the cache, disable any rollback that would require the package from the cache. 1099 else if (BURN_CACHE_STATE_COMPLETE != pPackage->cache && NeedsCache(pPackage, FALSE))
1099 (BOOTSTRAPPER_ACTION_STATE_UNINSTALL < pPackage->rollback || (BURN_PACKAGE_TYPE_EXE == pPackage->type && BOOTSTRAPPER_ACTION_STATE_NONE != pPackage->rollback))
1100 )
1101 { 1100 {
1101 // If the package is not in the cache, disable any rollback that would require the package from the cache.
1102 LogId(REPORT_STANDARD, MSG_PLAN_DISABLING_ROLLBACK_NO_CACHE, pPackage->sczId, LoggingCacheStateToString(pPackage->cache), LoggingActionStateToString(pPackage->rollback)); 1102 LogId(REPORT_STANDARD, MSG_PLAN_DISABLING_ROLLBACK_NO_CACHE, pPackage->sczId, LoggingCacheStateToString(pPackage->cache), LoggingActionStateToString(pPackage->rollback));
1103 pPackage->rollback = BOOTSTRAPPER_ACTION_STATE_NONE; 1103 pPackage->rollback = BOOTSTRAPPER_ACTION_STATE_NONE;
1104 } 1104 }
@@ -1431,7 +1431,7 @@ extern "C" HRESULT PlanRelatedBundlesComplete(
1431 1431
1432 if (BOOTSTRAPPER_REQUEST_STATE_NONE != pRelatedBundle->package.requested) 1432 if (BOOTSTRAPPER_REQUEST_STATE_NONE != pRelatedBundle->package.requested)
1433 { 1433 {
1434 hr = ExeEnginePlanCalculatePackage(&pRelatedBundle->package, NULL); 1434 hr = ExeEnginePlanCalculatePackage(&pRelatedBundle->package);
1435 ExitOnFailure(hr, "Failed to calcuate plan for related bundle: %ls", pRelatedBundle->package.sczId); 1435 ExitOnFailure(hr, "Failed to calcuate plan for related bundle: %ls", pRelatedBundle->package.sczId);
1436 1436
1437 // Calculate package states based on reference count for addon and patch related bundles. 1437 // Calculate package states based on reference count for addon and patch related bundles.
@@ -2819,8 +2819,7 @@ LExit:
2819 2819
2820static HRESULT CalculateExecuteActions( 2820static HRESULT CalculateExecuteActions(
2821 __in BURN_PACKAGE* pPackage, 2821 __in BURN_PACKAGE* pPackage,
2822 __in_opt BURN_ROLLBACK_BOUNDARY* pActiveRollbackBoundary, 2822 __in_opt BURN_ROLLBACK_BOUNDARY* pActiveRollbackBoundary
2823 __out_opt BOOL* pfBARequestedCache
2824 ) 2823 )
2825{ 2824{
2826 HRESULT hr = S_OK; 2825 HRESULT hr = S_OK;
@@ -2830,19 +2829,19 @@ static HRESULT CalculateExecuteActions(
2830 switch (pPackage->type) 2829 switch (pPackage->type)
2831 { 2830 {
2832 case BURN_PACKAGE_TYPE_EXE: 2831 case BURN_PACKAGE_TYPE_EXE:
2833 hr = ExeEnginePlanCalculatePackage(pPackage, pfBARequestedCache); 2832 hr = ExeEnginePlanCalculatePackage(pPackage);
2834 break; 2833 break;
2835 2834
2836 case BURN_PACKAGE_TYPE_MSI: 2835 case BURN_PACKAGE_TYPE_MSI:
2837 hr = MsiEnginePlanCalculatePackage(pPackage, fInsideMsiTransaction, pfBARequestedCache); 2836 hr = MsiEnginePlanCalculatePackage(pPackage, fInsideMsiTransaction);
2838 break; 2837 break;
2839 2838
2840 case BURN_PACKAGE_TYPE_MSP: 2839 case BURN_PACKAGE_TYPE_MSP:
2841 hr = MspEnginePlanCalculatePackage(pPackage, fInsideMsiTransaction, pfBARequestedCache); 2840 hr = MspEnginePlanCalculatePackage(pPackage, fInsideMsiTransaction);
2842 break; 2841 break;
2843 2842
2844 case BURN_PACKAGE_TYPE_MSU: 2843 case BURN_PACKAGE_TYPE_MSU:
2845 hr = MsuEnginePlanCalculatePackage(pPackage, pfBARequestedCache); 2844 hr = MsuEnginePlanCalculatePackage(pPackage);
2846 break; 2845 break;
2847 2846
2848 default: 2847 default:
@@ -2855,16 +2854,18 @@ LExit:
2855} 2854}
2856 2855
2857static BOOL NeedsCache( 2856static BOOL NeedsCache(
2858 __in BURN_PACKAGE* pPackage 2857 __in BURN_PACKAGE* pPackage,
2858 __in BOOL fExecute
2859 ) 2859 )
2860{ 2860{
2861 BOOTSTRAPPER_ACTION_STATE action = fExecute ? pPackage->execute : pPackage->rollback;
2861 if (BURN_PACKAGE_TYPE_EXE == pPackage->type) // Exe packages require the package for all operations (even uninstall). 2862 if (BURN_PACKAGE_TYPE_EXE == pPackage->type) // Exe packages require the package for all operations (even uninstall).
2862 { 2863 {
2863 return BOOTSTRAPPER_ACTION_STATE_NONE != pPackage->execute; 2864 return BOOTSTRAPPER_ACTION_STATE_NONE != action;
2864 } 2865 }
2865 else // The other package types can uninstall without the original package. 2866 else // The other package types can uninstall without the original package.
2866 { 2867 {
2867 return BOOTSTRAPPER_ACTION_STATE_UNINSTALL < pPackage->execute; 2868 return BOOTSTRAPPER_ACTION_STATE_UNINSTALL < action;
2868 } 2869 }
2869} 2870}
2870 2871