diff options
Diffstat (limited to 'src/burn/engine/apply.cpp')
-rw-r--r-- | src/burn/engine/apply.cpp | 162 |
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 | ); |
281 | static 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 | ); | ||
289 | static HRESULT CleanCompatiblePackage( | ||
290 | __in BURN_CACHE* pCache, | ||
291 | __in HANDLE hElevatedPipe, | ||
292 | __in BURN_PACKAGE* pPackage | ||
293 | ); | ||
281 | static HRESULT CleanPackage( | 294 | static 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( | |||
300 | static HRESULT ExecutePackageComplete( | 313 | static 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( | |||
2550 | LExit: | 2582 | LExit: |
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 | ||
3145 | static 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 | |||
3188 | LExit: | ||
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 | |||
3198 | static 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 | |||
3113 | static HRESULT CleanPackage( | 3218 | static 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( | |||
3246 | static HRESULT ExecutePackageComplete( | 3351 | static 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; |