diff options
| author | Sean Hall <r.sean.hall@gmail.com> | 2022-01-31 16:23:31 -0600 |
|---|---|---|
| committer | Sean Hall <r.sean.hall@gmail.com> | 2022-02-01 23:36:23 -0600 |
| commit | c95c41151d595f4630c4c2f4aeb4c7f9a97af5c7 (patch) | |
| tree | 3b2675c7bd9ffa249085397a3953381df8a89281 /src/burn/engine/apply.cpp | |
| parent | eae94502fe8e7ca601161360a7d31e93edc88763 (diff) | |
| download | wix-c95c41151d595f4630c4c2f4aeb4c7f9a97af5c7.tar.gz wix-c95c41151d595f4630c4c2f4aeb4c7f9a97af5c7.tar.bz2 wix-c95c41151d595f4630c4c2f4aeb4c7f9a97af5c7.zip | |
Plan each dependency provider dependent individually.
Refactoring for #6510
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 | { |
