diff options
Diffstat (limited to 'src/engine/apply.cpp')
| -rw-r--r-- | src/engine/apply.cpp | 40 |
1 files changed, 20 insertions, 20 deletions
diff --git a/src/engine/apply.cpp b/src/engine/apply.cpp index 3fbab61a..77080c76 100644 --- a/src/engine/apply.cpp +++ b/src/engine/apply.cpp | |||
| @@ -821,16 +821,16 @@ extern "C" HRESULT ApplyExecute( | |||
| 821 | break; | 821 | break; |
| 822 | } | 822 | } |
| 823 | 823 | ||
| 824 | // If inside a MSI transaction, roll it back. | ||
| 825 | if (pCheckpoint && pCheckpoint->pActiveRollbackBoundary && pCheckpoint->pActiveRollbackBoundary->fActiveTransaction) | ||
| 826 | { | ||
| 827 | hrRollback = ExecuteMsiRollbackTransaction(pEngineState, pCheckpoint->pActiveRollbackBoundary, &context); | ||
| 828 | IgnoreRollbackError(hrRollback, "Failed rolling back transaction"); | ||
| 829 | } | ||
| 830 | |||
| 831 | // The action failed, roll back to previous rollback boundary. | ||
| 832 | if (pCheckpoint) | 824 | if (pCheckpoint) |
| 833 | { | 825 | { |
| 826 | // If inside a MSI transaction, roll it back. | ||
| 827 | if (pCheckpoint->pActiveRollbackBoundary && pCheckpoint->pActiveRollbackBoundary->fActiveTransaction) | ||
| 828 | { | ||
| 829 | hrRollback = ExecuteMsiRollbackTransaction(pEngineState, pCheckpoint->pActiveRollbackBoundary, &context); | ||
| 830 | IgnoreRollbackError(hrRollback, "Failed rolling back transaction"); | ||
| 831 | } | ||
| 832 | |||
| 833 | // The action failed, roll back to previous rollback boundary. | ||
| 834 | hrRollback = DoRollbackActions(pEngineState, &context, pCheckpoint->dwId, pRestart); | 834 | hrRollback = DoRollbackActions(pEngineState, &context, pCheckpoint->dwId, pRestart); |
| 835 | IgnoreRollbackError(hrRollback, "Failed rollback actions"); | 835 | IgnoreRollbackError(hrRollback, "Failed rollback actions"); |
| 836 | } | 836 | } |
| @@ -2316,12 +2316,12 @@ static HRESULT ExecuteMsiBeginTransaction( | |||
| 2316 | 2316 | ||
| 2317 | if (pEngineState->plan.fPerMachine) | 2317 | if (pEngineState->plan.fPerMachine) |
| 2318 | { | 2318 | { |
| 2319 | hr = ElevationMsiBeginTransaction(pEngineState->companionConnection.hPipe, pRollbackBoundary->sczId); | 2319 | hr = ElevationMsiBeginTransaction(pEngineState->companionConnection.hPipe, pRollbackBoundary); |
| 2320 | ExitOnFailure(hr, "Failed to begin an elevated MSI transaction."); | 2320 | ExitOnFailure(hr, "Failed to begin an elevated MSI transaction."); |
| 2321 | } | 2321 | } |
| 2322 | else | 2322 | else |
| 2323 | { | 2323 | { |
| 2324 | hr = MsiEngineBeginTransaction(pRollbackBoundary->sczId); | 2324 | hr = MsiEngineBeginTransaction(pRollbackBoundary); |
| 2325 | } | 2325 | } |
| 2326 | 2326 | ||
| 2327 | if (SUCCEEDED(hr)) | 2327 | if (SUCCEEDED(hr)) |
| @@ -2347,25 +2347,25 @@ static HRESULT ExecuteMsiCommitTransaction( | |||
| 2347 | ) | 2347 | ) |
| 2348 | { | 2348 | { |
| 2349 | HRESULT hr = S_OK; | 2349 | HRESULT hr = S_OK; |
| 2350 | BOOL fBeginCalled = FALSE; | 2350 | BOOL fCommitBeginCalled = FALSE; |
| 2351 | 2351 | ||
| 2352 | if (!pRollbackBoundary->fActiveTransaction) | 2352 | if (!pRollbackBoundary->fActiveTransaction) |
| 2353 | { | 2353 | { |
| 2354 | ExitFunction1(hr = E_INVALIDSTATE); | 2354 | ExitFunction1(hr = E_INVALIDSTATE); |
| 2355 | } | 2355 | } |
| 2356 | 2356 | ||
| 2357 | fBeginCalled = TRUE; | 2357 | fCommitBeginCalled = TRUE; |
| 2358 | hr = UserExperienceOnCommitMsiTransactionBegin(&pEngineState->userExperience, pRollbackBoundary->sczId); | 2358 | hr = UserExperienceOnCommitMsiTransactionBegin(&pEngineState->userExperience, pRollbackBoundary->sczId); |
| 2359 | ExitOnRootFailure(hr, "BA aborted execute commit MSI transaction."); | 2359 | ExitOnRootFailure(hr, "BA aborted execute commit MSI transaction."); |
| 2360 | 2360 | ||
| 2361 | if (pEngineState->plan.fPerMachine) | 2361 | if (pEngineState->plan.fPerMachine) |
| 2362 | { | 2362 | { |
| 2363 | hr = ElevationMsiCommitTransaction(pEngineState->companionConnection.hPipe, pRollbackBoundary->sczId); | 2363 | hr = ElevationMsiCommitTransaction(pEngineState->companionConnection.hPipe, pRollbackBoundary); |
| 2364 | ExitOnFailure(hr, "Failed to commit an elevated MSI transaction."); | 2364 | ExitOnFailure(hr, "Failed to commit an elevated MSI transaction."); |
| 2365 | } | 2365 | } |
| 2366 | else | 2366 | else |
| 2367 | { | 2367 | { |
| 2368 | hr = MsiEngineCommitTransaction(pRollbackBoundary->sczId); | 2368 | hr = MsiEngineCommitTransaction(pRollbackBoundary); |
| 2369 | } | 2369 | } |
| 2370 | 2370 | ||
| 2371 | if (SUCCEEDED(hr)) | 2371 | if (SUCCEEDED(hr)) |
| @@ -2376,7 +2376,7 @@ static HRESULT ExecuteMsiCommitTransaction( | |||
| 2376 | } | 2376 | } |
| 2377 | 2377 | ||
| 2378 | LExit: | 2378 | LExit: |
| 2379 | if (fBeginCalled) | 2379 | if (fCommitBeginCalled) |
| 2380 | { | 2380 | { |
| 2381 | UserExperienceOnCommitMsiTransactionComplete(&pEngineState->userExperience, pRollbackBoundary->sczId, hr); | 2381 | UserExperienceOnCommitMsiTransactionComplete(&pEngineState->userExperience, pRollbackBoundary->sczId, hr); |
| 2382 | } | 2382 | } |
| @@ -2391,24 +2391,24 @@ static HRESULT ExecuteMsiRollbackTransaction( | |||
| 2391 | ) | 2391 | ) |
| 2392 | { | 2392 | { |
| 2393 | HRESULT hr = S_OK; | 2393 | HRESULT hr = S_OK; |
| 2394 | BOOL fBeginCalled = FALSE; | 2394 | BOOL fRollbackBeginCalled = FALSE; |
| 2395 | 2395 | ||
| 2396 | if (!pRollbackBoundary->fActiveTransaction) | 2396 | if (!pRollbackBoundary->fActiveTransaction) |
| 2397 | { | 2397 | { |
| 2398 | ExitFunction(); | 2398 | ExitFunction(); |
| 2399 | } | 2399 | } |
| 2400 | 2400 | ||
| 2401 | fBeginCalled = TRUE; | 2401 | fRollbackBeginCalled = TRUE; |
| 2402 | UserExperienceOnRollbackMsiTransactionBegin(&pEngineState->userExperience, pRollbackBoundary->sczId); | 2402 | UserExperienceOnRollbackMsiTransactionBegin(&pEngineState->userExperience, pRollbackBoundary->sczId); |
| 2403 | 2403 | ||
| 2404 | if (pEngineState->plan.fPerMachine) | 2404 | if (pEngineState->plan.fPerMachine) |
| 2405 | { | 2405 | { |
| 2406 | hr = ElevationMsiRollbackTransaction(pEngineState->companionConnection.hPipe, pRollbackBoundary->sczId); | 2406 | hr = ElevationMsiRollbackTransaction(pEngineState->companionConnection.hPipe, pRollbackBoundary); |
| 2407 | ExitOnFailure(hr, "Failed to rollback an elevated MSI transaction."); | 2407 | ExitOnFailure(hr, "Failed to rollback an elevated MSI transaction."); |
| 2408 | } | 2408 | } |
| 2409 | else | 2409 | else |
| 2410 | { | 2410 | { |
| 2411 | hr = MsiEngineRollbackTransaction(pRollbackBoundary->sczId); | 2411 | hr = MsiEngineRollbackTransaction(pRollbackBoundary); |
| 2412 | } | 2412 | } |
| 2413 | 2413 | ||
| 2414 | LExit: | 2414 | LExit: |
| @@ -2416,7 +2416,7 @@ LExit: | |||
| 2416 | 2416 | ||
| 2417 | ResetTransactionRegistrationState(pEngineState, FALSE); | 2417 | ResetTransactionRegistrationState(pEngineState, FALSE); |
| 2418 | 2418 | ||
| 2419 | if (fBeginCalled) | 2419 | if (fRollbackBeginCalled) |
| 2420 | { | 2420 | { |
| 2421 | UserExperienceOnRollbackMsiTransactionComplete(&pEngineState->userExperience, pRollbackBoundary->sczId, hr); | 2421 | UserExperienceOnRollbackMsiTransactionComplete(&pEngineState->userExperience, pRollbackBoundary->sczId, hr); |
| 2422 | } | 2422 | } |
