summaryrefslogtreecommitdiff
path: root/src/burn/engine/apply.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/burn/engine/apply.cpp')
-rw-r--r--src/burn/engine/apply.cpp22
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(
258static HRESULT ExecuteDependencyAction( 258static 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 );
263static HRESULT ExecuteMsiBeginTransaction( 264static 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:
2915static HRESULT ExecuteDependencyAction( 2916static 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 {