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/elevation.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/elevation.cpp')
| -rw-r--r-- | src/burn/engine/elevation.cpp | 40 |
1 files changed, 30 insertions, 10 deletions
diff --git a/src/burn/engine/elevation.cpp b/src/burn/engine/elevation.cpp index 75679acd..86b65cf9 100644 --- a/src/burn/engine/elevation.cpp +++ b/src/burn/engine/elevation.cpp | |||
| @@ -1346,7 +1346,8 @@ LExit: | |||
| 1346 | 1346 | ||
| 1347 | extern "C" HRESULT ElevationExecutePackageDependencyAction( | 1347 | extern "C" HRESULT ElevationExecutePackageDependencyAction( |
| 1348 | __in HANDLE hPipe, | 1348 | __in HANDLE hPipe, |
| 1349 | __in BURN_EXECUTE_ACTION* pExecuteAction | 1349 | __in BURN_EXECUTE_ACTION* pExecuteAction, |
| 1350 | __in BOOL fRollback | ||
| 1350 | ) | 1351 | ) |
| 1351 | { | 1352 | { |
| 1352 | HRESULT hr = S_OK; | 1353 | HRESULT hr = S_OK; |
| @@ -1359,11 +1360,20 @@ extern "C" HRESULT ElevationExecutePackageDependencyAction( | |||
| 1359 | hr = BuffWriteString(&pbData, &cbData, pExecuteAction->packageDependency.pPackage->sczId); | 1360 | hr = BuffWriteString(&pbData, &cbData, pExecuteAction->packageDependency.pPackage->sczId); |
| 1360 | ExitOnFailure(hr, "Failed to write package id to message buffer."); | 1361 | ExitOnFailure(hr, "Failed to write package id to message buffer."); |
| 1361 | 1362 | ||
| 1363 | hr = BuffWriteNumber(&pbData, &cbData, (DWORD)fRollback); | ||
| 1364 | ExitOnFailure(hr, "Failed to write rollback flag to message buffer."); | ||
| 1365 | |||
| 1362 | hr = BuffWriteString(&pbData, &cbData, pExecuteAction->packageDependency.sczBundleProviderKey); | 1366 | hr = BuffWriteString(&pbData, &cbData, pExecuteAction->packageDependency.sczBundleProviderKey); |
| 1363 | ExitOnFailure(hr, "Failed to write bundle dependency key to message buffer."); | 1367 | ExitOnFailure(hr, "Failed to write bundle dependency key to message buffer."); |
| 1364 | 1368 | ||
| 1365 | hr = BuffWriteNumber(&pbData, &cbData, pExecuteAction->packageDependency.action); | 1369 | // Dependent actions. |
| 1366 | ExitOnFailure(hr, "Failed to write action to message buffer."); | 1370 | for (DWORD i = 0; i < pExecuteAction->packageProvider.pPackage->cDependencyProviders; ++i) |
| 1371 | { | ||
| 1372 | BURN_DEPENDENCY_PROVIDER* pProvider = pExecuteAction->packageProvider.pPackage->rgDependencyProviders + i; | ||
| 1373 | BURN_DEPENDENCY_ACTION* pAction = fRollback ? &pProvider->dependentRollback : &pProvider->dependentExecute; | ||
| 1374 | hr = BuffWriteNumber(&pbData, &cbData, (DWORD)*pAction); | ||
| 1375 | ExitOnFailure(hr, "Failed to write dependent action to message buffer."); | ||
| 1376 | } | ||
| 1367 | 1377 | ||
| 1368 | // Send the message. | 1378 | // Send the message. |
| 1369 | hr = PipeSendMessage(hPipe, BURN_ELEVATION_MESSAGE_TYPE_EXECUTE_PACKAGE_DEPENDENCY, pbData, cbData, NULL, NULL, &dwResult); | 1379 | hr = PipeSendMessage(hPipe, BURN_ELEVATION_MESSAGE_TYPE_EXECUTE_PACKAGE_DEPENDENCY, pbData, cbData, NULL, NULL, &dwResult); |
| @@ -3260,6 +3270,7 @@ static HRESULT OnExecutePackageDependencyAction( | |||
| 3260 | HRESULT hr = S_OK; | 3270 | HRESULT hr = S_OK; |
| 3261 | SIZE_T iData = 0; | 3271 | SIZE_T iData = 0; |
| 3262 | LPWSTR sczPackage = NULL; | 3272 | LPWSTR sczPackage = NULL; |
| 3273 | BOOL fRollback = FALSE; | ||
| 3263 | BURN_EXECUTE_ACTION executeAction = { }; | 3274 | BURN_EXECUTE_ACTION executeAction = { }; |
| 3264 | 3275 | ||
| 3265 | executeAction.type = BURN_EXECUTE_ACTION_TYPE_PACKAGE_DEPENDENCY; | 3276 | executeAction.type = BURN_EXECUTE_ACTION_TYPE_PACKAGE_DEPENDENCY; |
| @@ -3268,12 +3279,6 @@ static HRESULT OnExecutePackageDependencyAction( | |||
| 3268 | hr = BuffReadString(pbData, cbData, &iData, &sczPackage); | 3279 | hr = BuffReadString(pbData, cbData, &iData, &sczPackage); |
| 3269 | ExitOnFailure(hr, "Failed to read package id from message buffer."); | 3280 | ExitOnFailure(hr, "Failed to read package id from message buffer."); |
| 3270 | 3281 | ||
| 3271 | hr = BuffReadString(pbData, cbData, &iData, &executeAction.packageDependency.sczBundleProviderKey); | ||
| 3272 | ExitOnFailure(hr, "Failed to read bundle dependency key from message buffer."); | ||
| 3273 | |||
| 3274 | hr = BuffReadNumber(pbData, cbData, &iData, reinterpret_cast<DWORD*>(&executeAction.packageDependency.action)); | ||
| 3275 | ExitOnFailure(hr, "Failed to read action."); | ||
| 3276 | |||
| 3277 | // Find the package again. | 3282 | // Find the package again. |
| 3278 | hr = PackageFindById(pPackages, sczPackage, &executeAction.packageDependency.pPackage); | 3283 | hr = PackageFindById(pPackages, sczPackage, &executeAction.packageDependency.pPackage); |
| 3279 | if (E_NOTFOUND == hr) | 3284 | if (E_NOTFOUND == hr) |
| @@ -3282,8 +3287,23 @@ static HRESULT OnExecutePackageDependencyAction( | |||
| 3282 | } | 3287 | } |
| 3283 | ExitOnFailure(hr, "Failed to find package: %ls", sczPackage); | 3288 | ExitOnFailure(hr, "Failed to find package: %ls", sczPackage); |
| 3284 | 3289 | ||
| 3290 | hr = BuffReadNumber(pbData, cbData, &iData, (DWORD*)&fRollback); | ||
| 3291 | ExitOnFailure(hr, "Failed to read rollback flag."); | ||
| 3292 | |||
| 3293 | hr = BuffReadString(pbData, cbData, &iData, &executeAction.packageDependency.sczBundleProviderKey); | ||
| 3294 | ExitOnFailure(hr, "Failed to read bundle dependency key from message buffer."); | ||
| 3295 | |||
| 3296 | // Read dependent actions. | ||
| 3297 | for (DWORD i = 0; i < executeAction.packageProvider.pPackage->cDependencyProviders; ++i) | ||
| 3298 | { | ||
| 3299 | BURN_DEPENDENCY_PROVIDER* pProvider = executeAction.packageProvider.pPackage->rgDependencyProviders + i; | ||
| 3300 | BURN_DEPENDENCY_ACTION* pAction = fRollback ? &pProvider->dependentRollback : &pProvider->dependentExecute; | ||
| 3301 | hr = BuffReadNumber(pbData, cbData, &iData, (DWORD*)pAction); | ||
| 3302 | ExitOnFailure(hr, "Failed to read dependent action."); | ||
| 3303 | } | ||
| 3304 | |||
| 3285 | // Execute the package dependency action. | 3305 | // Execute the package dependency action. |
| 3286 | hr = DependencyExecutePackageDependencyAction(TRUE, &executeAction); | 3306 | hr = DependencyExecutePackageDependencyAction(TRUE, &executeAction, fRollback); |
| 3287 | ExitOnFailure(hr, "Failed to execute package dependency action."); | 3307 | ExitOnFailure(hr, "Failed to execute package dependency action."); |
| 3288 | 3308 | ||
| 3289 | LExit: | 3309 | LExit: |
