aboutsummaryrefslogtreecommitdiff
path: root/src/burn/engine/apply.cpp
diff options
context:
space:
mode:
authorSean Hall <r.sean.hall@gmail.com>2022-01-14 21:37:24 -0600
committerSean Hall <r.sean.hall@gmail.com>2022-01-16 10:30:28 -0600
commitda1d1376953ef1c9afb32d5eee02b785e52e372e (patch)
tree0df8550960259d7b13f5cd90f04d21b5576f16b7 /src/burn/engine/apply.cpp
parentabe316b80fae80eba54b0b79e76b6362105fa098 (diff)
downloadwix-da1d1376953ef1c9afb32d5eee02b785e52e372e.tar.gz
wix-da1d1376953ef1c9afb32d5eee02b785e52e372e.tar.bz2
wix-da1d1376953ef1c9afb32d5eee02b785e52e372e.zip
Remove orphan compatible MSI packages.
Reimplements #3190
Diffstat (limited to 'src/burn/engine/apply.cpp')
-rw-r--r--src/burn/engine/apply.cpp162
1 files changed, 134 insertions, 28 deletions
diff --git a/src/burn/engine/apply.cpp b/src/burn/engine/apply.cpp
index 99884234..6bf3020c 100644
--- a/src/burn/engine/apply.cpp
+++ b/src/burn/engine/apply.cpp
@@ -60,7 +60,7 @@ typedef struct _BURN_EXECUTE_CONTEXT
60 BURN_USER_EXPERIENCE* pUX; 60 BURN_USER_EXPERIENCE* pUX;
61 BURN_APPLY_CONTEXT* pApplyContext; 61 BURN_APPLY_CONTEXT* pApplyContext;
62 BOOL fRollback; 62 BOOL fRollback;
63 BURN_PACKAGE* pExecutingPackage; 63 LPCWSTR wzExecutingPackageId;
64 DWORD cExecutedPackages; 64 DWORD cExecutedPackages;
65 DWORD cExecutePackagesTotal; 65 DWORD cExecutePackagesTotal;
66} BURN_EXECUTE_CONTEXT; 66} BURN_EXECUTE_CONTEXT;
@@ -278,6 +278,19 @@ static void ResetTransactionRegistrationState(
278 __in BURN_ENGINE_STATE* pEngineState, 278 __in BURN_ENGINE_STATE* pEngineState,
279 __in BOOL fCommit 279 __in BOOL fCommit
280 ); 280 );
281static HRESULT ExecuteUninstallMsiCompatiblePackage(
282 __in BURN_ENGINE_STATE* pEngineState,
283 __in BURN_EXECUTE_ACTION* pExecuteAction,
284 __in BURN_EXECUTE_CONTEXT* pContext,
285 __out BOOL* pfRetry,
286 __out BOOL* pfSuspend,
287 __out BOOTSTRAPPER_APPLY_RESTART* pRestart
288 );
289static HRESULT CleanCompatiblePackage(
290 __in BURN_CACHE* pCache,
291 __in HANDLE hElevatedPipe,
292 __in BURN_PACKAGE* pPackage
293 );
281static HRESULT CleanPackage( 294static HRESULT CleanPackage(
282 __in BURN_CACHE* pCache, 295 __in BURN_CACHE* pCache,
283 __in HANDLE hElevatedPipe, 296 __in HANDLE hElevatedPipe,
@@ -300,7 +313,8 @@ static HRESULT ReportOverallProgressTicks(
300static HRESULT ExecutePackageComplete( 313static HRESULT ExecutePackageComplete(
301 __in BURN_USER_EXPERIENCE* pUX, 314 __in BURN_USER_EXPERIENCE* pUX,
302 __in BURN_VARIABLES* pVariables, 315 __in BURN_VARIABLES* pVariables,
303 __in BURN_PACKAGE* pPackage, 316 __in LPCWSTR wzPackageId,
317 __in BOOL fPackageVital,
304 __in HRESULT hrOverall, 318 __in HRESULT hrOverall,
305 __in HRESULT hrExecute, 319 __in HRESULT hrExecute,
306 __in BOOL fRollback, 320 __in BOOL fRollback,
@@ -808,7 +822,20 @@ extern "C" void ApplyClean(
808 BURN_CLEAN_ACTION* pCleanAction = pPlan->rgCleanActions + i; 822 BURN_CLEAN_ACTION* pCleanAction = pPlan->rgCleanActions + i;
809 BURN_PACKAGE* pPackage = pCleanAction->pPackage; 823 BURN_PACKAGE* pPackage = pCleanAction->pPackage;
810 824
811 hr = CleanPackage(pPlan->pCache, hPipe, pPackage); 825 switch (pCleanAction->type)
826 {
827 case BURN_CLEAN_ACTION_TYPE_COMPATIBLE_PACKAGE:
828 hr = CleanCompatiblePackage(pPlan->pCache, hPipe, pPackage);
829 break;
830
831 case BURN_CLEAN_ACTION_TYPE_PACKAGE:
832 hr = CleanPackage(pPlan->pCache, hPipe, pPackage);
833 break;
834
835 default:
836 AssertSz(FALSE, "Unknown clean action.");
837 break;
838 }
812 } 839 }
813} 840}
814 841
@@ -2350,6 +2377,11 @@ static HRESULT DoExecuteAction(
2350 ExitOnFailure(hr, "Failed to execute commit MSI transaction action."); 2377 ExitOnFailure(hr, "Failed to execute commit MSI transaction action.");
2351 break; 2378 break;
2352 2379
2380 case BURN_EXECUTE_ACTION_TYPE_UNINSTALL_MSI_COMPATIBLE_PACKAGE:
2381 hr = ExecuteUninstallMsiCompatiblePackage(pEngineState, pExecuteAction, pContext, &fRetry, pfSuspend, &restart);
2382 ExitOnFailure(hr, "Failed to execute uninstall MSI compatible package.");
2383 break;
2384
2353 default: 2385 default:
2354 hr = E_UNEXPECTED; 2386 hr = E_UNEXPECTED;
2355 ExitOnFailure(hr, "Invalid execute action."); 2387 ExitOnFailure(hr, "Invalid execute action.");
@@ -2509,7 +2541,7 @@ static HRESULT ExecuteRelatedBundle(
2509 } 2541 }
2510 2542
2511 Assert(pContext->fRollback == fRollback); 2543 Assert(pContext->fRollback == fRollback);
2512 pContext->pExecutingPackage = pPackage; 2544 pContext->wzExecutingPackageId = pPackage->sczId;
2513 fBeginCalled = TRUE; 2545 fBeginCalled = TRUE;
2514 2546
2515 // Send package execute begin to BA. 2547 // Send package execute begin to BA.
@@ -2550,7 +2582,7 @@ static HRESULT ExecuteRelatedBundle(
2550LExit: 2582LExit:
2551 if (fBeginCalled) 2583 if (fBeginCalled)
2552 { 2584 {
2553 hr = ExecutePackageComplete(&pEngineState->userExperience, &pEngineState->variables, pPackage, hr, hrExecute, fRollback, pRestart, pfRetry, pfSuspend); 2585 hr = ExecutePackageComplete(&pEngineState->userExperience, &pEngineState->variables, pPackage->sczId, pPackage->fVital, hr, hrExecute, fRollback, pRestart, pfRetry, pfSuspend);
2554 } 2586 }
2555 2587
2556 return hr; 2588 return hr;
@@ -2581,7 +2613,7 @@ static HRESULT ExecuteExePackage(
2581 } 2613 }
2582 2614
2583 Assert(pContext->fRollback == fRollback); 2615 Assert(pContext->fRollback == fRollback);
2584 pContext->pExecutingPackage = pPackage; 2616 pContext->wzExecutingPackageId = pPackage->sczId;
2585 fBeginCalled = TRUE; 2617 fBeginCalled = TRUE;
2586 2618
2587 // Send package execute begin to BA. 2619 // Send package execute begin to BA.
@@ -2629,7 +2661,7 @@ LExit:
2629 2661
2630 if (fBeginCalled) 2662 if (fBeginCalled)
2631 { 2663 {
2632 hr = ExecutePackageComplete(&pEngineState->userExperience, &pEngineState->variables, pPackage, hr, hrExecute, fRollback, pRestart, pfRetry, pfSuspend); 2664 hr = ExecutePackageComplete(&pEngineState->userExperience, &pEngineState->variables, pPackage->sczId, pPackage->fVital, hr, hrExecute, fRollback, pRestart, pfRetry, pfSuspend);
2633 } 2665 }
2634 2666
2635 return hr; 2667 return hr;
@@ -2659,7 +2691,7 @@ static HRESULT ExecuteMsiPackage(
2659 } 2691 }
2660 2692
2661 Assert(pContext->fRollback == fRollback); 2693 Assert(pContext->fRollback == fRollback);
2662 pContext->pExecutingPackage = pPackage; 2694 pContext->wzExecutingPackageId = pPackage->sczId;
2663 fBeginCalled = TRUE; 2695 fBeginCalled = TRUE;
2664 2696
2665 // Send package execute begin to BA. 2697 // Send package execute begin to BA.
@@ -2693,7 +2725,7 @@ LExit:
2693 2725
2694 if (fBeginCalled) 2726 if (fBeginCalled)
2695 { 2727 {
2696 hr = ExecutePackageComplete(&pEngineState->userExperience, &pEngineState->variables, pPackage, hr, hrExecute, fRollback, pRestart, pfRetry, pfSuspend); 2728 hr = ExecutePackageComplete(&pEngineState->userExperience, &pEngineState->variables, pPackage->sczId, pPackage->fVital, hr, hrExecute, fRollback, pRestart, pfRetry, pfSuspend);
2697 } 2729 }
2698 2730
2699 return hr; 2731 return hr;
@@ -2723,7 +2755,7 @@ static HRESULT ExecuteMspPackage(
2723 } 2755 }
2724 2756
2725 Assert(pContext->fRollback == fRollback); 2757 Assert(pContext->fRollback == fRollback);
2726 pContext->pExecutingPackage = pPackage; 2758 pContext->wzExecutingPackageId = pPackage->sczId;
2727 fBeginCalled = TRUE; 2759 fBeginCalled = TRUE;
2728 2760
2729 // Send package execute begin to BA. 2761 // Send package execute begin to BA.
@@ -2766,7 +2798,7 @@ LExit:
2766 2798
2767 if (fBeginCalled) 2799 if (fBeginCalled)
2768 { 2800 {
2769 hr = ExecutePackageComplete(&pEngineState->userExperience, &pEngineState->variables, pPackage, hr, hrExecute, fRollback, pRestart, pfRetry, pfSuspend); 2801 hr = ExecutePackageComplete(&pEngineState->userExperience, &pEngineState->variables, pPackage->sczId, pPackage->fVital, hr, hrExecute, fRollback, pRestart, pfRetry, pfSuspend);
2770 } 2802 }
2771 2803
2772 return hr; 2804 return hr;
@@ -2798,7 +2830,7 @@ static HRESULT ExecuteMsuPackage(
2798 } 2830 }
2799 2831
2800 Assert(pContext->fRollback == fRollback); 2832 Assert(pContext->fRollback == fRollback);
2801 pContext->pExecutingPackage = pPackage; 2833 pContext->wzExecutingPackageId = pPackage->sczId;
2802 fBeginCalled = TRUE; 2834 fBeginCalled = TRUE;
2803 2835
2804 // Send package execute begin to BA. 2836 // Send package execute begin to BA.
@@ -2846,7 +2878,7 @@ LExit:
2846 2878
2847 if (fBeginCalled) 2879 if (fBeginCalled)
2848 { 2880 {
2849 hr = ExecutePackageComplete(&pEngineState->userExperience, &pEngineState->variables, pPackage, hr, hrExecute, fRollback, pRestart, pfRetry, pfSuspend); 2881 hr = ExecutePackageComplete(&pEngineState->userExperience, &pEngineState->variables, pPackage->sczId, pPackage->fVital, hr, hrExecute, fRollback, pRestart, pfRetry, pfSuspend);
2850 } 2882 }
2851 2883
2852 return hr; 2884 return hr;
@@ -3110,6 +3142,79 @@ static void ResetTransactionRegistrationState(
3110 } 3142 }
3111} 3143}
3112 3144
3145static HRESULT ExecuteUninstallMsiCompatiblePackage(
3146 __in BURN_ENGINE_STATE* pEngineState,
3147 __in BURN_EXECUTE_ACTION* pExecuteAction,
3148 __in BURN_EXECUTE_CONTEXT* pContext,
3149 __out BOOL* pfRetry,
3150 __out BOOL* pfSuspend,
3151 __out BOOTSTRAPPER_APPLY_RESTART* pRestart
3152 )
3153{
3154 HRESULT hr = S_OK;
3155 HRESULT hrExecute = S_OK;
3156 BOOL fRollback = FALSE;
3157 BOOTSTRAPPER_ACTION_STATE action = BOOTSTRAPPER_ACTION_STATE_UNINSTALL;
3158 INSTALLUILEVEL uiLevel = INSTALLUILEVEL_NONE;
3159 BOOL fDisableExternalUiHandler = FALSE;
3160 BOOL fBeginCalled = FALSE;
3161 BURN_PACKAGE* pParentPackage = pExecuteAction->uninstallMsiCompatiblePackage.pParentPackage;
3162
3163 Assert(pContext->fRollback == fRollback);
3164 pContext->wzExecutingPackageId = pParentPackage->compatiblePackage.compatibleEntry.sczId;
3165 fBeginCalled = TRUE;
3166
3167 // Send package execute begin to BA.
3168 hr = UserExperienceOnExecutePackageBegin(&pEngineState->userExperience, pContext->wzExecutingPackageId, !fRollback, action, uiLevel, fDisableExternalUiHandler);
3169 ExitOnRootFailure(hr, "BA aborted execute MSI compatible package begin.");
3170
3171 // execute package
3172 if (pParentPackage->fPerMachine)
3173 {
3174 hrExecute = ElevationUninstallMsiCompatiblePackage(pEngineState->companionConnection.hPipe, pEngineState->userExperience.hwndApply, pExecuteAction, &pEngineState->variables, fRollback, MsiExecuteMessageHandler, pContext, pRestart);
3175 ExitOnFailure(hrExecute, "Failed to uninstall per-machine MSI compatible package.");
3176 }
3177 else
3178 {
3179 hrExecute = MsiEngineUninstallCompatiblePackage(pEngineState->userExperience.hwndApply, pExecuteAction, pContext->pCache, &pEngineState->variables, fRollback, MsiExecuteMessageHandler, pContext, pRestart);
3180 ExitOnFailure(hrExecute, "Failed to uninstall per-user MSI compatible package.");
3181 }
3182
3183 pContext->cExecutedPackages += fRollback ? -1 : 1;
3184
3185 hr = ReportOverallProgressTicks(&pEngineState->userExperience, fRollback, pEngineState->plan.cOverallProgressTicksTotal, pContext->pApplyContext);
3186 ExitOnRootFailure(hr, "BA aborted MSI compatible package execute progress.");
3187
3188LExit:
3189
3190 if (fBeginCalled)
3191 {
3192 hr = ExecutePackageComplete(&pEngineState->userExperience, &pEngineState->variables, pContext->wzExecutingPackageId, FALSE, hr, hrExecute, fRollback, pRestart, pfRetry, pfSuspend);
3193 }
3194
3195 return hr;
3196}
3197
3198static HRESULT CleanCompatiblePackage(
3199 __in BURN_CACHE* pCache,
3200 __in HANDLE hElevatedPipe,
3201 __in BURN_PACKAGE* pPackage
3202 )
3203{
3204 HRESULT hr = S_OK;
3205
3206 if (pPackage->fPerMachine)
3207 {
3208 hr = ElevationCleanCompatiblePackage(hElevatedPipe, pPackage);
3209 }
3210 else
3211 {
3212 hr = CacheRemovePackage(pCache, FALSE, pPackage->compatiblePackage.compatibleEntry.sczId, pPackage->compatiblePackage.sczCacheId);
3213 }
3214
3215 return hr;
3216}
3217
3113static HRESULT CleanPackage( 3218static HRESULT CleanPackage(
3114 __in BURN_CACHE* pCache, 3219 __in BURN_CACHE* pCache,
3115 __in HANDLE hElevatedPipe, 3220 __in HANDLE hElevatedPipe,
@@ -3150,16 +3255,16 @@ static int GenericExecuteMessageHandler(
3150 case GENERIC_EXECUTE_MESSAGE_PROGRESS: 3255 case GENERIC_EXECUTE_MESSAGE_PROGRESS:
3151 { 3256 {
3152 DWORD dwOverallProgress = pContext->cExecutePackagesTotal ? (pContext->cExecutedPackages * 100 + pMessage->progress.dwPercentage) / (pContext->cExecutePackagesTotal) : 0; 3257 DWORD dwOverallProgress = pContext->cExecutePackagesTotal ? (pContext->cExecutedPackages * 100 + pMessage->progress.dwPercentage) / (pContext->cExecutePackagesTotal) : 0;
3153 UserExperienceOnExecuteProgress(pContext->pUX, pContext->pExecutingPackage->sczId, pMessage->progress.dwPercentage, dwOverallProgress, &nResult); // ignore return value. 3258 UserExperienceOnExecuteProgress(pContext->pUX, pContext->wzExecutingPackageId, pMessage->progress.dwPercentage, dwOverallProgress, &nResult); // ignore return value.
3154 } 3259 }
3155 break; 3260 break;
3156 3261
3157 case GENERIC_EXECUTE_MESSAGE_ERROR: 3262 case GENERIC_EXECUTE_MESSAGE_ERROR:
3158 UserExperienceOnError(pContext->pUX, BOOTSTRAPPER_ERROR_TYPE_EXE_PACKAGE, pContext->pExecutingPackage->sczId, pMessage->error.dwErrorCode, pMessage->error.wzMessage, pMessage->dwUIHint, 0, NULL, &nResult); // ignore return value. 3263 UserExperienceOnError(pContext->pUX, BOOTSTRAPPER_ERROR_TYPE_EXE_PACKAGE, pContext->wzExecutingPackageId, pMessage->error.dwErrorCode, pMessage->error.wzMessage, pMessage->dwUIHint, 0, NULL, &nResult); // ignore return value.
3159 break; 3264 break;
3160 3265
3161 case GENERIC_EXECUTE_MESSAGE_NETFX_FILES_IN_USE: 3266 case GENERIC_EXECUTE_MESSAGE_NETFX_FILES_IN_USE:
3162 UserExperienceOnExecuteFilesInUse(pContext->pUX, pContext->pExecutingPackage->sczId, pMessage->filesInUse.cFiles, pMessage->filesInUse.rgwzFiles, BOOTSTRAPPER_FILES_IN_USE_TYPE_NETFX, &nResult); // ignore return value. 3267 UserExperienceOnExecuteFilesInUse(pContext->pUX, pContext->wzExecutingPackageId, pMessage->filesInUse.cFiles, pMessage->filesInUse.rgwzFiles, BOOTSTRAPPER_FILES_IN_USE_TYPE_NETFX, &nResult); // ignore return value.
3163 fPassthrough = TRUE; 3268 fPassthrough = TRUE;
3164 break; 3269 break;
3165 } 3270 }
@@ -3188,25 +3293,25 @@ static int MsiExecuteMessageHandler(
3188 case WIU_MSI_EXECUTE_MESSAGE_PROGRESS: 3293 case WIU_MSI_EXECUTE_MESSAGE_PROGRESS:
3189 { 3294 {
3190 DWORD dwOverallProgress = pContext->cExecutePackagesTotal ? (pContext->cExecutedPackages * 100 + pMessage->progress.dwPercentage) / (pContext->cExecutePackagesTotal) : 0; 3295 DWORD dwOverallProgress = pContext->cExecutePackagesTotal ? (pContext->cExecutedPackages * 100 + pMessage->progress.dwPercentage) / (pContext->cExecutePackagesTotal) : 0;
3191 UserExperienceOnExecuteProgress(pContext->pUX, pContext->pExecutingPackage->sczId, pMessage->progress.dwPercentage, dwOverallProgress, &nResult); // ignore return value. 3296 UserExperienceOnExecuteProgress(pContext->pUX, pContext->wzExecutingPackageId, pMessage->progress.dwPercentage, dwOverallProgress, &nResult); // ignore return value.
3192 } 3297 }
3193 break; 3298 break;
3194 3299
3195 case WIU_MSI_EXECUTE_MESSAGE_ERROR: 3300 case WIU_MSI_EXECUTE_MESSAGE_ERROR:
3196 nResult = pMessage->nResultRecommendation; 3301 nResult = pMessage->nResultRecommendation;
3197 UserExperienceOnError(pContext->pUX, BOOTSTRAPPER_ERROR_TYPE_WINDOWS_INSTALLER, pContext->pExecutingPackage->sczId, pMessage->error.dwErrorCode, pMessage->error.wzMessage, pMessage->dwUIHint, pMessage->cData, pMessage->rgwzData, &nResult); // ignore return value. 3302 UserExperienceOnError(pContext->pUX, BOOTSTRAPPER_ERROR_TYPE_WINDOWS_INSTALLER, pContext->wzExecutingPackageId, pMessage->error.dwErrorCode, pMessage->error.wzMessage, pMessage->dwUIHint, pMessage->cData, pMessage->rgwzData, &nResult); // ignore return value.
3198 break; 3303 break;
3199 3304
3200 case WIU_MSI_EXECUTE_MESSAGE_MSI_MESSAGE: 3305 case WIU_MSI_EXECUTE_MESSAGE_MSI_MESSAGE:
3201 nResult = pMessage->nResultRecommendation; 3306 nResult = pMessage->nResultRecommendation;
3202 UserExperienceOnExecuteMsiMessage(pContext->pUX, pContext->pExecutingPackage->sczId, pMessage->msiMessage.mt, pMessage->dwUIHint, pMessage->msiMessage.wzMessage, pMessage->cData, pMessage->rgwzData, &nResult); // ignore return value. 3307 UserExperienceOnExecuteMsiMessage(pContext->pUX, pContext->wzExecutingPackageId, pMessage->msiMessage.mt, pMessage->dwUIHint, pMessage->msiMessage.wzMessage, pMessage->cData, pMessage->rgwzData, &nResult); // ignore return value.
3203 break; 3308 break;
3204 3309
3205 case WIU_MSI_EXECUTE_MESSAGE_MSI_RM_FILES_IN_USE: 3310 case WIU_MSI_EXECUTE_MESSAGE_MSI_RM_FILES_IN_USE:
3206 fRestartManager = TRUE; 3311 fRestartManager = TRUE;
3207 __fallthrough; 3312 __fallthrough;
3208 case WIU_MSI_EXECUTE_MESSAGE_MSI_FILES_IN_USE: 3313 case WIU_MSI_EXECUTE_MESSAGE_MSI_FILES_IN_USE:
3209 UserExperienceOnExecuteFilesInUse(pContext->pUX, pContext->pExecutingPackage->sczId, pMessage->msiFilesInUse.cFiles, pMessage->msiFilesInUse.rgwzFiles, fRestartManager ? BOOTSTRAPPER_FILES_IN_USE_TYPE_MSI_RM : BOOTSTRAPPER_FILES_IN_USE_TYPE_MSI, &nResult); // ignore return value. 3314 UserExperienceOnExecuteFilesInUse(pContext->pUX, pContext->wzExecutingPackageId, pMessage->msiFilesInUse.cFiles, pMessage->msiFilesInUse.rgwzFiles, fRestartManager ? BOOTSTRAPPER_FILES_IN_USE_TYPE_MSI_RM : BOOTSTRAPPER_FILES_IN_USE_TYPE_MSI, &nResult); // ignore return value.
3210 fPassthrough = TRUE; 3315 fPassthrough = TRUE;
3211 break; 3316 break;
3212 } 3317 }
@@ -3246,7 +3351,8 @@ static HRESULT ReportOverallProgressTicks(
3246static HRESULT ExecutePackageComplete( 3351static HRESULT ExecutePackageComplete(
3247 __in BURN_USER_EXPERIENCE* pUX, 3352 __in BURN_USER_EXPERIENCE* pUX,
3248 __in BURN_VARIABLES* pVariables, 3353 __in BURN_VARIABLES* pVariables,
3249 __in BURN_PACKAGE* pPackage, 3354 __in LPCWSTR wzPackageId,
3355 __in BOOL fPackageVital,
3250 __in HRESULT hrOverall, 3356 __in HRESULT hrOverall,
3251 __in HRESULT hrExecute, 3357 __in HRESULT hrExecute,
3252 __in BOOL fRollback, 3358 __in BOOL fRollback,
@@ -3256,10 +3362,10 @@ static HRESULT ExecutePackageComplete(
3256 ) 3362 )
3257{ 3363{
3258 HRESULT hr = FAILED(hrOverall) ? hrOverall : hrExecute; // if the overall function failed use that otherwise use the execution result. 3364 HRESULT hr = FAILED(hrOverall) ? hrOverall : hrExecute; // if the overall function failed use that otherwise use the execution result.
3259 BOOTSTRAPPER_EXECUTEPACKAGECOMPLETE_ACTION executePackageCompleteAction = FAILED(hrOverall) || SUCCEEDED(hrExecute) || pPackage->fVital ? BOOTSTRAPPER_EXECUTEPACKAGECOMPLETE_ACTION_NONE : BOOTSTRAPPER_EXECUTEPACKAGECOMPLETE_ACTION_IGNORE; 3365 BOOTSTRAPPER_EXECUTEPACKAGECOMPLETE_ACTION executePackageCompleteAction = FAILED(hrOverall) || SUCCEEDED(hrExecute) || fPackageVital ? BOOTSTRAPPER_EXECUTEPACKAGECOMPLETE_ACTION_NONE : BOOTSTRAPPER_EXECUTEPACKAGECOMPLETE_ACTION_IGNORE;
3260 3366
3261 // Send package execute complete to BA. 3367 // Send package execute complete to BA.
3262 UserExperienceOnExecutePackageComplete(pUX, pPackage->sczId, hr, *pRestart, &executePackageCompleteAction); 3368 UserExperienceOnExecutePackageComplete(pUX, wzPackageId, hr, *pRestart, &executePackageCompleteAction);
3263 if (BOOTSTRAPPER_EXECUTEPACKAGECOMPLETE_ACTION_RESTART == executePackageCompleteAction) 3369 if (BOOTSTRAPPER_EXECUTEPACKAGECOMPLETE_ACTION_RESTART == executePackageCompleteAction)
3264 { 3370 {
3265 *pRestart = BOOTSTRAPPER_APPLY_RESTART_INITIATED; 3371 *pRestart = BOOTSTRAPPER_APPLY_RESTART_INITIATED;
@@ -3271,23 +3377,23 @@ static HRESULT ExecutePackageComplete(
3271 if (BOOTSTRAPPER_APPLY_RESTART_INITIATED == *pRestart) 3377 if (BOOTSTRAPPER_APPLY_RESTART_INITIATED == *pRestart)
3272 { 3378 {
3273 // Best effort to set the forced restart package variable. 3379 // Best effort to set the forced restart package variable.
3274 VariableSetString(pVariables, BURN_BUNDLE_FORCED_RESTART_PACKAGE, pPackage->sczId, TRUE, FALSE); 3380 VariableSetString(pVariables, BURN_BUNDLE_FORCED_RESTART_PACKAGE, wzPackageId, TRUE, FALSE);
3275 } 3381 }
3276 3382
3277 // If we're retrying, leave a message in the log file and say everything is okay. 3383 // If we're retrying, leave a message in the log file and say everything is okay.
3278 if (*pfRetry) 3384 if (*pfRetry)
3279 { 3385 {
3280 LogId(REPORT_STANDARD, MSG_APPLY_RETRYING_PACKAGE, pPackage->sczId, hrExecute); 3386 LogId(REPORT_STANDARD, MSG_APPLY_RETRYING_PACKAGE, wzPackageId, hrExecute);
3281 hr = S_OK; 3387 hr = S_OK;
3282 } 3388 }
3283 else if (SUCCEEDED(hrOverall) && FAILED(hrExecute) && BOOTSTRAPPER_EXECUTEPACKAGECOMPLETE_ACTION_IGNORE == executePackageCompleteAction && !pPackage->fVital) // If we *only* failed to execute and the BA ignored this *not-vital* package, say everything is okay. 3389 else if (SUCCEEDED(hrOverall) && FAILED(hrExecute) && BOOTSTRAPPER_EXECUTEPACKAGECOMPLETE_ACTION_IGNORE == executePackageCompleteAction && !fPackageVital) // If we *only* failed to execute and the BA ignored this *not-vital* package, say everything is okay.
3284 { 3390 {
3285 LogId(REPORT_STANDARD, MSG_APPLY_CONTINUING_NONVITAL_PACKAGE, pPackage->sczId, hrExecute); 3391 LogId(REPORT_STANDARD, MSG_APPLY_CONTINUING_NONVITAL_PACKAGE, wzPackageId, hrExecute);
3286 hr = S_OK; 3392 hr = S_OK;
3287 } 3393 }
3288 else 3394 else
3289 { 3395 {
3290 LogId(REPORT_STANDARD, MSG_APPLY_COMPLETED_PACKAGE, LoggingRollbackOrExecute(fRollback), pPackage->sczId, hr, LoggingRestartToString(*pRestart)); 3396 LogId(REPORT_STANDARD, MSG_APPLY_COMPLETED_PACKAGE, LoggingRollbackOrExecute(fRollback), wzPackageId, hr, LoggingRestartToString(*pRestart));
3291 } 3397 }
3292 3398
3293 return hr; 3399 return hr;