diff options
Diffstat (limited to 'src/burn/engine/apply.cpp')
-rw-r--r-- | src/burn/engine/apply.cpp | 22 |
1 files changed, 14 insertions, 8 deletions
diff --git a/src/burn/engine/apply.cpp b/src/burn/engine/apply.cpp index 2168cba6..5cc63d02 100644 --- a/src/burn/engine/apply.cpp +++ b/src/burn/engine/apply.cpp | |||
@@ -258,7 +258,8 @@ static HRESULT ExecutePackageProviderAction( | |||
258 | static HRESULT ExecuteDependencyAction( | 258 | static HRESULT ExecuteDependencyAction( |
259 | __in BURN_ENGINE_STATE* pEngineState, | 259 | __in BURN_ENGINE_STATE* pEngineState, |
260 | __in BURN_EXECUTE_ACTION* pAction, | 260 | __in BURN_EXECUTE_ACTION* pAction, |
261 | __in BURN_EXECUTE_CONTEXT* pContext | 261 | __in BURN_EXECUTE_CONTEXT* pContext, |
262 | __in BOOL fRollback | ||
262 | ); | 263 | ); |
263 | static HRESULT ExecuteMsiBeginTransaction( | 264 | static HRESULT ExecuteMsiBeginTransaction( |
264 | __in BURN_ENGINE_STATE* pEngineState, | 265 | __in BURN_ENGINE_STATE* pEngineState, |
@@ -2357,7 +2358,7 @@ static HRESULT DoExecuteAction( | |||
2357 | break; | 2358 | break; |
2358 | 2359 | ||
2359 | case BURN_EXECUTE_ACTION_TYPE_PACKAGE_DEPENDENCY: | 2360 | case BURN_EXECUTE_ACTION_TYPE_PACKAGE_DEPENDENCY: |
2360 | hr = ExecuteDependencyAction(pEngineState, pExecuteAction, pContext); | 2361 | hr = ExecuteDependencyAction(pEngineState, pExecuteAction, pContext, FALSE); |
2361 | ExitOnFailure(hr, "Failed to execute dependency action."); | 2362 | ExitOnFailure(hr, "Failed to execute dependency action."); |
2362 | break; | 2363 | break; |
2363 | 2364 | ||
@@ -2480,7 +2481,7 @@ static HRESULT DoRollbackActions( | |||
2480 | break; | 2481 | break; |
2481 | 2482 | ||
2482 | case BURN_EXECUTE_ACTION_TYPE_PACKAGE_DEPENDENCY: | 2483 | case BURN_EXECUTE_ACTION_TYPE_PACKAGE_DEPENDENCY: |
2483 | hr = ExecuteDependencyAction(pEngineState, pRollbackAction, pContext); | 2484 | hr = ExecuteDependencyAction(pEngineState, pRollbackAction, pContext, TRUE); |
2484 | IgnoreRollbackError(hr, "Failed to rollback dependency action."); | 2485 | IgnoreRollbackError(hr, "Failed to rollback dependency action."); |
2485 | break; | 2486 | break; |
2486 | 2487 | ||
@@ -2915,26 +2916,31 @@ LExit: | |||
2915 | static HRESULT ExecuteDependencyAction( | 2916 | static HRESULT ExecuteDependencyAction( |
2916 | __in BURN_ENGINE_STATE* pEngineState, | 2917 | __in BURN_ENGINE_STATE* pEngineState, |
2917 | __in BURN_EXECUTE_ACTION* pAction, | 2918 | __in BURN_EXECUTE_ACTION* pAction, |
2918 | __in BURN_EXECUTE_CONTEXT* /*pContext*/ | 2919 | __in BURN_EXECUTE_CONTEXT* pContext, |
2920 | __in BOOL fRollback | ||
2919 | ) | 2921 | ) |
2920 | { | 2922 | { |
2921 | HRESULT hr = S_OK; | 2923 | HRESULT hr = S_OK; |
2922 | BURN_PACKAGE* pPackage = pAction->packageDependency.pPackage; | 2924 | BURN_PACKAGE* pPackage = pAction->packageDependency.pPackage; |
2923 | 2925 | ||
2926 | Assert(pContext->fRollback == fRollback); | ||
2927 | UNREFERENCED_PARAMETER(pContext); | ||
2928 | |||
2924 | if (pPackage->fPerMachine) | 2929 | if (pPackage->fPerMachine) |
2925 | { | 2930 | { |
2926 | hr = ElevationExecutePackageDependencyAction(pEngineState->companionConnection.hPipe, pAction); | 2931 | hr = ElevationExecutePackageDependencyAction(pEngineState->companionConnection.hPipe, pAction, fRollback); |
2927 | ExitOnFailure(hr, "Failed to register the dependency on per-machine package."); | 2932 | ExitOnFailure(hr, "Failed to register the dependency on per-machine package."); |
2928 | } | 2933 | } |
2929 | else | 2934 | else |
2930 | { | 2935 | { |
2931 | hr = DependencyExecutePackageDependencyAction(FALSE, pAction); | 2936 | hr = DependencyExecutePackageDependencyAction(FALSE, pAction, fRollback); |
2932 | ExitOnFailure(hr, "Failed to register the dependency on per-user package."); | 2937 | ExitOnFailure(hr, "Failed to register the dependency on per-user package."); |
2933 | } | 2938 | } |
2934 | 2939 | ||
2935 | if (pPackage->fCanAffectRegistration) | 2940 | if (pPackage->fCanAffectRegistration) |
2936 | { | 2941 | { |
2937 | if (BURN_DEPENDENCY_ACTION_REGISTER == pAction->packageDependency.action) | 2942 | BURN_DEPENDENCY_ACTION dependencyAction = fRollback ? pPackage->dependencyRollback : pPackage->dependencyExecute; |
2943 | if (BURN_DEPENDENCY_ACTION_REGISTER == dependencyAction) | ||
2938 | { | 2944 | { |
2939 | if (BURN_PACKAGE_REGISTRATION_STATE_IGNORED == pPackage->cacheRegistrationState) | 2945 | if (BURN_PACKAGE_REGISTRATION_STATE_IGNORED == pPackage->cacheRegistrationState) |
2940 | { | 2946 | { |
@@ -2958,7 +2964,7 @@ static HRESULT ExecuteDependencyAction( | |||
2958 | pPackage->installRegistrationState = BURN_PACKAGE_REGISTRATION_STATE_PRESENT; | 2964 | pPackage->installRegistrationState = BURN_PACKAGE_REGISTRATION_STATE_PRESENT; |
2959 | } | 2965 | } |
2960 | } | 2966 | } |
2961 | else if (BURN_DEPENDENCY_ACTION_UNREGISTER == pAction->packageDependency.action) | 2967 | else if (BURN_DEPENDENCY_ACTION_UNREGISTER == dependencyAction) |
2962 | { | 2968 | { |
2963 | if (BURN_PACKAGE_REGISTRATION_STATE_PRESENT == pPackage->cacheRegistrationState) | 2969 | if (BURN_PACKAGE_REGISTRATION_STATE_PRESENT == pPackage->cacheRegistrationState) |
2964 | { | 2970 | { |