Only the requested state and Cache=always should affect requestedCache.
Sean Hall committed
Feb 18, 2021 at 10:45 UTC
837f2e309c8ef0476668c342f612dfe1bb26cb87
11 files changed
+28
-90
src/engine/exeengine.cpp
+1
-23
@@ -157,25 +157,12 @@ LExit:
157
// PlanCalculate - calculates the execute and rollback state for the requested package state.
158
//
159
extern "C" HRESULT ExeEnginePlanCalculatePackage(
160
- __in BURN_PACKAGE* pPackage,
161
- __out_opt BOOL* pfBARequestedCache
160
+ __in BURN_PACKAGE* pPackage
161
)
162
{
163
HRESULT hr = S_OK;
165
- //BOOL fCondition = FALSE;
166
- //BOOTSTRAPPER_PACKAGE_STATE expected = BOOTSTRAPPER_PACKAGE_STATE_UNKNOWN;
164
BOOTSTRAPPER_ACTION_STATE execute = 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
- //}
166
167
// execute action
168
switch (pPackage->currentState)
@@ -209,10 +196,6 @@ extern "C" HRESULT ExeEnginePlanCalculatePackage(
196
case BOOTSTRAPPER_REQUEST_STATE_REPAIR:
197
execute = BOOTSTRAPPER_ACTION_STATE_INSTALL;
198
break;
212
- case BOOTSTRAPPER_REQUEST_STATE_CACHE:
213
- execute = BOOTSTRAPPER_ACTION_STATE_NONE;
214
- fBARequestedCache = TRUE;
215
- break;
199
default:
200
execute = BOOTSTRAPPER_ACTION_STATE_NONE;
201
break;
@@ -273,11 +256,6 @@ extern "C" HRESULT ExeEnginePlanCalculatePackage(
256
pPackage->execute = execute;
257
pPackage->rollback = rollback;
258
276
- if (pfBARequestedCache)
277
- {
278
- *pfBARequestedCache = fBARequestedCache;
279
- }
280
-
259
LExit:
260
return hr;
261
}
src/engine/exeengine.h
+1
-2
@@ -21,8 +21,7 @@ HRESULT ExeEngineDetectPackage(
21
__in BURN_VARIABLES* pVariables
22
);
23
HRESULT ExeEnginePlanCalculatePackage(
24
- __in BURN_PACKAGE* pPackage,
25
- __out_opt BOOL* pfBARequestedCache
24
+ __in BURN_PACKAGE* pPackage
25
);
26
HRESULT ExeEnginePlanAddPackage(
27
__in_opt DWORD *pdwInsertSequence,
src/engine/msiengine.cpp
+1
-13
@@ -714,8 +714,7 @@ LExit:
714
//
715
extern "C" HRESULT MsiEnginePlanCalculatePackage(
716
__in BURN_PACKAGE* pPackage,
717
- __in BOOL fInsideMsiTransaction,
718
- __out_opt BOOL* pfBARequestedCache
717
+ __in BOOL fInsideMsiTransaction
718
)
719
{
720
Trace(REPORT_STANDARD, "Planning MSI package 0x%p", pPackage);
@@ -728,7 +727,6 @@ extern "C" HRESULT MsiEnginePlanCalculatePackage(
727
BOOTSTRAPPER_ACTION_STATE rollback = BOOTSTRAPPER_ACTION_STATE_NONE;
728
BOOL fFeatureActionDelta = FALSE;
729
BOOL fRollbackFeatureActionDelta = FALSE;
731
- BOOL fBARequestedCache = FALSE;
730
731
if (pPackage->Msi.cFeatures)
732
{
@@ -813,11 +811,6 @@ extern "C" HRESULT MsiEnginePlanCalculatePackage(
811
execute = BOOTSTRAPPER_ACTION_STATE_INSTALL;
812
break;
813
816
- case BOOTSTRAPPER_REQUEST_STATE_CACHE:
817
- execute = BOOTSTRAPPER_ACTION_STATE_NONE;
818
- fBARequestedCache = TRUE;
819
- break;
820
-
814
default:
815
execute = BOOTSTRAPPER_ACTION_STATE_NONE;
816
break;
@@ -880,11 +873,6 @@ extern "C" HRESULT MsiEnginePlanCalculatePackage(
873
pPackage->execute = execute;
874
pPackage->rollback = rollback;
875
883
- if (pfBARequestedCache)
884
- {
885
- *pfBARequestedCache = fBARequestedCache;
886
- }
887
-
876
LExit:
877
return hr;
878
}
src/engine/msiengine.h
+1
-2
@@ -38,8 +38,7 @@ HRESULT MsiEnginePlanInitializePackage(
38
);
39
HRESULT MsiEnginePlanCalculatePackage(
40
__in BURN_PACKAGE* pPackage,
41
- __in BOOL fInsideMsiTransaction,
42
- __out_opt BOOL* pfBARequestedCache
41
+ __in BOOL fInsideMsiTransaction
42
);
43
HRESULT MsiEnginePlanAddPackage(
44
__in BOOTSTRAPPER_DISPLAY display,
src/engine/mspengine.cpp
+1
-13
@@ -305,12 +305,10 @@ LExit:
305
//
306
extern "C" HRESULT MspEnginePlanCalculatePackage(
307
__in BURN_PACKAGE* pPackage,
308
- __in BOOL fInsideMsiTransaction,
309
- __out BOOL* pfBARequestedCache
308
+ __in BOOL fInsideMsiTransaction
309
)
310
{
311
HRESULT hr = S_OK;
313
- BOOL fBARequestedCache = FALSE;
312
313
for (DWORD i = 0; i < pPackage->Msp.cTargetProductCodes; ++i)
314
{
@@ -352,11 +350,6 @@ extern "C" HRESULT MspEnginePlanCalculatePackage(
350
execute = BOOTSTRAPPER_ACTION_STATE_INSTALL;
351
break;
352
355
- case BOOTSTRAPPER_REQUEST_STATE_CACHE:
356
- execute = BOOTSTRAPPER_ACTION_STATE_NONE;
357
- fBARequestedCache = TRUE;
358
- break;
359
-
353
default:
354
execute = BOOTSTRAPPER_ACTION_STATE_NONE;
355
break;
@@ -419,11 +412,6 @@ extern "C" HRESULT MspEnginePlanCalculatePackage(
412
}
413
}
414
422
- if (pfBARequestedCache)
423
- {
424
- *pfBARequestedCache = fBARequestedCache;
425
- }
426
-
415
return hr;
416
}
417
src/engine/mspengine.h
+1
-2
@@ -38,8 +38,7 @@ HRESULT MspEnginePlanInitializePackage(
38
);
39
HRESULT MspEnginePlanCalculatePackage(
40
__in BURN_PACKAGE* pPackage,
41
- __in BOOL fInsideMsiTransaction,
42
- __out_opt BOOL* pfBARequestedCache
41
+ __in BOOL fInsideMsiTransaction
42
);
43
HRESULT MspEnginePlanAddPackage(
44
__in BOOTSTRAPPER_DISPLAY display,
src/engine/msuengine.cpp
+1
-12
@@ -82,14 +82,12 @@ LExit:
82
// PlanCalculate - calculates the execute and rollback state for the requested package state.
83
//
84
extern "C" HRESULT MsuEnginePlanCalculatePackage(
85
- __in BURN_PACKAGE* pPackage,
86
- __out_opt BOOL* pfBARequestedCache
85
+ __in BURN_PACKAGE* pPackage
86
)
87
{
88
HRESULT hr = S_OK;
89
BOOTSTRAPPER_ACTION_STATE execute = BOOTSTRAPPER_ACTION_STATE_NONE;
90
BOOTSTRAPPER_ACTION_STATE rollback = BOOTSTRAPPER_ACTION_STATE_NONE;
92
- BOOL fBARequestedCache = FALSE;
91
BOOL fAllowUninstall = FALSE;
92
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(
127
execute = BOOTSTRAPPER_ACTION_STATE_INSTALL;
128
break;
129
132
- case BOOTSTRAPPER_REQUEST_STATE_CACHE:
133
- execute = BOOTSTRAPPER_ACTION_STATE_NONE;
134
- fBARequestedCache = TRUE;
135
-
130
default:
131
execute = BOOTSTRAPPER_ACTION_STATE_NONE;
132
break;
@@ -187,11 +181,6 @@ extern "C" HRESULT MsuEnginePlanCalculatePackage(
181
pPackage->execute = execute;
182
pPackage->rollback = rollback;
183
190
- if (pfBARequestedCache)
191
- {
192
- *pfBARequestedCache = fBARequestedCache;
193
- }
194
-
184
LExit:
185
return hr;
186
}
src/engine/msuengine.h
+1
-2
@@ -21,8 +21,7 @@ HRESULT MsuEngineDetectPackage(
21
__in BURN_VARIABLES* pVariables
22
);
23
HRESULT MsuEnginePlanCalculatePackage(
24
- __in BURN_PACKAGE* pPackage,
25
- __out_opt BOOL* pfBARequestedCache
24
+ __in BURN_PACKAGE* pPackage
25
);
26
HRESULT MsuEnginePlanAddPackage(
27
__in BURN_PACKAGE* pPackage,
src/engine/package.cpp
-1
@@ -317,7 +317,6 @@ extern "C" void PackageUninitialize(
317
ReleaseStr(pPackage->sczLogPathVariable);
318
ReleaseStr(pPackage->sczRollbackLogPathVariable);
319
ReleaseStr(pPackage->sczInstallCondition);
320
- ReleaseStr(pPackage->sczRollbackInstallCondition);
320
ReleaseStr(pPackage->sczCacheId);
321
322
if (pPackage->rgDependencyProviders)
src/engine/package.h
-1
@@ -201,7 +201,6 @@ typedef struct _BURN_PACKAGE
201
LPWSTR sczRollbackLogPathVariable; // name of the variable that will be set to the rollback path.
202
203
LPWSTR sczInstallCondition;
204
- LPWSTR sczRollbackInstallCondition;
204
BOOL fPerMachine;
205
BOOL fUninstallable;
206
BOOL fVital;
src/engine/plan.cpp
+20
-19
@@ -166,11 +166,11 @@ static HRESULT PlanDependencyActions(
166
);
167
static HRESULT CalculateExecuteActions(
168
__in BURN_PACKAGE* pPackage,
169
- __in_opt BURN_ROLLBACK_BOUNDARY* pActiveRollbackBoundary,
170
- __out_opt BOOL* pfBARequestedCache
169
+ __in_opt BURN_ROLLBACK_BOUNDARY* pActiveRollbackBoundary
170
);
171
static BOOL NeedsCache(
173
- __in BURN_PACKAGE* pPackage
172
+ __in BURN_PACKAGE* pPackage,
173
+ __in BOOL fExecute
174
);
175
static HRESULT CreateContainerProgress(
176
__in BURN_PLAN* pPlan,
@@ -1081,24 +1081,24 @@ extern "C" HRESULT PlanExecutePackage(
1081
)
1082
{
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;
1086
1086
- hr = CalculateExecuteActions(pPackage, pPlan->pActiveRollbackBoundary, &fBARequestedCache);
1087
+ hr = CalculateExecuteActions(pPackage, pPlan->pActiveRollbackBoundary);
1088
ExitOnFailure(hr, "Failed to calculate plan actions for package: %ls", pPackage->sczId);
1089
1090
// Calculate package states based on reference count and plan certain dependency actions prior to planning the package execute action.
1091
hr = DependencyPlanPackageBegin(fPerMachine, pPackage, pPlan);
1092
ExitOnFailure(hr, "Failed to begin plan dependency actions for package: %ls", pPackage->sczId);
1093
1093
- if (fBARequestedCache || NeedsCache(pPackage))
1094
+ if (fRequestedCache || NeedsCache(pPackage, TRUE))
1095
{
1096
hr = AddCachePackage(pPlan, pPackage, phSyncpointEvent);
1097
ExitOnFailure(hr, "Failed to plan cache package.");
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
- (BOOTSTRAPPER_ACTION_STATE_UNINSTALL < pPackage->rollback || (BURN_PACKAGE_TYPE_EXE == pPackage->type && BOOTSTRAPPER_ACTION_STATE_NONE != pPackage->rollback))
1100
- )
1099
+ else if (BURN_CACHE_STATE_COMPLETE != pPackage->cache && NeedsCache(pPackage, FALSE))
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));
1103
pPackage->rollback = BOOTSTRAPPER_ACTION_STATE_NONE;
1104
}
@@ -1431,7 +1431,7 @@ extern "C" HRESULT PlanRelatedBundlesComplete(
1431
1432
if (BOOTSTRAPPER_REQUEST_STATE_NONE != pRelatedBundle->package.requested)
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);
1436
1437
// Calculate package states based on reference count for addon and patch related bundles.
@@ -2819,8 +2819,7 @@ LExit:
2819
2820
static HRESULT CalculateExecuteActions(
2821
__in BURN_PACKAGE* pPackage,
2822
- __in_opt BURN_ROLLBACK_BOUNDARY* pActiveRollbackBoundary,
2823
- __out_opt BOOL* pfBARequestedCache
2822
+ __in_opt BURN_ROLLBACK_BOUNDARY* pActiveRollbackBoundary
2823
)
2824
{
2825
HRESULT hr = S_OK;
@@ -2830,19 +2829,19 @@ static HRESULT CalculateExecuteActions(
2829
switch (pPackage->type)
2830
{
2831
case BURN_PACKAGE_TYPE_EXE:
2833
- hr = ExeEnginePlanCalculatePackage(pPackage, pfBARequestedCache);
2832
+ hr = ExeEnginePlanCalculatePackage(pPackage);
2833
break;
2834
2835
case BURN_PACKAGE_TYPE_MSI:
2837
- hr = MsiEnginePlanCalculatePackage(pPackage, fInsideMsiTransaction, pfBARequestedCache);
2836
+ hr = MsiEnginePlanCalculatePackage(pPackage, fInsideMsiTransaction);
2837
break;
2838
2839
case BURN_PACKAGE_TYPE_MSP:
2841
- hr = MspEnginePlanCalculatePackage(pPackage, fInsideMsiTransaction, pfBARequestedCache);
2840
+ hr = MspEnginePlanCalculatePackage(pPackage, fInsideMsiTransaction);
2841
break;
2842
2843
case BURN_PACKAGE_TYPE_MSU:
2845
- hr = MsuEnginePlanCalculatePackage(pPackage, pfBARequestedCache);
2844
+ hr = MsuEnginePlanCalculatePackage(pPackage);
2845
break;
2846
2847
default:
@@ -2855,16 +2854,18 @@ LExit:
2854
}
2855
2856
static BOOL NeedsCache(
2858
- __in BURN_PACKAGE* pPackage
2857
+ __in BURN_PACKAGE* pPackage,
2858
+ __in BOOL fExecute
2859
)
2860
{
2861
+ BOOTSTRAPPER_ACTION_STATE action = fExecute ? pPackage->execute : pPackage->rollback;
2862
if (BURN_PACKAGE_TYPE_EXE == pPackage->type) // Exe packages require the package for all operations (even uninstall).
2863
{
2863
- return BOOTSTRAPPER_ACTION_STATE_NONE != pPackage->execute;
2864
+ return BOOTSTRAPPER_ACTION_STATE_NONE != action;
2865
}
2866
else // The other package types can uninstall without the original package.
2867
{
2867
- return BOOTSTRAPPER_ACTION_STATE_UNINSTALL < pPackage->execute;
2868
+ return BOOTSTRAPPER_ACTION_STATE_UNINSTALL < action;
2869
}
2870
}
2871