diff options
| author | Sean Hall <r.sean.hall@gmail.com> | 2022-01-14 21:37:24 -0600 |
|---|---|---|
| committer | Sean Hall <r.sean.hall@gmail.com> | 2022-01-16 10:30:28 -0600 |
| commit | da1d1376953ef1c9afb32d5eee02b785e52e372e (patch) | |
| tree | 0df8550960259d7b13f5cd90f04d21b5576f16b7 /src/burn/engine/apply.cpp | |
| parent | abe316b80fae80eba54b0b79e76b6362105fa098 (diff) | |
| download | wix-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.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; |
