diff options
| author | Sean Hall <r.sean.hall@gmail.com> | 2022-03-13 23:47:55 -0500 |
|---|---|---|
| committer | Sean Hall <r.sean.hall@gmail.com> | 2022-03-14 14:53:29 -0500 |
| commit | 78125b7c4bd59468275d65b63860bdb68b1bc6f1 (patch) | |
| tree | 05c73a4e9ac79172afd42ba817c69d37571c3dc4 /src | |
| parent | 4cd1c4e06145434ca940ac828772dc47b9d9738e (diff) | |
| download | wix-78125b7c4bd59468275d65b63860bdb68b1bc6f1.tar.gz wix-78125b7c4bd59468275d65b63860bdb68b1bc6f1.tar.bz2 wix-78125b7c4bd59468275d65b63860bdb68b1bc6f1.zip | |
Log rest of plan and add testing of registration actions to PlanTest.
Diffstat (limited to 'src')
| -rw-r--r-- | src/burn/engine/logging.cpp | 19 | ||||
| -rw-r--r-- | src/burn/engine/logging.h | 4 | ||||
| -rw-r--r-- | src/burn/engine/plan.cpp | 46 | ||||
| -rw-r--r-- | src/burn/test/BurnUnitTest/PlanTest.cpp | 372 | ||||
| -rw-r--r-- | src/burn/test/BurnUnitTest/TestData/PlanTest/Slipstream_BundleA_modified_manifest.xml | 2 |
5 files changed, 440 insertions, 3 deletions
diff --git a/src/burn/engine/logging.cpp b/src/burn/engine/logging.cpp index 2aa1bada..de332f84 100644 --- a/src/burn/engine/logging.cpp +++ b/src/burn/engine/logging.cpp | |||
| @@ -740,6 +740,25 @@ extern "C" LPCSTR LoggingPlanRelationTypeToString( | |||
| 740 | } | 740 | } |
| 741 | } | 741 | } |
| 742 | 742 | ||
| 743 | extern "C" LPCSTR LoggingRegistrationOptionsToString( | ||
| 744 | __in DWORD dwRegistrationOptions | ||
| 745 | ) | ||
| 746 | { | ||
| 747 | switch (dwRegistrationOptions) | ||
| 748 | { | ||
| 749 | case BURN_REGISTRATION_ACTION_OPERATIONS_NONE: | ||
| 750 | return "None"; | ||
| 751 | case BURN_REGISTRATION_ACTION_OPERATIONS_CACHE_BUNDLE: | ||
| 752 | return "CacheBundle"; | ||
| 753 | case BURN_REGISTRATION_ACTION_OPERATIONS_WRITE_PROVIDER_KEY: | ||
| 754 | return "WriteProviderKey"; | ||
| 755 | case BURN_REGISTRATION_ACTION_OPERATIONS_CACHE_BUNDLE + BURN_REGISTRATION_ACTION_OPERATIONS_WRITE_PROVIDER_KEY: | ||
| 756 | return "CacheBundle, WriteProviderKey"; | ||
| 757 | default: | ||
| 758 | return "Invalid"; | ||
| 759 | } | ||
| 760 | } | ||
| 761 | |||
| 743 | extern "C" LPCSTR LoggingRelationTypeToString( | 762 | extern "C" LPCSTR LoggingRelationTypeToString( |
| 744 | __in BOOTSTRAPPER_RELATION_TYPE type | 763 | __in BOOTSTRAPPER_RELATION_TYPE type |
| 745 | ) | 764 | ) |
diff --git a/src/burn/engine/logging.h b/src/burn/engine/logging.h index 15eb298a..857394b9 100644 --- a/src/burn/engine/logging.h +++ b/src/burn/engine/logging.h | |||
| @@ -158,6 +158,10 @@ LPCSTR LoggingPlanRelationTypeToString( | |||
| 158 | __in BOOTSTRAPPER_RELATED_BUNDLE_PLAN_TYPE type | 158 | __in BOOTSTRAPPER_RELATED_BUNDLE_PLAN_TYPE type |
| 159 | ); | 159 | ); |
| 160 | 160 | ||
| 161 | LPCSTR LoggingRegistrationOptionsToString( | ||
| 162 | __in DWORD dwRegistrationOptions | ||
| 163 | ); | ||
| 164 | |||
| 161 | LPCSTR LoggingRelationTypeToString( | 165 | LPCSTR LoggingRelationTypeToString( |
| 162 | __in BOOTSTRAPPER_RELATION_TYPE type | 166 | __in BOOTSTRAPPER_RELATION_TYPE type |
| 163 | ); | 167 | ); |
diff --git a/src/burn/engine/plan.cpp b/src/burn/engine/plan.cpp index d3cc60f1..dcb919c7 100644 --- a/src/burn/engine/plan.cpp +++ b/src/burn/engine/plan.cpp | |||
| @@ -2786,6 +2786,36 @@ static BOOL ForceCache( | |||
| 2786 | } | 2786 | } |
| 2787 | } | 2787 | } |
| 2788 | 2788 | ||
| 2789 | static void DependentRegistrationActionLog( | ||
| 2790 | __in DWORD iAction, | ||
| 2791 | __in BURN_DEPENDENT_REGISTRATION_ACTION* pAction, | ||
| 2792 | __in BOOL fRollback | ||
| 2793 | ) | ||
| 2794 | { | ||
| 2795 | LPCWSTR wzBase = fRollback ? L" Rollback dependent registration" : L" Dependent registration"; | ||
| 2796 | LPCWSTR wzType = NULL; | ||
| 2797 | |||
| 2798 | switch (pAction->type) | ||
| 2799 | { | ||
| 2800 | case BURN_DEPENDENT_REGISTRATION_ACTION_TYPE_REGISTER: | ||
| 2801 | wzType = L"REGISTER"; | ||
| 2802 | break; | ||
| 2803 | |||
| 2804 | case BURN_DEPENDENT_REGISTRATION_ACTION_TYPE_UNREGISTER: | ||
| 2805 | wzType = L"UNREGISTER"; | ||
| 2806 | break; | ||
| 2807 | |||
| 2808 | default: | ||
| 2809 | AssertSz(FALSE, "Unknown cache action type."); | ||
| 2810 | break; | ||
| 2811 | } | ||
| 2812 | |||
| 2813 | if (wzType) | ||
| 2814 | { | ||
| 2815 | LogStringLine(PlanDumpLevel, "%ls action[%u]: %ls bundle id: %ls, provider key: %ls", wzBase, iAction, wzType, pAction->sczBundleId, pAction->sczDependentProviderKey); | ||
| 2816 | } | ||
| 2817 | } | ||
| 2818 | |||
| 2789 | static void CacheActionLog( | 2819 | static void CacheActionLog( |
| 2790 | __in DWORD iAction, | 2820 | __in DWORD iAction, |
| 2791 | __in BURN_CACHE_ACTION* pAction, | 2821 | __in BURN_CACHE_ACTION* pAction, |
| @@ -2974,14 +3004,30 @@ extern "C" void PlanDump( | |||
| 2974 | LogStringLine(PlanDumpLevel, "--- Begin plan dump ---"); | 3004 | LogStringLine(PlanDumpLevel, "--- Begin plan dump ---"); |
| 2975 | 3005 | ||
| 2976 | LogStringLine(PlanDumpLevel, "Plan action: %hs", LoggingBurnActionToString(pPlan->action)); | 3006 | LogStringLine(PlanDumpLevel, "Plan action: %hs", LoggingBurnActionToString(pPlan->action)); |
| 3007 | LogStringLine(PlanDumpLevel, " bundle id: %ls", pPlan->wzBundleId); | ||
| 3008 | LogStringLine(PlanDumpLevel, " bundle provider key: %ls", pPlan->wzBundleProviderKey); | ||
| 3009 | LogStringLine(PlanDumpLevel, " use-forward-compatible: %hs", LoggingTrueFalseToString(pPlan->fEnabledForwardCompatibleBundle)); | ||
| 2977 | LogStringLine(PlanDumpLevel, " per-machine: %hs", LoggingTrueFalseToString(pPlan->fPerMachine)); | 3010 | LogStringLine(PlanDumpLevel, " per-machine: %hs", LoggingTrueFalseToString(pPlan->fPerMachine)); |
| 3011 | LogStringLine(PlanDumpLevel, " can affect machine state: %hs", LoggingTrueFalseToString(pPlan->fCanAffectMachineState)); | ||
| 2978 | LogStringLine(PlanDumpLevel, " disable-rollback: %hs", LoggingTrueFalseToString(pPlan->fDisableRollback)); | 3012 | LogStringLine(PlanDumpLevel, " disable-rollback: %hs", LoggingTrueFalseToString(pPlan->fDisableRollback)); |
| 3013 | LogStringLine(PlanDumpLevel, " disallow-removal: %hs", LoggingTrueFalseToString(pPlan->fDisallowRemoval)); | ||
| 3014 | LogStringLine(PlanDumpLevel, " registration options: %hs", LoggingRegistrationOptionsToString(pPlan->dwRegistrationOperations)); | ||
| 2979 | LogStringLine(PlanDumpLevel, " estimated size: %llu", pPlan->qwEstimatedSize); | 3015 | LogStringLine(PlanDumpLevel, " estimated size: %llu", pPlan->qwEstimatedSize); |
| 2980 | if (pPlan->sczLayoutDirectory) | 3016 | if (pPlan->sczLayoutDirectory) |
| 2981 | { | 3017 | { |
| 2982 | LogStringLine(PlanDumpLevel, " layout directory: %ls", pPlan->sczLayoutDirectory); | 3018 | LogStringLine(PlanDumpLevel, " layout directory: %ls", pPlan->sczLayoutDirectory); |
| 2983 | } | 3019 | } |
| 2984 | 3020 | ||
| 3021 | for (DWORD i = 0; i < pPlan->cRegistrationActions; ++i) | ||
| 3022 | { | ||
| 3023 | DependentRegistrationActionLog(i, pPlan->rgRegistrationActions + i, FALSE); | ||
| 3024 | } | ||
| 3025 | |||
| 3026 | for (DWORD i = 0; i < pPlan->cRollbackRegistrationActions; ++i) | ||
| 3027 | { | ||
| 3028 | DependentRegistrationActionLog(i, pPlan->rgRollbackRegistrationActions + i, TRUE); | ||
| 3029 | } | ||
| 3030 | |||
| 2985 | LogStringLine(PlanDumpLevel, "Plan cache size: %llu", pPlan->qwCacheSizeTotal); | 3031 | LogStringLine(PlanDumpLevel, "Plan cache size: %llu", pPlan->qwCacheSizeTotal); |
| 2986 | for (DWORD i = 0; i < pPlan->cCacheActions; ++i) | 3032 | for (DWORD i = 0; i < pPlan->cCacheActions; ++i) |
| 2987 | { | 3033 | { |
diff --git a/src/burn/test/BurnUnitTest/PlanTest.cpp b/src/burn/test/BurnUnitTest/PlanTest.cpp index 7852f1c9..a3b58426 100644 --- a/src/burn/test/BurnUnitTest/PlanTest.cpp +++ b/src/burn/test/BurnUnitTest/PlanTest.cpp | |||
| @@ -60,11 +60,26 @@ namespace Bootstrapper | |||
| 60 | NativeAssert::Succeeded(hr, "CorePlan failed"); | 60 | NativeAssert::Succeeded(hr, "CorePlan failed"); |
| 61 | 61 | ||
| 62 | Assert::Equal<DWORD>(BOOTSTRAPPER_ACTION_INSTALL, pPlan->action); | 62 | Assert::Equal<DWORD>(BOOTSTRAPPER_ACTION_INSTALL, pPlan->action); |
| 63 | NativeAssert::StringEqual(L"{E6469F05-BDC8-4EB8-B218-67412543EFAA}", pPlan->wzBundleId); | ||
| 64 | NativeAssert::StringEqual(L"{E6469F05-BDC8-4EB8-B218-67412543EFAA}", pPlan->wzBundleProviderKey); | ||
| 65 | Assert::Equal<BOOL>(FALSE, pPlan->fEnabledForwardCompatibleBundle); | ||
| 63 | Assert::Equal<BOOL>(TRUE, pPlan->fPerMachine); | 66 | Assert::Equal<BOOL>(TRUE, pPlan->fPerMachine); |
| 67 | Assert::Equal<BOOL>(TRUE, pPlan->fCanAffectMachineState); | ||
| 64 | Assert::Equal<BOOL>(FALSE, pPlan->fDisableRollback); | 68 | Assert::Equal<BOOL>(FALSE, pPlan->fDisableRollback); |
| 69 | Assert::Equal<BOOL>(FALSE, pPlan->fDisallowRemoval); | ||
| 65 | 70 | ||
| 66 | BOOL fRollback = FALSE; | 71 | BOOL fRollback = FALSE; |
| 67 | DWORD dwIndex = 0; | 72 | DWORD dwIndex = 0; |
| 73 | ValidateDependentRegistrationAction(pPlan, fRollback, dwIndex++, TRUE, L"{E6469F05-BDC8-4EB8-B218-67412543EFAA}", L"{E6469F05-BDC8-4EB8-B218-67412543EFAA}"); | ||
| 74 | Assert::Equal(dwIndex, pPlan->cRegistrationActions); | ||
| 75 | |||
| 76 | fRollback = TRUE; | ||
| 77 | dwIndex = 0; | ||
| 78 | ValidateDependentRegistrationAction(pPlan, fRollback, dwIndex++, FALSE, L"{E6469F05-BDC8-4EB8-B218-67412543EFAA}", L"{E6469F05-BDC8-4EB8-B218-67412543EFAA}"); | ||
| 79 | Assert::Equal(dwIndex, pPlan->cRollbackRegistrationActions); | ||
| 80 | |||
| 81 | fRollback = FALSE; | ||
| 82 | dwIndex = 0; | ||
| 68 | ValidateCacheCheckpoint(pPlan, fRollback, dwIndex++, 1); | 83 | ValidateCacheCheckpoint(pPlan, fRollback, dwIndex++, 1); |
| 69 | ValidateCachePackage(pPlan, fRollback, dwIndex++, L"PackageA"); | 84 | ValidateCachePackage(pPlan, fRollback, dwIndex++, L"PackageA"); |
| 70 | ValidateCacheSignalSyncpoint(pPlan, fRollback, dwIndex++); | 85 | ValidateCacheSignalSyncpoint(pPlan, fRollback, dwIndex++); |
| @@ -204,11 +219,26 @@ namespace Bootstrapper | |||
| 204 | NativeAssert::Succeeded(hr, "CorePlan failed"); | 219 | NativeAssert::Succeeded(hr, "CorePlan failed"); |
| 205 | 220 | ||
| 206 | Assert::Equal<DWORD>(BOOTSTRAPPER_ACTION_UNINSTALL, pPlan->action); | 221 | Assert::Equal<DWORD>(BOOTSTRAPPER_ACTION_UNINSTALL, pPlan->action); |
| 222 | NativeAssert::StringEqual(L"{E6469F05-BDC8-4EB8-B218-67412543EFAA}", pPlan->wzBundleId); | ||
| 223 | NativeAssert::StringEqual(L"{E6469F05-BDC8-4EB8-B218-67412543EFAA}", pPlan->wzBundleProviderKey); | ||
| 224 | Assert::Equal<BOOL>(FALSE, pPlan->fEnabledForwardCompatibleBundle); | ||
| 207 | Assert::Equal<BOOL>(TRUE, pPlan->fPerMachine); | 225 | Assert::Equal<BOOL>(TRUE, pPlan->fPerMachine); |
| 226 | Assert::Equal<BOOL>(TRUE, pPlan->fCanAffectMachineState); | ||
| 208 | Assert::Equal<BOOL>(FALSE, pPlan->fDisableRollback); | 227 | Assert::Equal<BOOL>(FALSE, pPlan->fDisableRollback); |
| 228 | Assert::Equal<BOOL>(FALSE, pPlan->fDisallowRemoval); | ||
| 209 | 229 | ||
| 210 | BOOL fRollback = FALSE; | 230 | BOOL fRollback = FALSE; |
| 211 | DWORD dwIndex = 0; | 231 | DWORD dwIndex = 0; |
| 232 | ValidateDependentRegistrationAction(pPlan, fRollback, dwIndex++, FALSE, L"{E6469F05-BDC8-4EB8-B218-67412543EFAA}", L"{E6469F05-BDC8-4EB8-B218-67412543EFAA}"); | ||
| 233 | Assert::Equal(dwIndex, pPlan->cRegistrationActions); | ||
| 234 | |||
| 235 | fRollback = TRUE; | ||
| 236 | dwIndex = 0; | ||
| 237 | ValidateDependentRegistrationAction(pPlan, fRollback, dwIndex++, TRUE, L"{E6469F05-BDC8-4EB8-B218-67412543EFAA}", L"{E6469F05-BDC8-4EB8-B218-67412543EFAA}"); | ||
| 238 | Assert::Equal(dwIndex, pPlan->cRollbackRegistrationActions); | ||
| 239 | |||
| 240 | fRollback = FALSE; | ||
| 241 | dwIndex = 0; | ||
| 212 | Assert::Equal(dwIndex, pPlan->cCacheActions); | 242 | Assert::Equal(dwIndex, pPlan->cCacheActions); |
| 213 | 243 | ||
| 214 | fRollback = TRUE; | 244 | fRollback = TRUE; |
| @@ -321,11 +351,24 @@ namespace Bootstrapper | |||
| 321 | NativeAssert::Succeeded(hr, "CorePlan failed"); | 351 | NativeAssert::Succeeded(hr, "CorePlan failed"); |
| 322 | 352 | ||
| 323 | Assert::Equal<DWORD>(BOOTSTRAPPER_ACTION_UNINSTALL, pPlan->action); | 353 | Assert::Equal<DWORD>(BOOTSTRAPPER_ACTION_UNINSTALL, pPlan->action); |
| 354 | NativeAssert::StringEqual(L"{A6F0CBF7-1578-450C-B9D7-9CF2EEC40002}", pPlan->wzBundleId); | ||
| 355 | NativeAssert::StringEqual(L"{A6F0CBF7-1578-450C-B9D7-9CF2EEC40002}", pPlan->wzBundleProviderKey); | ||
| 356 | Assert::Equal<BOOL>(FALSE, pPlan->fEnabledForwardCompatibleBundle); | ||
| 324 | Assert::Equal<BOOL>(TRUE, pPlan->fPerMachine); | 357 | Assert::Equal<BOOL>(TRUE, pPlan->fPerMachine); |
| 358 | Assert::Equal<BOOL>(TRUE, pPlan->fCanAffectMachineState); | ||
| 325 | Assert::Equal<BOOL>(FALSE, pPlan->fDisableRollback); | 359 | Assert::Equal<BOOL>(FALSE, pPlan->fDisableRollback); |
| 360 | Assert::Equal<BOOL>(FALSE, pPlan->fDisallowRemoval); | ||
| 326 | 361 | ||
| 327 | BOOL fRollback = FALSE; | 362 | BOOL fRollback = FALSE; |
| 328 | DWORD dwIndex = 0; | 363 | DWORD dwIndex = 0; |
| 364 | Assert::Equal(dwIndex, pPlan->cRegistrationActions); | ||
| 365 | |||
| 366 | fRollback = TRUE; | ||
| 367 | dwIndex = 0; | ||
| 368 | Assert::Equal(dwIndex, pPlan->cRollbackRegistrationActions); | ||
| 369 | |||
| 370 | fRollback = FALSE; | ||
| 371 | dwIndex = 0; | ||
| 329 | Assert::Equal(dwIndex, pPlan->cCacheActions); | 372 | Assert::Equal(dwIndex, pPlan->cCacheActions); |
| 330 | 373 | ||
| 331 | fRollback = TRUE; | 374 | fRollback = TRUE; |
| @@ -407,11 +450,26 @@ namespace Bootstrapper | |||
| 407 | NativeAssert::Succeeded(hr, "CorePlan failed"); | 450 | NativeAssert::Succeeded(hr, "CorePlan failed"); |
| 408 | 451 | ||
| 409 | Assert::Equal<DWORD>(BOOTSTRAPPER_ACTION_INSTALL, pPlan->action); | 452 | Assert::Equal<DWORD>(BOOTSTRAPPER_ACTION_INSTALL, pPlan->action); |
| 453 | NativeAssert::StringEqual(L"{A6F0CBF7-1578-450C-B9D7-9CF2EEC40002}", pPlan->wzBundleId); | ||
| 454 | NativeAssert::StringEqual(L"{A6F0CBF7-1578-450C-B9D7-9CF2EEC40002}", pPlan->wzBundleProviderKey); | ||
| 455 | Assert::Equal<BOOL>(FALSE, pPlan->fEnabledForwardCompatibleBundle); | ||
| 410 | Assert::Equal<BOOL>(TRUE, pPlan->fPerMachine); | 456 | Assert::Equal<BOOL>(TRUE, pPlan->fPerMachine); |
| 457 | Assert::Equal<BOOL>(TRUE, pPlan->fCanAffectMachineState); | ||
| 411 | Assert::Equal<BOOL>(FALSE, pPlan->fDisableRollback); | 458 | Assert::Equal<BOOL>(FALSE, pPlan->fDisableRollback); |
| 459 | Assert::Equal<BOOL>(FALSE, pPlan->fDisallowRemoval); | ||
| 412 | 460 | ||
| 413 | BOOL fRollback = FALSE; | 461 | BOOL fRollback = FALSE; |
| 414 | DWORD dwIndex = 0; | 462 | DWORD dwIndex = 0; |
| 463 | ValidateDependentRegistrationAction(pPlan, fRollback, dwIndex++, TRUE, L"{A6F0CBF7-1578-450C-B9D7-9CF2EEC40002}", L"{A6F0CBF7-1578-450C-B9D7-9CF2EEC40002}"); | ||
| 464 | Assert::Equal(dwIndex, pPlan->cRegistrationActions); | ||
| 465 | |||
| 466 | fRollback = TRUE; | ||
| 467 | dwIndex = 0; | ||
| 468 | ValidateDependentRegistrationAction(pPlan, fRollback, dwIndex++, FALSE, L"{A6F0CBF7-1578-450C-B9D7-9CF2EEC40002}", L"{A6F0CBF7-1578-450C-B9D7-9CF2EEC40002}"); | ||
| 469 | Assert::Equal(dwIndex, pPlan->cRollbackRegistrationActions); | ||
| 470 | |||
| 471 | fRollback = FALSE; | ||
| 472 | dwIndex = 0; | ||
| 415 | ValidateCacheCheckpoint(pPlan, fRollback, dwIndex++, 1); | 473 | ValidateCacheCheckpoint(pPlan, fRollback, dwIndex++, 1); |
| 416 | ValidateCachePackage(pPlan, fRollback, dwIndex++, L"PackageA"); | 474 | ValidateCachePackage(pPlan, fRollback, dwIndex++, L"PackageA"); |
| 417 | ValidateCacheSignalSyncpoint(pPlan, fRollback, dwIndex++); | 475 | ValidateCacheSignalSyncpoint(pPlan, fRollback, dwIndex++); |
| @@ -510,11 +568,26 @@ namespace Bootstrapper | |||
| 510 | NativeAssert::Succeeded(hr, "CorePlan failed"); | 568 | NativeAssert::Succeeded(hr, "CorePlan failed"); |
| 511 | 569 | ||
| 512 | Assert::Equal<DWORD>(BOOTSTRAPPER_ACTION_INSTALL, pPlan->action); | 570 | Assert::Equal<DWORD>(BOOTSTRAPPER_ACTION_INSTALL, pPlan->action); |
| 571 | NativeAssert::StringEqual(L"{A6F0CBF7-1578-450C-B9D7-9CF2EEC40002}", pPlan->wzBundleId); | ||
| 572 | NativeAssert::StringEqual(L"{A6F0CBF7-1578-450C-B9D7-9CF2EEC40002}", pPlan->wzBundleProviderKey); | ||
| 573 | Assert::Equal<BOOL>(FALSE, pPlan->fEnabledForwardCompatibleBundle); | ||
| 513 | Assert::Equal<BOOL>(TRUE, pPlan->fPerMachine); | 574 | Assert::Equal<BOOL>(TRUE, pPlan->fPerMachine); |
| 575 | Assert::Equal<BOOL>(TRUE, pPlan->fCanAffectMachineState); | ||
| 514 | Assert::Equal<BOOL>(FALSE, pPlan->fDisableRollback); | 576 | Assert::Equal<BOOL>(FALSE, pPlan->fDisableRollback); |
| 577 | Assert::Equal<BOOL>(FALSE, pPlan->fDisallowRemoval); | ||
| 515 | 578 | ||
| 516 | BOOL fRollback = FALSE; | 579 | BOOL fRollback = FALSE; |
| 517 | DWORD dwIndex = 0; | 580 | DWORD dwIndex = 0; |
| 581 | ValidateDependentRegistrationAction(pPlan, fRollback, dwIndex++, TRUE, L"{A6F0CBF7-1578-450C-B9D7-9CF2EEC40002}", L"{A6F0CBF7-1578-450C-B9D7-9CF2EEC40002}"); | ||
| 582 | Assert::Equal(dwIndex, pPlan->cRegistrationActions); | ||
| 583 | |||
| 584 | fRollback = TRUE; | ||
| 585 | dwIndex = 0; | ||
| 586 | ValidateDependentRegistrationAction(pPlan, fRollback, dwIndex++, FALSE, L"{A6F0CBF7-1578-450C-B9D7-9CF2EEC40002}", L"{A6F0CBF7-1578-450C-B9D7-9CF2EEC40002}"); | ||
| 587 | Assert::Equal(dwIndex, pPlan->cRollbackRegistrationActions); | ||
| 588 | |||
| 589 | fRollback = FALSE; | ||
| 590 | dwIndex = 0; | ||
| 518 | ValidateCacheCheckpoint(pPlan, fRollback, dwIndex++, 1); | 591 | ValidateCacheCheckpoint(pPlan, fRollback, dwIndex++, 1); |
| 519 | ValidateCachePackage(pPlan, fRollback, dwIndex++, L"PackageA"); | 592 | ValidateCachePackage(pPlan, fRollback, dwIndex++, L"PackageA"); |
| 520 | ValidateCacheSignalSyncpoint(pPlan, fRollback, dwIndex++); | 593 | ValidateCacheSignalSyncpoint(pPlan, fRollback, dwIndex++); |
| @@ -597,11 +670,26 @@ namespace Bootstrapper | |||
| 597 | NativeAssert::Succeeded(hr, "CorePlan failed"); | 670 | NativeAssert::Succeeded(hr, "CorePlan failed"); |
| 598 | 671 | ||
| 599 | Assert::Equal<DWORD>(BOOTSTRAPPER_ACTION_CACHE, pPlan->action); | 672 | Assert::Equal<DWORD>(BOOTSTRAPPER_ACTION_CACHE, pPlan->action); |
| 673 | NativeAssert::StringEqual(L"{A6F0CBF7-1578-450C-B9D7-9CF2EEC40002}", pPlan->wzBundleId); | ||
| 674 | NativeAssert::StringEqual(L"{A6F0CBF7-1578-450C-B9D7-9CF2EEC40002}", pPlan->wzBundleProviderKey); | ||
| 675 | Assert::Equal<BOOL>(FALSE, pPlan->fEnabledForwardCompatibleBundle); | ||
| 600 | Assert::Equal<BOOL>(TRUE, pPlan->fPerMachine); | 676 | Assert::Equal<BOOL>(TRUE, pPlan->fPerMachine); |
| 677 | Assert::Equal<BOOL>(TRUE, pPlan->fCanAffectMachineState); | ||
| 601 | Assert::Equal<BOOL>(FALSE, pPlan->fDisableRollback); | 678 | Assert::Equal<BOOL>(FALSE, pPlan->fDisableRollback); |
| 679 | Assert::Equal<BOOL>(FALSE, pPlan->fDisallowRemoval); | ||
| 602 | 680 | ||
| 603 | BOOL fRollback = FALSE; | 681 | BOOL fRollback = FALSE; |
| 604 | DWORD dwIndex = 0; | 682 | DWORD dwIndex = 0; |
| 683 | ValidateDependentRegistrationAction(pPlan, fRollback, dwIndex++, TRUE, L"{A6F0CBF7-1578-450C-B9D7-9CF2EEC40002}", L"{A6F0CBF7-1578-450C-B9D7-9CF2EEC40002}"); | ||
| 684 | Assert::Equal(dwIndex, pPlan->cRegistrationActions); | ||
| 685 | |||
| 686 | fRollback = TRUE; | ||
| 687 | dwIndex = 0; | ||
| 688 | ValidateDependentRegistrationAction(pPlan, fRollback, dwIndex++, FALSE, L"{A6F0CBF7-1578-450C-B9D7-9CF2EEC40002}", L"{A6F0CBF7-1578-450C-B9D7-9CF2EEC40002}"); | ||
| 689 | Assert::Equal(dwIndex, pPlan->cRollbackRegistrationActions); | ||
| 690 | |||
| 691 | fRollback = FALSE; | ||
| 692 | dwIndex = 0; | ||
| 605 | ValidateCacheCheckpoint(pPlan, fRollback, dwIndex++, 1); | 693 | ValidateCacheCheckpoint(pPlan, fRollback, dwIndex++, 1); |
| 606 | ValidateCachePackage(pPlan, fRollback, dwIndex++, L"PackageA"); | 694 | ValidateCachePackage(pPlan, fRollback, dwIndex++, L"PackageA"); |
| 607 | ValidateCacheSignalSyncpoint(pPlan, fRollback, dwIndex++); | 695 | ValidateCacheSignalSyncpoint(pPlan, fRollback, dwIndex++); |
| @@ -675,11 +763,24 @@ namespace Bootstrapper | |||
| 675 | NativeAssert::Succeeded(hr, "CorePlan failed"); | 763 | NativeAssert::Succeeded(hr, "CorePlan failed"); |
| 676 | 764 | ||
| 677 | Assert::Equal<DWORD>(BOOTSTRAPPER_ACTION_UNINSTALL, pPlan->action); | 765 | Assert::Equal<DWORD>(BOOTSTRAPPER_ACTION_UNINSTALL, pPlan->action); |
| 766 | NativeAssert::StringEqual(L"{A6F0CBF7-1578-450C-B9D7-9CF2EEC40002}", pPlan->wzBundleId); | ||
| 767 | NativeAssert::StringEqual(L"{A6F0CBF7-1578-450C-B9D7-9CF2EEC40002}", pPlan->wzBundleProviderKey); | ||
| 768 | Assert::Equal<BOOL>(FALSE, pPlan->fEnabledForwardCompatibleBundle); | ||
| 678 | Assert::Equal<BOOL>(TRUE, pPlan->fPerMachine); | 769 | Assert::Equal<BOOL>(TRUE, pPlan->fPerMachine); |
| 770 | Assert::Equal<BOOL>(TRUE, pPlan->fCanAffectMachineState); | ||
| 679 | Assert::Equal<BOOL>(FALSE, pPlan->fDisableRollback); | 771 | Assert::Equal<BOOL>(FALSE, pPlan->fDisableRollback); |
| 772 | Assert::Equal<BOOL>(FALSE, pPlan->fDisallowRemoval); | ||
| 680 | 773 | ||
| 681 | BOOL fRollback = FALSE; | 774 | BOOL fRollback = FALSE; |
| 682 | DWORD dwIndex = 0; | 775 | DWORD dwIndex = 0; |
| 776 | Assert::Equal(dwIndex, pPlan->cRegistrationActions); | ||
| 777 | |||
| 778 | fRollback = TRUE; | ||
| 779 | dwIndex = 0; | ||
| 780 | Assert::Equal(dwIndex, pPlan->cRollbackRegistrationActions); | ||
| 781 | |||
| 782 | fRollback = FALSE; | ||
| 783 | dwIndex = 0; | ||
| 683 | Assert::Equal(dwIndex, pPlan->cCacheActions); | 784 | Assert::Equal(dwIndex, pPlan->cCacheActions); |
| 684 | 785 | ||
| 685 | fRollback = TRUE; | 786 | fRollback = TRUE; |
| @@ -750,11 +851,24 @@ namespace Bootstrapper | |||
| 750 | NativeAssert::Succeeded(hr, "CorePlan failed"); | 851 | NativeAssert::Succeeded(hr, "CorePlan failed"); |
| 751 | 852 | ||
| 752 | Assert::Equal<DWORD>(BOOTSTRAPPER_ACTION_INSTALL, pPlan->action); | 853 | Assert::Equal<DWORD>(BOOTSTRAPPER_ACTION_INSTALL, pPlan->action); |
| 854 | NativeAssert::StringEqual(L"{A6F0CBF7-1578-450C-B9D7-9CF2EEC40002}", pPlan->wzBundleId); | ||
| 855 | NativeAssert::StringEqual(L"{A6F0CBF7-1578-450C-B9D7-9CF2EEC40002}", pPlan->wzBundleProviderKey); | ||
| 856 | Assert::Equal<BOOL>(FALSE, pPlan->fEnabledForwardCompatibleBundle); | ||
| 753 | Assert::Equal<BOOL>(TRUE, pPlan->fPerMachine); | 857 | Assert::Equal<BOOL>(TRUE, pPlan->fPerMachine); |
| 858 | Assert::Equal<BOOL>(TRUE, pPlan->fCanAffectMachineState); | ||
| 754 | Assert::Equal<BOOL>(FALSE, pPlan->fDisableRollback); | 859 | Assert::Equal<BOOL>(FALSE, pPlan->fDisableRollback); |
| 860 | Assert::Equal<BOOL>(FALSE, pPlan->fDisallowRemoval); | ||
| 755 | 861 | ||
| 756 | BOOL fRollback = FALSE; | 862 | BOOL fRollback = FALSE; |
| 757 | DWORD dwIndex = 0; | 863 | DWORD dwIndex = 0; |
| 864 | Assert::Equal(dwIndex, pPlan->cRegistrationActions); | ||
| 865 | |||
| 866 | fRollback = TRUE; | ||
| 867 | dwIndex = 0; | ||
| 868 | Assert::Equal(dwIndex, pPlan->cRollbackRegistrationActions); | ||
| 869 | |||
| 870 | fRollback = FALSE; | ||
| 871 | dwIndex = 0; | ||
| 758 | ValidateCacheCheckpoint(pPlan, fRollback, dwIndex++, 1); | 872 | ValidateCacheCheckpoint(pPlan, fRollback, dwIndex++, 1); |
| 759 | ValidateCachePackage(pPlan, fRollback, dwIndex++, L"PackageA"); | 873 | ValidateCachePackage(pPlan, fRollback, dwIndex++, L"PackageA"); |
| 760 | ValidateCacheSignalSyncpoint(pPlan, fRollback, dwIndex++); | 874 | ValidateCacheSignalSyncpoint(pPlan, fRollback, dwIndex++); |
| @@ -827,11 +941,26 @@ namespace Bootstrapper | |||
| 827 | NativeAssert::Succeeded(hr, "CorePlan failed"); | 941 | NativeAssert::Succeeded(hr, "CorePlan failed"); |
| 828 | 942 | ||
| 829 | Assert::Equal<DWORD>(BOOTSTRAPPER_ACTION_INSTALL, pPlan->action); | 943 | Assert::Equal<DWORD>(BOOTSTRAPPER_ACTION_INSTALL, pPlan->action); |
| 944 | NativeAssert::StringEqual(L"{A6F0CBF7-1578-450C-B9D7-9CF2EEC40002}", pPlan->wzBundleId); | ||
| 945 | NativeAssert::StringEqual(L"{A6F0CBF7-1578-450C-B9D7-9CF2EEC40002}", pPlan->wzBundleProviderKey); | ||
| 946 | Assert::Equal<BOOL>(FALSE, pPlan->fEnabledForwardCompatibleBundle); | ||
| 830 | Assert::Equal<BOOL>(TRUE, pPlan->fPerMachine); | 947 | Assert::Equal<BOOL>(TRUE, pPlan->fPerMachine); |
| 948 | Assert::Equal<BOOL>(TRUE, pPlan->fCanAffectMachineState); | ||
| 831 | Assert::Equal<BOOL>(FALSE, pPlan->fDisableRollback); | 949 | Assert::Equal<BOOL>(FALSE, pPlan->fDisableRollback); |
| 950 | Assert::Equal<BOOL>(FALSE, pPlan->fDisallowRemoval); | ||
| 832 | 951 | ||
| 833 | BOOL fRollback = FALSE; | 952 | BOOL fRollback = FALSE; |
| 834 | DWORD dwIndex = 0; | 953 | DWORD dwIndex = 0; |
| 954 | ValidateDependentRegistrationAction(pPlan, fRollback, dwIndex++, TRUE, L"{A6F0CBF7-1578-450C-B9D7-9CF2EEC40002}", L"{A6F0CBF7-1578-450C-B9D7-9CF2EEC40002}"); | ||
| 955 | Assert::Equal(dwIndex, pPlan->cRegistrationActions); | ||
| 956 | |||
| 957 | fRollback = TRUE; | ||
| 958 | dwIndex = 0; | ||
| 959 | ValidateDependentRegistrationAction(pPlan, fRollback, dwIndex++, FALSE, L"{A6F0CBF7-1578-450C-B9D7-9CF2EEC40002}", L"{A6F0CBF7-1578-450C-B9D7-9CF2EEC40002}"); | ||
| 960 | Assert::Equal(dwIndex, pPlan->cRollbackRegistrationActions); | ||
| 961 | |||
| 962 | fRollback = FALSE; | ||
| 963 | dwIndex = 0; | ||
| 835 | ValidateCacheCheckpoint(pPlan, fRollback, dwIndex++, 1); | 964 | ValidateCacheCheckpoint(pPlan, fRollback, dwIndex++, 1); |
| 836 | ValidateCachePackage(pPlan, fRollback, dwIndex++, L"PackageA"); | 965 | ValidateCachePackage(pPlan, fRollback, dwIndex++, L"PackageA"); |
| 837 | ValidateCacheSignalSyncpoint(pPlan, fRollback, dwIndex++); | 966 | ValidateCacheSignalSyncpoint(pPlan, fRollback, dwIndex++); |
| @@ -917,11 +1046,26 @@ namespace Bootstrapper | |||
| 917 | NativeAssert::Succeeded(hr, "CorePlan failed"); | 1046 | NativeAssert::Succeeded(hr, "CorePlan failed"); |
| 918 | 1047 | ||
| 919 | Assert::Equal<DWORD>(BOOTSTRAPPER_ACTION_MODIFY, pPlan->action); | 1048 | Assert::Equal<DWORD>(BOOTSTRAPPER_ACTION_MODIFY, pPlan->action); |
| 1049 | NativeAssert::StringEqual(L"{A6F0CBF7-1578-450C-B9D7-9CF2EEC40002}", pPlan->wzBundleId); | ||
| 1050 | NativeAssert::StringEqual(L"{A6F0CBF7-1578-450C-B9D7-9CF2EEC40002}", pPlan->wzBundleProviderKey); | ||
| 1051 | Assert::Equal<BOOL>(FALSE, pPlan->fEnabledForwardCompatibleBundle); | ||
| 920 | Assert::Equal<BOOL>(TRUE, pPlan->fPerMachine); | 1052 | Assert::Equal<BOOL>(TRUE, pPlan->fPerMachine); |
| 1053 | Assert::Equal<BOOL>(TRUE, pPlan->fCanAffectMachineState); | ||
| 921 | Assert::Equal<BOOL>(FALSE, pPlan->fDisableRollback); | 1054 | Assert::Equal<BOOL>(FALSE, pPlan->fDisableRollback); |
| 1055 | Assert::Equal<BOOL>(FALSE, pPlan->fDisallowRemoval); | ||
| 922 | 1056 | ||
| 923 | BOOL fRollback = FALSE; | 1057 | BOOL fRollback = FALSE; |
| 924 | DWORD dwIndex = 0; | 1058 | DWORD dwIndex = 0; |
| 1059 | ValidateDependentRegistrationAction(pPlan, fRollback, dwIndex++, TRUE, L"{A6F0CBF7-1578-450C-B9D7-9CF2EEC40002}", L"{A6F0CBF7-1578-450C-B9D7-9CF2EEC40002}"); | ||
| 1060 | Assert::Equal(dwIndex, pPlan->cRegistrationActions); | ||
| 1061 | |||
| 1062 | fRollback = TRUE; | ||
| 1063 | dwIndex = 0; | ||
| 1064 | ValidateDependentRegistrationAction(pPlan, fRollback, dwIndex++, FALSE, L"{A6F0CBF7-1578-450C-B9D7-9CF2EEC40002}", L"{A6F0CBF7-1578-450C-B9D7-9CF2EEC40002}"); | ||
| 1065 | Assert::Equal(dwIndex, pPlan->cRollbackRegistrationActions); | ||
| 1066 | |||
| 1067 | fRollback = FALSE; | ||
| 1068 | dwIndex = 0; | ||
| 925 | Assert::Equal(dwIndex, pPlan->cCacheActions); | 1069 | Assert::Equal(dwIndex, pPlan->cCacheActions); |
| 926 | 1070 | ||
| 927 | fRollback = TRUE; | 1071 | fRollback = TRUE; |
| @@ -980,11 +1124,26 @@ namespace Bootstrapper | |||
| 980 | NativeAssert::Succeeded(hr, "CorePlan failed"); | 1124 | NativeAssert::Succeeded(hr, "CorePlan failed"); |
| 981 | 1125 | ||
| 982 | Assert::Equal<DWORD>(BOOTSTRAPPER_ACTION_UNINSTALL, pPlan->action); | 1126 | Assert::Equal<DWORD>(BOOTSTRAPPER_ACTION_UNINSTALL, pPlan->action); |
| 1127 | NativeAssert::StringEqual(L"{A6F0CBF7-1578-450C-B9D7-9CF2EEC40002}", pPlan->wzBundleId); | ||
| 1128 | NativeAssert::StringEqual(L"{A6F0CBF7-1578-450C-B9D7-9CF2EEC40002}", pPlan->wzBundleProviderKey); | ||
| 1129 | Assert::Equal<BOOL>(FALSE, pPlan->fEnabledForwardCompatibleBundle); | ||
| 983 | Assert::Equal<BOOL>(TRUE, pPlan->fPerMachine); | 1130 | Assert::Equal<BOOL>(TRUE, pPlan->fPerMachine); |
| 1131 | Assert::Equal<BOOL>(TRUE, pPlan->fCanAffectMachineState); | ||
| 984 | Assert::Equal<BOOL>(FALSE, pPlan->fDisableRollback); | 1132 | Assert::Equal<BOOL>(FALSE, pPlan->fDisableRollback); |
| 1133 | Assert::Equal<BOOL>(FALSE, pPlan->fDisallowRemoval); | ||
| 985 | 1134 | ||
| 986 | BOOL fRollback = FALSE; | 1135 | BOOL fRollback = FALSE; |
| 987 | DWORD dwIndex = 0; | 1136 | DWORD dwIndex = 0; |
| 1137 | ValidateDependentRegistrationAction(pPlan, fRollback, dwIndex++, FALSE, L"{A6F0CBF7-1578-450C-B9D7-9CF2EEC40002}", L"{A6F0CBF7-1578-450C-B9D7-9CF2EEC40002}"); | ||
| 1138 | Assert::Equal(dwIndex, pPlan->cRegistrationActions); | ||
| 1139 | |||
| 1140 | fRollback = TRUE; | ||
| 1141 | dwIndex = 0; | ||
| 1142 | ValidateDependentRegistrationAction(pPlan, fRollback, dwIndex++, TRUE, L"{A6F0CBF7-1578-450C-B9D7-9CF2EEC40002}", L"{A6F0CBF7-1578-450C-B9D7-9CF2EEC40002}"); | ||
| 1143 | Assert::Equal(dwIndex, pPlan->cRollbackRegistrationActions); | ||
| 1144 | |||
| 1145 | fRollback = FALSE; | ||
| 1146 | dwIndex = 0; | ||
| 988 | Assert::Equal(dwIndex, pPlan->cCacheActions); | 1147 | Assert::Equal(dwIndex, pPlan->cCacheActions); |
| 989 | 1148 | ||
| 990 | fRollback = TRUE; | 1149 | fRollback = TRUE; |
| @@ -1044,6 +1203,76 @@ namespace Bootstrapper | |||
| 1044 | } | 1203 | } |
| 1045 | 1204 | ||
| 1046 | [Fact] | 1205 | [Fact] |
| 1206 | void SingleMsiUninstallWithDependentTest() | ||
| 1207 | { | ||
| 1208 | HRESULT hr = S_OK; | ||
| 1209 | BURN_ENGINE_STATE engineState = { }; | ||
| 1210 | BURN_ENGINE_STATE* pEngineState = &engineState; | ||
| 1211 | BURN_PLAN* pPlan = &engineState.plan; | ||
| 1212 | |||
| 1213 | InitializeEngineStateForCorePlan(wzSingleMsiManifestFileName, pEngineState); | ||
| 1214 | DetectPackagesAsPresentAndCached(pEngineState); | ||
| 1215 | DetectBundleDependent(pEngineState, L"{29855EB1-724D-4285-A89C-5D37D8549DCD}"); | ||
| 1216 | |||
| 1217 | hr = CorePlan(pEngineState, BOOTSTRAPPER_ACTION_UNINSTALL); | ||
| 1218 | NativeAssert::Succeeded(hr, "CorePlan failed"); | ||
| 1219 | |||
| 1220 | Assert::Equal<DWORD>(BOOTSTRAPPER_ACTION_UNINSTALL, pPlan->action); | ||
| 1221 | NativeAssert::StringEqual(L"{A6F0CBF7-1578-450C-B9D7-9CF2EEC40002}", pPlan->wzBundleId); | ||
| 1222 | NativeAssert::StringEqual(L"{A6F0CBF7-1578-450C-B9D7-9CF2EEC40002}", pPlan->wzBundleProviderKey); | ||
| 1223 | Assert::Equal<BOOL>(FALSE, pPlan->fEnabledForwardCompatibleBundle); | ||
| 1224 | Assert::Equal<BOOL>(TRUE, pPlan->fPerMachine); | ||
| 1225 | Assert::Equal<BOOL>(TRUE, pPlan->fCanAffectMachineState); | ||
| 1226 | Assert::Equal<BOOL>(FALSE, pPlan->fDisableRollback); | ||
| 1227 | Assert::Equal<BOOL>(TRUE, pPlan->fDisallowRemoval); | ||
| 1228 | |||
| 1229 | BOOL fRollback = FALSE; | ||
| 1230 | DWORD dwIndex = 0; | ||
| 1231 | ValidateDependentRegistrationAction(pPlan, fRollback, dwIndex++, FALSE, L"{A6F0CBF7-1578-450C-B9D7-9CF2EEC40002}", L"{A6F0CBF7-1578-450C-B9D7-9CF2EEC40002}"); | ||
| 1232 | Assert::Equal(dwIndex, pPlan->cRegistrationActions); | ||
| 1233 | |||
| 1234 | fRollback = TRUE; | ||
| 1235 | dwIndex = 0; | ||
| 1236 | ValidateDependentRegistrationAction(pPlan, fRollback, dwIndex++, TRUE, L"{A6F0CBF7-1578-450C-B9D7-9CF2EEC40002}", L"{A6F0CBF7-1578-450C-B9D7-9CF2EEC40002}"); | ||
| 1237 | Assert::Equal(dwIndex, pPlan->cRollbackRegistrationActions); | ||
| 1238 | |||
| 1239 | fRollback = FALSE; | ||
| 1240 | dwIndex = 0; | ||
| 1241 | Assert::Equal(dwIndex, pPlan->cCacheActions); | ||
| 1242 | |||
| 1243 | fRollback = TRUE; | ||
| 1244 | dwIndex = 0; | ||
| 1245 | Assert::Equal(dwIndex, pPlan->cRollbackCacheActions); | ||
| 1246 | |||
| 1247 | Assert::Equal(0ull, pPlan->qwEstimatedSize); | ||
| 1248 | Assert::Equal(0ull, pPlan->qwCacheSizeTotal); | ||
| 1249 | |||
| 1250 | fRollback = FALSE; | ||
| 1251 | dwIndex = 0; | ||
| 1252 | Assert::Equal(dwIndex, pPlan->cExecuteActions); | ||
| 1253 | |||
| 1254 | fRollback = TRUE; | ||
| 1255 | dwIndex = 0; | ||
| 1256 | Assert::Equal(dwIndex, pPlan->cRollbackActions); | ||
| 1257 | |||
| 1258 | Assert::Equal(0ul, pPlan->cExecutePackagesTotal); | ||
| 1259 | Assert::Equal(0ul, pPlan->cOverallProgressTicksTotal); | ||
| 1260 | |||
| 1261 | dwIndex = 0; | ||
| 1262 | Assert::Equal(dwIndex, pPlan->cRestoreRelatedBundleActions); | ||
| 1263 | |||
| 1264 | dwIndex = 0; | ||
| 1265 | Assert::Equal(dwIndex, pPlan->cCleanActions); | ||
| 1266 | |||
| 1267 | UINT uIndex = 0; | ||
| 1268 | ValidatePlannedProvider(pPlan, uIndex++, L"{A6F0CBF7-1578-450C-B9D7-9CF2EEC40002}", NULL); | ||
| 1269 | Assert::Equal(uIndex, pPlan->cPlannedProviders); | ||
| 1270 | |||
| 1271 | Assert::Equal(1ul, pEngineState->packages.cPackages); | ||
| 1272 | ValidateNonPermanentPackageExpectedStates(&pEngineState->packages.rgPackages[0], L"PackageA", BURN_PACKAGE_REGISTRATION_STATE_UNKNOWN, BURN_PACKAGE_REGISTRATION_STATE_UNKNOWN); | ||
| 1273 | } | ||
| 1274 | |||
| 1275 | [Fact] | ||
| 1047 | void SingleMsiUninstallTestFromUpgradeBundleWithSameExactPackage() | 1276 | void SingleMsiUninstallTestFromUpgradeBundleWithSameExactPackage() |
| 1048 | { | 1277 | { |
| 1049 | HRESULT hr = S_OK; | 1278 | HRESULT hr = S_OK; |
| @@ -1058,11 +1287,26 @@ namespace Bootstrapper | |||
| 1058 | NativeAssert::Succeeded(hr, "CorePlan failed"); | 1287 | NativeAssert::Succeeded(hr, "CorePlan failed"); |
| 1059 | 1288 | ||
| 1060 | Assert::Equal<DWORD>(BOOTSTRAPPER_ACTION_UNINSTALL, pPlan->action); | 1289 | Assert::Equal<DWORD>(BOOTSTRAPPER_ACTION_UNINSTALL, pPlan->action); |
| 1290 | NativeAssert::StringEqual(L"{A6F0CBF7-1578-450C-B9D7-9CF2EEC40002}", pPlan->wzBundleId); | ||
| 1291 | NativeAssert::StringEqual(L"{A6F0CBF7-1578-450C-B9D7-9CF2EEC40002}", pPlan->wzBundleProviderKey); | ||
| 1292 | Assert::Equal<BOOL>(FALSE, pPlan->fEnabledForwardCompatibleBundle); | ||
| 1061 | Assert::Equal<BOOL>(TRUE, pPlan->fPerMachine); | 1293 | Assert::Equal<BOOL>(TRUE, pPlan->fPerMachine); |
| 1294 | Assert::Equal<BOOL>(TRUE, pPlan->fCanAffectMachineState); | ||
| 1062 | Assert::Equal<BOOL>(FALSE, pPlan->fDisableRollback); | 1295 | Assert::Equal<BOOL>(FALSE, pPlan->fDisableRollback); |
| 1296 | Assert::Equal<BOOL>(FALSE, pPlan->fDisallowRemoval); | ||
| 1063 | 1297 | ||
| 1064 | BOOL fRollback = FALSE; | 1298 | BOOL fRollback = FALSE; |
| 1065 | DWORD dwIndex = 0; | 1299 | DWORD dwIndex = 0; |
| 1300 | ValidateDependentRegistrationAction(pPlan, fRollback, dwIndex++, FALSE, L"{A6F0CBF7-1578-450C-B9D7-9CF2EEC40002}", L"{A6F0CBF7-1578-450C-B9D7-9CF2EEC40002}"); | ||
| 1301 | Assert::Equal(dwIndex, pPlan->cRegistrationActions); | ||
| 1302 | |||
| 1303 | fRollback = TRUE; | ||
| 1304 | dwIndex = 0; | ||
| 1305 | ValidateDependentRegistrationAction(pPlan, fRollback, dwIndex++, TRUE, L"{A6F0CBF7-1578-450C-B9D7-9CF2EEC40002}", L"{A6F0CBF7-1578-450C-B9D7-9CF2EEC40002}"); | ||
| 1306 | Assert::Equal(dwIndex, pPlan->cRollbackRegistrationActions); | ||
| 1307 | |||
| 1308 | fRollback = FALSE; | ||
| 1309 | dwIndex = 0; | ||
| 1066 | Assert::Equal(dwIndex, pPlan->cCacheActions); | 1310 | Assert::Equal(dwIndex, pPlan->cCacheActions); |
| 1067 | 1311 | ||
| 1068 | fRollback = TRUE; | 1312 | fRollback = TRUE; |
| @@ -1126,11 +1370,26 @@ namespace Bootstrapper | |||
| 1126 | NativeAssert::Succeeded(hr, "CorePlan failed"); | 1370 | NativeAssert::Succeeded(hr, "CorePlan failed"); |
| 1127 | 1371 | ||
| 1128 | Assert::Equal<DWORD>(BOOTSTRAPPER_ACTION_UNSAFE_UNINSTALL, pPlan->action); | 1372 | Assert::Equal<DWORD>(BOOTSTRAPPER_ACTION_UNSAFE_UNINSTALL, pPlan->action); |
| 1373 | NativeAssert::StringEqual(L"{A6F0CBF7-1578-450C-B9D7-9CF2EEC40002}", pPlan->wzBundleId); | ||
| 1374 | NativeAssert::StringEqual(L"{A6F0CBF7-1578-450C-B9D7-9CF2EEC40002}", pPlan->wzBundleProviderKey); | ||
| 1375 | Assert::Equal<BOOL>(FALSE, pPlan->fEnabledForwardCompatibleBundle); | ||
| 1129 | Assert::Equal<BOOL>(TRUE, pPlan->fPerMachine); | 1376 | Assert::Equal<BOOL>(TRUE, pPlan->fPerMachine); |
| 1377 | Assert::Equal<BOOL>(TRUE, pPlan->fCanAffectMachineState); | ||
| 1130 | Assert::Equal<BOOL>(TRUE, pPlan->fDisableRollback); | 1378 | Assert::Equal<BOOL>(TRUE, pPlan->fDisableRollback); |
| 1379 | Assert::Equal<BOOL>(FALSE, pPlan->fDisallowRemoval); | ||
| 1131 | 1380 | ||
| 1132 | BOOL fRollback = FALSE; | 1381 | BOOL fRollback = FALSE; |
| 1133 | DWORD dwIndex = 0; | 1382 | DWORD dwIndex = 0; |
| 1383 | ValidateDependentRegistrationAction(pPlan, fRollback, dwIndex++, FALSE, L"{A6F0CBF7-1578-450C-B9D7-9CF2EEC40002}", L"{A6F0CBF7-1578-450C-B9D7-9CF2EEC40002}"); | ||
| 1384 | Assert::Equal(dwIndex, pPlan->cRegistrationActions); | ||
| 1385 | |||
| 1386 | fRollback = TRUE; | ||
| 1387 | dwIndex = 0; | ||
| 1388 | ValidateDependentRegistrationAction(pPlan, fRollback, dwIndex++, TRUE, L"{A6F0CBF7-1578-450C-B9D7-9CF2EEC40002}", L"{A6F0CBF7-1578-450C-B9D7-9CF2EEC40002}"); | ||
| 1389 | Assert::Equal(dwIndex, pPlan->cRollbackRegistrationActions); | ||
| 1390 | |||
| 1391 | fRollback = FALSE; | ||
| 1392 | dwIndex = 0; | ||
| 1134 | Assert::Equal(dwIndex, pPlan->cCacheActions); | 1393 | Assert::Equal(dwIndex, pPlan->cCacheActions); |
| 1135 | 1394 | ||
| 1136 | fRollback = TRUE; | 1395 | fRollback = TRUE; |
| @@ -1205,11 +1464,26 @@ namespace Bootstrapper | |||
| 1205 | NativeAssert::Succeeded(hr, "CorePlan failed"); | 1464 | NativeAssert::Succeeded(hr, "CorePlan failed"); |
| 1206 | 1465 | ||
| 1207 | Assert::Equal<DWORD>(BOOTSTRAPPER_ACTION_INSTALL, pPlan->action); | 1466 | Assert::Equal<DWORD>(BOOTSTRAPPER_ACTION_INSTALL, pPlan->action); |
| 1467 | NativeAssert::StringEqual(L"{22D1DDBA-284D-40A7-BD14-95EA07906F21}", pPlan->wzBundleId); | ||
| 1468 | NativeAssert::StringEqual(L"{22D1DDBA-284D-40A7-BD14-95EA07906F21}", pPlan->wzBundleProviderKey); | ||
| 1469 | Assert::Equal<BOOL>(FALSE, pPlan->fEnabledForwardCompatibleBundle); | ||
| 1208 | Assert::Equal<BOOL>(TRUE, pPlan->fPerMachine); | 1470 | Assert::Equal<BOOL>(TRUE, pPlan->fPerMachine); |
| 1471 | Assert::Equal<BOOL>(TRUE, pPlan->fCanAffectMachineState); | ||
| 1209 | Assert::Equal<BOOL>(FALSE, pPlan->fDisableRollback); | 1472 | Assert::Equal<BOOL>(FALSE, pPlan->fDisableRollback); |
| 1473 | Assert::Equal<BOOL>(FALSE, pPlan->fDisallowRemoval); | ||
| 1210 | 1474 | ||
| 1211 | BOOL fRollback = FALSE; | 1475 | BOOL fRollback = FALSE; |
| 1212 | DWORD dwIndex = 0; | 1476 | DWORD dwIndex = 0; |
| 1477 | ValidateDependentRegistrationAction(pPlan, fRollback, dwIndex++, TRUE, L"{22D1DDBA-284D-40A7-BD14-95EA07906F21}", L"{22D1DDBA-284D-40A7-BD14-95EA07906F21}"); | ||
| 1478 | Assert::Equal(dwIndex, pPlan->cRegistrationActions); | ||
| 1479 | |||
| 1480 | fRollback = TRUE; | ||
| 1481 | dwIndex = 0; | ||
| 1482 | ValidateDependentRegistrationAction(pPlan, fRollback, dwIndex++, FALSE, L"{22D1DDBA-284D-40A7-BD14-95EA07906F21}", L"{22D1DDBA-284D-40A7-BD14-95EA07906F21}"); | ||
| 1483 | Assert::Equal(dwIndex, pPlan->cRollbackRegistrationActions); | ||
| 1484 | |||
| 1485 | fRollback = FALSE; | ||
| 1486 | dwIndex = 0; | ||
| 1213 | ValidateCacheCheckpoint(pPlan, fRollback, dwIndex++, 1); | 1487 | ValidateCacheCheckpoint(pPlan, fRollback, dwIndex++, 1); |
| 1214 | ValidateCachePackage(pPlan, fRollback, dwIndex++, L"NetFx48Web"); | 1488 | ValidateCachePackage(pPlan, fRollback, dwIndex++, L"NetFx48Web"); |
| 1215 | ValidateCacheSignalSyncpoint(pPlan, fRollback, dwIndex++); | 1489 | ValidateCacheSignalSyncpoint(pPlan, fRollback, dwIndex++); |
| @@ -1320,11 +1594,26 @@ namespace Bootstrapper | |||
| 1320 | NativeAssert::Succeeded(hr, "CorePlan failed"); | 1594 | NativeAssert::Succeeded(hr, "CorePlan failed"); |
| 1321 | 1595 | ||
| 1322 | Assert::Equal<DWORD>(BOOTSTRAPPER_ACTION_UNINSTALL, pPlan->action); | 1596 | Assert::Equal<DWORD>(BOOTSTRAPPER_ACTION_UNINSTALL, pPlan->action); |
| 1597 | NativeAssert::StringEqual(L"{22D1DDBA-284D-40A7-BD14-95EA07906F21}", pPlan->wzBundleId); | ||
| 1598 | NativeAssert::StringEqual(L"{22D1DDBA-284D-40A7-BD14-95EA07906F21}", pPlan->wzBundleProviderKey); | ||
| 1599 | Assert::Equal<BOOL>(FALSE, pPlan->fEnabledForwardCompatibleBundle); | ||
| 1323 | Assert::Equal<BOOL>(TRUE, pPlan->fPerMachine); | 1600 | Assert::Equal<BOOL>(TRUE, pPlan->fPerMachine); |
| 1601 | Assert::Equal<BOOL>(TRUE, pPlan->fCanAffectMachineState); | ||
| 1324 | Assert::Equal<BOOL>(FALSE, pPlan->fDisableRollback); | 1602 | Assert::Equal<BOOL>(FALSE, pPlan->fDisableRollback); |
| 1603 | Assert::Equal<BOOL>(FALSE, pPlan->fDisallowRemoval); | ||
| 1325 | 1604 | ||
| 1326 | BOOL fRollback = FALSE; | 1605 | BOOL fRollback = FALSE; |
| 1327 | DWORD dwIndex = 0; | 1606 | DWORD dwIndex = 0; |
| 1607 | ValidateDependentRegistrationAction(pPlan, fRollback, dwIndex++, FALSE, L"{22D1DDBA-284D-40A7-BD14-95EA07906F21}", L"{22D1DDBA-284D-40A7-BD14-95EA07906F21}"); | ||
| 1608 | Assert::Equal(dwIndex, pPlan->cRegistrationActions); | ||
| 1609 | |||
| 1610 | fRollback = TRUE; | ||
| 1611 | dwIndex = 0; | ||
| 1612 | ValidateDependentRegistrationAction(pPlan, fRollback, dwIndex++, TRUE, L"{22D1DDBA-284D-40A7-BD14-95EA07906F21}", L"{22D1DDBA-284D-40A7-BD14-95EA07906F21}"); | ||
| 1613 | Assert::Equal(dwIndex, pPlan->cRollbackRegistrationActions); | ||
| 1614 | |||
| 1615 | fRollback = FALSE; | ||
| 1616 | dwIndex = 0; | ||
| 1328 | Assert::Equal(dwIndex, pPlan->cCacheActions); | 1617 | Assert::Equal(dwIndex, pPlan->cCacheActions); |
| 1329 | 1618 | ||
| 1330 | fRollback = TRUE; | 1619 | fRollback = TRUE; |
| @@ -1420,11 +1709,26 @@ namespace Bootstrapper | |||
| 1420 | NativeAssert::Succeeded(hr, "CorePlan failed"); | 1709 | NativeAssert::Succeeded(hr, "CorePlan failed"); |
| 1421 | 1710 | ||
| 1422 | Assert::Equal<DWORD>(BOOTSTRAPPER_ACTION_UNINSTALL, pPlan->action); | 1711 | Assert::Equal<DWORD>(BOOTSTRAPPER_ACTION_UNINSTALL, pPlan->action); |
| 1712 | NativeAssert::StringEqual(L"{22D1DDBA-284D-40A7-BD14-95EA07906F21}", pPlan->wzBundleId); | ||
| 1713 | NativeAssert::StringEqual(L"{22D1DDBA-284D-40A7-BD14-95EA07906F21}", pPlan->wzBundleProviderKey); | ||
| 1714 | Assert::Equal<BOOL>(FALSE, pPlan->fEnabledForwardCompatibleBundle); | ||
| 1423 | Assert::Equal<BOOL>(TRUE, pPlan->fPerMachine); | 1715 | Assert::Equal<BOOL>(TRUE, pPlan->fPerMachine); |
| 1716 | Assert::Equal<BOOL>(TRUE, pPlan->fCanAffectMachineState); | ||
| 1424 | Assert::Equal<BOOL>(FALSE, pPlan->fDisableRollback); | 1717 | Assert::Equal<BOOL>(FALSE, pPlan->fDisableRollback); |
| 1718 | Assert::Equal<BOOL>(FALSE, pPlan->fDisallowRemoval); | ||
| 1425 | 1719 | ||
| 1426 | BOOL fRollback = FALSE; | 1720 | BOOL fRollback = FALSE; |
| 1427 | DWORD dwIndex = 0; | 1721 | DWORD dwIndex = 0; |
| 1722 | ValidateDependentRegistrationAction(pPlan, fRollback, dwIndex++, FALSE, L"{22D1DDBA-284D-40A7-BD14-95EA07906F21}", L"{22D1DDBA-284D-40A7-BD14-95EA07906F21}"); | ||
| 1723 | Assert::Equal(dwIndex, pPlan->cRegistrationActions); | ||
| 1724 | |||
| 1725 | fRollback = TRUE; | ||
| 1726 | dwIndex = 0; | ||
| 1727 | ValidateDependentRegistrationAction(pPlan, fRollback, dwIndex++, TRUE, L"{22D1DDBA-284D-40A7-BD14-95EA07906F21}", L"{22D1DDBA-284D-40A7-BD14-95EA07906F21}"); | ||
| 1728 | Assert::Equal(dwIndex, pPlan->cRollbackRegistrationActions); | ||
| 1729 | |||
| 1730 | fRollback = FALSE; | ||
| 1731 | dwIndex = 0; | ||
| 1428 | Assert::Equal(dwIndex, pPlan->cCacheActions); | 1732 | Assert::Equal(dwIndex, pPlan->cCacheActions); |
| 1429 | 1733 | ||
| 1430 | fRollback = TRUE; | 1734 | fRollback = TRUE; |
| @@ -1475,7 +1779,7 @@ namespace Bootstrapper | |||
| 1475 | Assert::Equal(dwIndex, pPlan->cCleanActions); | 1779 | Assert::Equal(dwIndex, pPlan->cCleanActions); |
| 1476 | 1780 | ||
| 1477 | UINT uIndex = 0; | 1781 | UINT uIndex = 0; |
| 1478 | ValidatePlannedProvider(pPlan, uIndex++, L"{22D1DDBA-284D-40A7-BD14-95EA07906F21}", NULL); | 1782 | ValidatePlannedProvider(pPlan, uIndex++, L"{DC94A8E0-4BF4-4026-B80B-2755DAFC05D3}", NULL); |
| 1479 | ValidatePlannedProvider(pPlan, uIndex++, L"{5FF7F534-3FFC-41E0-80CD-E6361E5E7B7B}", NULL); | 1783 | ValidatePlannedProvider(pPlan, uIndex++, L"{5FF7F534-3FFC-41E0-80CD-E6361E5E7B7B}", NULL); |
| 1480 | Assert::Equal(uIndex, pPlan->cPlannedProviders); | 1784 | Assert::Equal(uIndex, pPlan->cPlannedProviders); |
| 1481 | 1785 | ||
| @@ -1499,11 +1803,26 @@ namespace Bootstrapper | |||
| 1499 | NativeAssert::Succeeded(hr, "CorePlan failed"); | 1803 | NativeAssert::Succeeded(hr, "CorePlan failed"); |
| 1500 | 1804 | ||
| 1501 | Assert::Equal<DWORD>(BOOTSTRAPPER_ACTION_INSTALL, pPlan->action); | 1805 | Assert::Equal<DWORD>(BOOTSTRAPPER_ACTION_INSTALL, pPlan->action); |
| 1806 | NativeAssert::StringEqual(L"{22D1DDBA-284D-40A7-BD14-95EA07906F21}", pPlan->wzBundleId); | ||
| 1807 | NativeAssert::StringEqual(L"{22D1DDBA-284D-40A7-BD14-95EA07906F21}", pPlan->wzBundleProviderKey); | ||
| 1808 | Assert::Equal<BOOL>(FALSE, pPlan->fEnabledForwardCompatibleBundle); | ||
| 1502 | Assert::Equal<BOOL>(TRUE, pPlan->fPerMachine); | 1809 | Assert::Equal<BOOL>(TRUE, pPlan->fPerMachine); |
| 1810 | Assert::Equal<BOOL>(TRUE, pPlan->fCanAffectMachineState); | ||
| 1503 | Assert::Equal<BOOL>(FALSE, pPlan->fDisableRollback); | 1811 | Assert::Equal<BOOL>(FALSE, pPlan->fDisableRollback); |
| 1812 | Assert::Equal<BOOL>(FALSE, pPlan->fDisallowRemoval); | ||
| 1504 | 1813 | ||
| 1505 | BOOL fRollback = FALSE; | 1814 | BOOL fRollback = FALSE; |
| 1506 | DWORD dwIndex = 0; | 1815 | DWORD dwIndex = 0; |
| 1816 | ValidateDependentRegistrationAction(pPlan, fRollback, dwIndex++, TRUE, L"{22D1DDBA-284D-40A7-BD14-95EA07906F21}", L"{22D1DDBA-284D-40A7-BD14-95EA07906F21}"); | ||
| 1817 | Assert::Equal(dwIndex, pPlan->cRegistrationActions); | ||
| 1818 | |||
| 1819 | fRollback = TRUE; | ||
| 1820 | dwIndex = 0; | ||
| 1821 | ValidateDependentRegistrationAction(pPlan, fRollback, dwIndex++, FALSE, L"{22D1DDBA-284D-40A7-BD14-95EA07906F21}", L"{22D1DDBA-284D-40A7-BD14-95EA07906F21}"); | ||
| 1822 | Assert::Equal(dwIndex, pPlan->cRollbackRegistrationActions); | ||
| 1823 | |||
| 1824 | fRollback = FALSE; | ||
| 1825 | dwIndex = 0; | ||
| 1507 | ValidateCacheCheckpoint(pPlan, fRollback, dwIndex++, 1); | 1826 | ValidateCacheCheckpoint(pPlan, fRollback, dwIndex++, 1); |
| 1508 | ValidateCachePackage(pPlan, fRollback, dwIndex++, L"NetFx48Web"); | 1827 | ValidateCachePackage(pPlan, fRollback, dwIndex++, L"NetFx48Web"); |
| 1509 | ValidateCacheSignalSyncpoint(pPlan, fRollback, dwIndex++); | 1828 | ValidateCacheSignalSyncpoint(pPlan, fRollback, dwIndex++); |
| @@ -1576,7 +1895,7 @@ namespace Bootstrapper | |||
| 1576 | Assert::Equal(dwIndex, pPlan->cCleanActions); | 1895 | Assert::Equal(dwIndex, pPlan->cCleanActions); |
| 1577 | 1896 | ||
| 1578 | UINT uIndex = 0; | 1897 | UINT uIndex = 0; |
| 1579 | ValidatePlannedProvider(pPlan, uIndex++, L"{22D1DDBA-284D-40A7-BD14-95EA07906F21}", NULL); | 1898 | ValidatePlannedProvider(pPlan, uIndex++, L"{DC94A8E0-4BF4-4026-B80B-2755DAFC05D3}", NULL); |
| 1580 | Assert::Equal(uIndex, pPlan->cPlannedProviders); | 1899 | Assert::Equal(uIndex, pPlan->cPlannedProviders); |
| 1581 | 1900 | ||
| 1582 | Assert::Equal(2ul, pEngineState->packages.cPackages); | 1901 | Assert::Equal(2ul, pEngineState->packages.cPackages); |
| @@ -1728,6 +2047,29 @@ namespace Bootstrapper | |||
| 1728 | } | 2047 | } |
| 1729 | } | 2048 | } |
| 1730 | 2049 | ||
| 2050 | void DetectBundleDependent(BURN_ENGINE_STATE* pEngineState, LPCWSTR wzId) | ||
| 2051 | { | ||
| 2052 | HRESULT hr = S_OK; | ||
| 2053 | BURN_DEPENDENCIES* pDependencies = &pEngineState->dependencies; | ||
| 2054 | BURN_REGISTRATION* pRegistration = &pEngineState->registration; | ||
| 2055 | |||
| 2056 | hr = DepDependencyArrayAlloc(&pRegistration->rgDependents, &pRegistration->cDependents, wzId, NULL); | ||
| 2057 | NativeAssert::Succeeded(hr, "Failed to add package dependent"); | ||
| 2058 | |||
| 2059 | if (pDependencies->fSelfDependent || pDependencies->fActiveParent) | ||
| 2060 | { | ||
| 2061 | if (pDependencies->fActiveParent && CSTR_EQUAL == ::CompareStringW(LOCALE_NEUTRAL, NORM_IGNORECASE, pDependencies->wzActiveParent, -1, wzId, -1)) | ||
| 2062 | { | ||
| 2063 | pRegistration->fParentRegisteredAsDependent = TRUE; | ||
| 2064 | } | ||
| 2065 | |||
| 2066 | if (pDependencies->fSelfDependent && CSTR_EQUAL == ::CompareStringW(LOCALE_NEUTRAL, NORM_IGNORECASE, pDependencies->wzSelfDependent, -1, wzId, -1)) | ||
| 2067 | { | ||
| 2068 | pRegistration->fSelfRegisteredAsDependent = TRUE; | ||
| 2069 | } | ||
| 2070 | } | ||
| 2071 | } | ||
| 2072 | |||
| 1731 | void DetectPackageDependent(BURN_PACKAGE* pPackage, LPCWSTR wzId) | 2073 | void DetectPackageDependent(BURN_PACKAGE* pPackage, LPCWSTR wzId) |
| 1732 | { | 2074 | { |
| 1733 | HRESULT hr = S_OK; | 2075 | HRESULT hr = S_OK; |
| @@ -1761,6 +2103,11 @@ namespace Bootstrapper | |||
| 1761 | 2103 | ||
| 1762 | pEngineState->registration.detectedRegistrationType = BOOTSTRAPPER_REGISTRATION_TYPE_FULL; | 2104 | pEngineState->registration.detectedRegistrationType = BOOTSTRAPPER_REGISTRATION_TYPE_FULL; |
| 1763 | 2105 | ||
| 2106 | if (pEngineState->dependencies.wzSelfDependent) | ||
| 2107 | { | ||
| 2108 | DetectBundleDependent(pEngineState, pEngineState->dependencies.wzSelfDependent); | ||
| 2109 | } | ||
| 2110 | |||
| 1764 | for (DWORD i = 0; i < pEngineState->packages.cPackages; ++i) | 2111 | for (DWORD i = 0; i < pEngineState->packages.cPackages; ++i) |
| 1765 | { | 2112 | { |
| 1766 | BURN_PACKAGE* pPackage = pEngineState->packages.rgPackages + i; | 2113 | BURN_PACKAGE* pPackage = pEngineState->packages.rgPackages + i; |
| @@ -1971,6 +2318,27 @@ namespace Bootstrapper | |||
| 1971 | NativeAssert::StringEqual(wzPackageId, pCleanAction->pPackage->sczId); | 2318 | NativeAssert::StringEqual(wzPackageId, pCleanAction->pPackage->sczId); |
| 1972 | } | 2319 | } |
| 1973 | 2320 | ||
| 2321 | BURN_DEPENDENT_REGISTRATION_ACTION* ValidateDependentRegistrationActionExists(BURN_PLAN* pPlan, BOOL fRollback, DWORD dwIndex) | ||
| 2322 | { | ||
| 2323 | Assert::InRange(dwIndex + 1ul, 1ul, (fRollback ? pPlan->cRollbackRegistrationActions : pPlan->cRegistrationActions)); | ||
| 2324 | return (fRollback ? pPlan->rgRollbackRegistrationActions : pPlan->rgRegistrationActions) + dwIndex; | ||
| 2325 | } | ||
| 2326 | |||
| 2327 | void ValidateDependentRegistrationAction( | ||
| 2328 | __in BURN_PLAN* pPlan, | ||
| 2329 | __in BOOL fRollback, | ||
| 2330 | __in DWORD dwIndex, | ||
| 2331 | __in BOOL fRegister, | ||
| 2332 | __in LPCWSTR wzBundleId, | ||
| 2333 | __in LPCWSTR wzProviderKey | ||
| 2334 | ) | ||
| 2335 | { | ||
| 2336 | BURN_DEPENDENT_REGISTRATION_ACTION* pAction = ValidateDependentRegistrationActionExists(pPlan, fRollback, dwIndex); | ||
| 2337 | Assert::Equal<DWORD>(fRegister ? BURN_DEPENDENT_REGISTRATION_ACTION_TYPE_REGISTER : BURN_DEPENDENT_REGISTRATION_ACTION_TYPE_UNREGISTER, pAction->type); | ||
| 2338 | NativeAssert::StringEqual(wzBundleId, pAction->sczBundleId); | ||
| 2339 | NativeAssert::StringEqual(wzProviderKey, pAction->sczDependentProviderKey); | ||
| 2340 | } | ||
| 2341 | |||
| 1974 | BURN_EXECUTE_ACTION* ValidateExecuteActionExists(BURN_PLAN* pPlan, BOOL fRollback, DWORD dwIndex) | 2342 | BURN_EXECUTE_ACTION* ValidateExecuteActionExists(BURN_PLAN* pPlan, BOOL fRollback, DWORD dwIndex) |
| 1975 | { | 2343 | { |
| 1976 | Assert::InRange(dwIndex + 1ul, 1ul, (fRollback ? pPlan->cRollbackActions : pPlan->cExecuteActions)); | 2344 | Assert::InRange(dwIndex + 1ul, 1ul, (fRollback ? pPlan->cRollbackActions : pPlan->cExecuteActions)); |
diff --git a/src/burn/test/BurnUnitTest/TestData/PlanTest/Slipstream_BundleA_modified_manifest.xml b/src/burn/test/BurnUnitTest/TestData/PlanTest/Slipstream_BundleA_modified_manifest.xml index 463d2c7f..0b35860b 100644 --- a/src/burn/test/BurnUnitTest/TestData/PlanTest/Slipstream_BundleA_modified_manifest.xml +++ b/src/burn/test/BurnUnitTest/TestData/PlanTest/Slipstream_BundleA_modified_manifest.xml | |||
| @@ -1 +1 @@ | |||
| <?xml version="1.0" encoding="utf-8"?><BurnManifest xmlns="http://wixtoolset.org/schemas/v4/2008/Burn"><Log PathVariable="WixBundleLog" Prefix="~SlipstreamTests_BundleA" Extension=".log" /><RelatedBundle Id="{62C28DAF-A13E-4F55-ACA1-FB843630789C}" Action="Upgrade" /><Variable Id="TestGroupName" Value="SlipstreamTests" Type="string" Hidden="no" Persisted="no" /><Variable Id="WixBundleName" Hidden="no" Persisted="yes" /><Variable Id="WixBundleOriginalSource" Hidden="no" Persisted="yes" /><Variable Id="WixBundleOriginalSourceFolder" Hidden="no" Persisted="yes" /><Variable Id="WixBundleLastUsedSource" Hidden="no" Persisted="yes" /><RegistrySearch Id="NETFRAMEWORK45" Variable="NETFRAMEWORK45" Root="HKLM" Key="SOFTWARE\Microsoft\NET Framework Setup\NDP\v4\Full" Value="Release" Type="value" VariableType="string" /><UX><Payload Id="WixManagedBootstrapperApplicationHost" FilePath="mbahost.dll" FileSize="140288" Hash="4569C53566B1025E243E0C29A96C608BD4019979" Packaging="embedded" SourcePath="u30" /><Payload Id="payO60IVK4ATGzPpMz3rwVbUWl6DyU" FilePath="WixToolset.Mba.Host.config" FileSize="783" Hash="B5BDD5E7179A94C2C817069913CA8C099DF811B9" Packaging="embedded" SourcePath="u0" /><Payload Id="payxj4zDAKL2NVlz4ohp0GvwFHepyI" FilePath="TestBA.dll" FileSize="25088" Hash="DB12DB6565CDBC4E9705204830E421ACEB710129" Packaging="embedded" SourcePath="u1" /><Payload Id="pay1hOSAUC8_D633cD2TXpIXCL30OU" FilePath="mbanative.dll" FileSize="118272" Hash="3A7A20D97B0546A23A025EE5774BE237C14D2957" Packaging="embedded" SourcePath="u2" /><Payload Id="payujy6Izl_BlUNfHt2eI.ADfjYAv4" FilePath="WixToolset.Mba.Core.dll" FileSize="114688" Hash="56BA3EA94BEBF8EB562C914495E1594E74F05DBE" Packaging="embedded" SourcePath="u3" /><Payload Id="payR4EbR4OTDZpPEycWaSSM_gZRBWM" FilePath="mbapreq.thm" FileSize="3599" Hash="8D9797C1E1A50AECB8B85FFCEA6A2A2EF611BD7F" Packaging="embedded" SourcePath="u4" /><Payload Id="paylVCy2Ecl8pHPdJTCQZryUG4T9us" FilePath="mbapreq.png" FileSize="797" Hash="75AE41181581FD6376CA9CA88147011E48BF9A30" Packaging="embedded" SourcePath="u5" /><Payload Id="payTaG4B_lob1aLcKFaOqSSG3MPMpU" FilePath="mbapreq.wxl" FileSize="2237" Hash="068B3C5E27AECE7987EABAA2802C9EB07B39EAF8" Packaging="embedded" SourcePath="u6" /><Payload Id="payZwIGuiezVTitZOoZKxyh2DdRSGs" FilePath="1028\mbapreq.wxl" FileSize="1998" Hash="A989D9B892F497215D81F903591ECB6CD50CFFFC" Packaging="embedded" SourcePath="u7" /><Payload Id="pay.herBWX.LlOh8jLsx24aWdunV_0" FilePath="1029\mbapreq.wxl" FileSize="2428" Hash="E6B8E4B1AA89430EB6A5A1E997CA3D1D2F968285" Packaging="embedded" SourcePath="u8" /><Payload Id="pay8DkMszYsoxxdgX14huLDMYXylQg" FilePath="1030\mbapreq.wxl" FileSize="2256" Hash="612CD2FD0CF3800639385C0BF4D805B24507D356" Packaging="embedded" SourcePath="u9" /><Payload Id="payPaHpoTeOdkW.TK99IDwktNLhTAg" FilePath="1031\mbapreq.wxl" FileSize="2409" Hash="E59A8F11D95AC17FC70BD718706EE36BFA50EF02" Packaging="embedded" SourcePath="u10" /><Payload Id="pay45AtAzterLTMzZgdxxtuYvaiXwU" FilePath="1032\mbapreq.wxl" FileSize="3368" Hash="154E0A658BA7EE59889224A231423634A9725547" Packaging="embedded" SourcePath="u11" /><Payload Id="payA2VEKIqhePyNIEmr14eyH3JoVLc" FilePath="1035\mbapreq.wxl" FileSize="2205" Hash="6AAE55269E42F99A5D88ADD18C433384DEB9E956" Packaging="embedded" SourcePath="u12" /><Payload Id="payvre23ObscjzhcaFIifUAkXMdPa8" FilePath="1036\mbapreq.wxl" FileSize="2276" Hash="7DC74874357F50AE8C4871D8F4DC06B337CF6352" Packaging="embedded" SourcePath="u13" /><Payload Id="paytxUV3vuBbG2c.a9c.d_sZX2x6wA" FilePath="1038\mbapreq.wxl" FileSize="2362" Hash="B60C34DE38E6E48BA0841E8A962C17179FC1B69A" Packaging="embedded" SourcePath="u14" /><Payload Id="payYvMWRK9xelo5.sQn7jRkJIaBp9A" FilePath="1040\mbapreq.wxl" FileSize="2273" Hash="902D231AD6306087F215DEABB7F2AB2F8072C401" Packaging="embedded" SourcePath="u15" /><Payload Id="pay68KKSApyQimbA25t6kSbqhdeH10" FilePath="1041\mbapreq.wxl" FileSize="2518" Hash="4095A1AFCF18C01F7DA51A1A389C2FBBB1A82A12" Packaging="embedded" SourcePath="u16" /><Payload Id="paypiqxaHpYZqx.9eDVjQrj1igLbRY" FilePath="1042\mbapreq.wxl" FileSize="2209" Hash="99CE8B42300EF656E6BD44F01766DC638CB0496F" Packaging="embedded" SourcePath="u17" /><Payload Id="payTO0YwZzxKpbqdrBVUcVRTu3BFe8" FilePath="1043\mbapreq.wxl" FileSize="2282" Hash="87117EE32E0004E25DDCEB1A7D417F3A02856A50" Packaging="embedded" SourcePath="u18" /><Payload Id="payIXg2ldBJukRzhqWolJVOEbTmF34" FilePath="1044\mbapreq.wxl" FileSize="2141" Hash="5AED841C6A870C3A8BAF8A10D00F887A781D0CF0" Packaging="embedded" SourcePath="u19" /><Payload Id="payOHIZbSkIvrpwKkkXI173tv3u3B4" FilePath="1045\mbapreq.wxl" FileSize="2338" Hash="07E37CBC59298F24A5C8C3B8FEB7A45DADF8CD07" Packaging="embedded" SourcePath="u20" /><Payload Id="payQRQ_UZl_R2UtV0xDXB2yeH2bg3E" FilePath="1046\mbapreq.wxl" FileSize="2118" Hash="AEC0CE51E8E335E9B86F1AC7E39CCD172B896582" Packaging="embedded" SourcePath="u21" /><Payload Id="payhrejLLBfc1i27iN._QPhQ4K337I" FilePath="1049\mbapreq.wxl" FileSize="2851" Hash="9628BADB173B171ED85D902634D9AA5D91FE9721" Packaging="embedded" SourcePath="u22" /><Payload Id="payqEzaDNzxB68vGp29jgDcCos6dvg" FilePath="1051\mbapreq.wxl" FileSize="2304" Hash="B584E8C0D7F9B7A1BB70BC00E42BFD35BED5D81D" Packaging="embedded" SourcePath="u23" /><Payload Id="paydz8Vk8xSTyYohgGXTSIxWGXL5.Q" FilePath="1053\mbapreq.wxl" FileSize="2102" Hash="67E93F555DBFEF8508E79F7CA8CE76B881308760" Packaging="embedded" SourcePath="u24" /><Payload Id="pay0HRUZTlbC3taSOffJBsEj92Br8Y" FilePath="1055\mbapreq.wxl" FileSize="2273" Hash="AEB8C90D66942A5CD73EA52A6F2ADD4F7D518A0D" Packaging="embedded" SourcePath="u25" /><Payload Id="payIvUOkc_EMH7laMFehefNolV8hZo" FilePath="1060\mbapreq.wxl" FileSize="2170" Hash="B1D4B71907B8BD82DD8B047404AF10FDBBE5CBA0" Packaging="embedded" SourcePath="u26" /><Payload Id="payLFhOb.rHuk4sW5CYAPMShG0NjGI" FilePath="2052\mbapreq.wxl" FileSize="1953" Hash="C8FB8982EC71C48D6EA021ADD9AAA7BCB0656281" Packaging="embedded" SourcePath="u27" /><Payload Id="payqIKCmERK7Nhxx_nNXvRxdKqKDbI" FilePath="2070\mbapreq.wxl" FileSize="2182" Hash="825F27A543907ED27E815EC67DFD48AF7BF5831E" Packaging="embedded" SourcePath="u28" /><Payload Id="payqeWUzIVaEqjuRXN0z8ECC3Y4tCc" FilePath="3082\mbapreq.wxl" FileSize="2369" Hash="39C07C31077AAFDC0DD208273AA41654CAD80FDD" Packaging="embedded" SourcePath="u29" /><Payload Id="paylfeHEjJSSTnNzY9QMZM2Ye3Ipy4" FilePath="mbapreq.dll" FileSize="245760" Hash="6499FA21D178131DDE13A4EF44ABEC32E91D65D4" Packaging="embedded" SourcePath="u31" /><Payload Id="payDPxs6uy8nbky.R7zhir2RRAfc.c" FilePath="WixToolset.Mba.Host.dll" FileSize="11264" Hash="9E6452891E401EB211DD41550A09FDF98EC0992F" Packaging="embedded" SourcePath="u32" /><Payload Id="uxTxMXPVMXwQrPTMIGa5WGt93w0Ns" FilePath="BootstrapperApplicationData.xml" FileSize="14292" Hash="CDF09A0723F4F33C13670BBAFCFFA7E660E15DFC" Packaging="embedded" SourcePath="u33" /><Payload Id="uxYRbgitOs0K878jn5L_z7LdJ21KI" FilePath="BundleExtensionData.xml" FileSize="252" Hash="86688B13D3364ADB90BBA552F544D4D546AFD63D" Packaging="embedded" SourcePath="u34" /></UX><Payload Id="NetFx48Web" FilePath="redist\ndp48-web.exe" FileSize="1479400" Hash="5A84A8E612E270E27D0061D58DB6B470153BE1F9" DownloadUrl="https://go.microsoft.com/fwlink/?LinkId=2085155" Packaging="external" SourcePath="redist\ndp48-web.exe" /><Payload Id="PackageA" FilePath="PackageAv1.msi" FileSize="32768" Hash="2369B16B7219B3C834DFBC5D2AF8B2EF8803D43D" Packaging="external" SourcePath="PackageAv1.msi" /><RollbackBoundary Id="WixDefaultBoundary" Vital="yes" Transaction="no" /><Registration Id="{22D1DDBA-284D-40A7-BD14-95EA07906F21}" ExecutableName="BundleA.exe" PerMachine="yes" Tag="" Version="1.0.0.0" ProviderKey="{22D1DDBA-284D-40A7-BD14-95EA07906F21}"><Arp Register="yes" DisplayName="~SlipstreamTests - BundleA" DisplayVersion="1.0.0.0" /></Registration><Chain><ExePackage Id="NetFx48Web" Cache="keep" CacheId="5A84A8E612E270E27D0061D58DB6B470153BE1F9" InstallSize="1479400" Size="1479400" PerMachine="yes" Permanent="yes" Vital="yes" RollbackBoundaryForward="WixDefaultBoundary" LogPathVariable="NetFx48WebLog" RollbackLogPathVariable="WixBundleRollbackLog_NetFx48Web" DetectCondition="NETFRAMEWORK45 >= 528040" InstallArguments="/q /norestart /ChainingPackage "[WixBundleName]" /log "[NetFx48WebLog].html"" UninstallArguments="" RepairArguments="/q /norestart /repair /ChainingPackage "[WixBundleName]" /log "[NetFx48WebLog].html"" Repairable="yes" Uninstallable="no" Protocol="netfx4"><PayloadRef Id="NetFx48Web" /></ExePackage><MsiPackage Id="PackageA" Cache="keep" CacheId="{5FF7F534-3FFC-41E0-80CD-E6361E5E7B7B}v1.0.0.0" InstallSize="2103" Size="32768" PerMachine="yes" Permanent="no" Vital="yes" RollbackBoundaryBackward="WixDefaultBoundary" LogPathVariable="WixBundleLog_PackageA" RollbackLogPathVariable="WixBundleRollbackLog_PackageA" ProductCode="{5FF7F534-3FFC-41E0-80CD-E6361E5E7B7B}" Language="1033" Version="1.0.0.0" UpgradeCode="{DB87BB66-FE5D-4293-81AC-EE313D3F864B}"><MsiProperty Id="ARPSYSTEMCOMPONENT" Value="1" /><MsiProperty Id="MSIFASTINSTALL" Value="7" /><Provides Key="{5FF7F534-3FFC-41E0-80CD-E6361E5E7B7B}" Version="1.0.0.0" DisplayName="~SlipstreamTests - PackageA" /><RelatedPackage Id="{DB87BB66-FE5D-4293-81AC-EE313D3F864B}" MaxVersion="1.0.0.0" MaxInclusive="no" OnlyDetect="no" LangInclusive="no"><Language Id="1033" /></RelatedPackage><RelatedPackage Id="{DB87BB66-FE5D-4293-81AC-EE313D3F864B}" MinVersion="1.0.0.0" MinInclusive="no" OnlyDetect="yes" LangInclusive="no"><Language Id="1033" /></RelatedPackage><PayloadRef Id="PackageA" /></MsiPackage></Chain><PatchTargetCode TargetCode="{5FF7F534-3FFC-41E0-80CD-E6361E5E7B7B}" Product="yes" /><CommandLine Variables="upperCase" /></BurnManifest> | <?xml version="1.0" encoding="utf-8"?><BurnManifest xmlns="http://wixtoolset.org/schemas/v4/2008/Burn"><Log PathVariable="WixBundleLog" Prefix="~SlipstreamTests_BundleA" Extension=".log" /><RelatedBundle Id="{62C28DAF-A13E-4F55-ACA1-FB843630789C}" Action="Upgrade" /><Variable Id="TestGroupName" Value="SlipstreamTests" Type="string" Hidden="no" Persisted="no" /><Variable Id="WixBundleName" Hidden="no" Persisted="yes" /><Variable Id="WixBundleOriginalSource" Hidden="no" Persisted="yes" /><Variable Id="WixBundleOriginalSourceFolder" Hidden="no" Persisted="yes" /><Variable Id="WixBundleLastUsedSource" Hidden="no" Persisted="yes" /><RegistrySearch Id="NETFRAMEWORK45" Variable="NETFRAMEWORK45" Root="HKLM" Key="SOFTWARE\Microsoft\NET Framework Setup\NDP\v4\Full" Value="Release" Type="value" VariableType="string" /><UX><Payload Id="WixManagedBootstrapperApplicationHost" FilePath="mbahost.dll" FileSize="140288" Hash="4569C53566B1025E243E0C29A96C608BD4019979" Packaging="embedded" SourcePath="u30" /><Payload Id="payO60IVK4ATGzPpMz3rwVbUWl6DyU" FilePath="WixToolset.Mba.Host.config" FileSize="783" Hash="B5BDD5E7179A94C2C817069913CA8C099DF811B9" Packaging="embedded" SourcePath="u0" /><Payload Id="payxj4zDAKL2NVlz4ohp0GvwFHepyI" FilePath="TestBA.dll" FileSize="25088" Hash="DB12DB6565CDBC4E9705204830E421ACEB710129" Packaging="embedded" SourcePath="u1" /><Payload Id="pay1hOSAUC8_D633cD2TXpIXCL30OU" FilePath="mbanative.dll" FileSize="118272" Hash="3A7A20D97B0546A23A025EE5774BE237C14D2957" Packaging="embedded" SourcePath="u2" /><Payload Id="payujy6Izl_BlUNfHt2eI.ADfjYAv4" FilePath="WixToolset.Mba.Core.dll" FileSize="114688" Hash="56BA3EA94BEBF8EB562C914495E1594E74F05DBE" Packaging="embedded" SourcePath="u3" /><Payload Id="payR4EbR4OTDZpPEycWaSSM_gZRBWM" FilePath="mbapreq.thm" FileSize="3599" Hash="8D9797C1E1A50AECB8B85FFCEA6A2A2EF611BD7F" Packaging="embedded" SourcePath="u4" /><Payload Id="paylVCy2Ecl8pHPdJTCQZryUG4T9us" FilePath="mbapreq.png" FileSize="797" Hash="75AE41181581FD6376CA9CA88147011E48BF9A30" Packaging="embedded" SourcePath="u5" /><Payload Id="payTaG4B_lob1aLcKFaOqSSG3MPMpU" FilePath="mbapreq.wxl" FileSize="2237" Hash="068B3C5E27AECE7987EABAA2802C9EB07B39EAF8" Packaging="embedded" SourcePath="u6" /><Payload Id="payZwIGuiezVTitZOoZKxyh2DdRSGs" FilePath="1028\mbapreq.wxl" FileSize="1998" Hash="A989D9B892F497215D81F903591ECB6CD50CFFFC" Packaging="embedded" SourcePath="u7" /><Payload Id="pay.herBWX.LlOh8jLsx24aWdunV_0" FilePath="1029\mbapreq.wxl" FileSize="2428" Hash="E6B8E4B1AA89430EB6A5A1E997CA3D1D2F968285" Packaging="embedded" SourcePath="u8" /><Payload Id="pay8DkMszYsoxxdgX14huLDMYXylQg" FilePath="1030\mbapreq.wxl" FileSize="2256" Hash="612CD2FD0CF3800639385C0BF4D805B24507D356" Packaging="embedded" SourcePath="u9" /><Payload Id="payPaHpoTeOdkW.TK99IDwktNLhTAg" FilePath="1031\mbapreq.wxl" FileSize="2409" Hash="E59A8F11D95AC17FC70BD718706EE36BFA50EF02" Packaging="embedded" SourcePath="u10" /><Payload Id="pay45AtAzterLTMzZgdxxtuYvaiXwU" FilePath="1032\mbapreq.wxl" FileSize="3368" Hash="154E0A658BA7EE59889224A231423634A9725547" Packaging="embedded" SourcePath="u11" /><Payload Id="payA2VEKIqhePyNIEmr14eyH3JoVLc" FilePath="1035\mbapreq.wxl" FileSize="2205" Hash="6AAE55269E42F99A5D88ADD18C433384DEB9E956" Packaging="embedded" SourcePath="u12" /><Payload Id="payvre23ObscjzhcaFIifUAkXMdPa8" FilePath="1036\mbapreq.wxl" FileSize="2276" Hash="7DC74874357F50AE8C4871D8F4DC06B337CF6352" Packaging="embedded" SourcePath="u13" /><Payload Id="paytxUV3vuBbG2c.a9c.d_sZX2x6wA" FilePath="1038\mbapreq.wxl" FileSize="2362" Hash="B60C34DE38E6E48BA0841E8A962C17179FC1B69A" Packaging="embedded" SourcePath="u14" /><Payload Id="payYvMWRK9xelo5.sQn7jRkJIaBp9A" FilePath="1040\mbapreq.wxl" FileSize="2273" Hash="902D231AD6306087F215DEABB7F2AB2F8072C401" Packaging="embedded" SourcePath="u15" /><Payload Id="pay68KKSApyQimbA25t6kSbqhdeH10" FilePath="1041\mbapreq.wxl" FileSize="2518" Hash="4095A1AFCF18C01F7DA51A1A389C2FBBB1A82A12" Packaging="embedded" SourcePath="u16" /><Payload Id="paypiqxaHpYZqx.9eDVjQrj1igLbRY" FilePath="1042\mbapreq.wxl" FileSize="2209" Hash="99CE8B42300EF656E6BD44F01766DC638CB0496F" Packaging="embedded" SourcePath="u17" /><Payload Id="payTO0YwZzxKpbqdrBVUcVRTu3BFe8" FilePath="1043\mbapreq.wxl" FileSize="2282" Hash="87117EE32E0004E25DDCEB1A7D417F3A02856A50" Packaging="embedded" SourcePath="u18" /><Payload Id="payIXg2ldBJukRzhqWolJVOEbTmF34" FilePath="1044\mbapreq.wxl" FileSize="2141" Hash="5AED841C6A870C3A8BAF8A10D00F887A781D0CF0" Packaging="embedded" SourcePath="u19" /><Payload Id="payOHIZbSkIvrpwKkkXI173tv3u3B4" FilePath="1045\mbapreq.wxl" FileSize="2338" Hash="07E37CBC59298F24A5C8C3B8FEB7A45DADF8CD07" Packaging="embedded" SourcePath="u20" /><Payload Id="payQRQ_UZl_R2UtV0xDXB2yeH2bg3E" FilePath="1046\mbapreq.wxl" FileSize="2118" Hash="AEC0CE51E8E335E9B86F1AC7E39CCD172B896582" Packaging="embedded" SourcePath="u21" /><Payload Id="payhrejLLBfc1i27iN._QPhQ4K337I" FilePath="1049\mbapreq.wxl" FileSize="2851" Hash="9628BADB173B171ED85D902634D9AA5D91FE9721" Packaging="embedded" SourcePath="u22" /><Payload Id="payqEzaDNzxB68vGp29jgDcCos6dvg" FilePath="1051\mbapreq.wxl" FileSize="2304" Hash="B584E8C0D7F9B7A1BB70BC00E42BFD35BED5D81D" Packaging="embedded" SourcePath="u23" /><Payload Id="paydz8Vk8xSTyYohgGXTSIxWGXL5.Q" FilePath="1053\mbapreq.wxl" FileSize="2102" Hash="67E93F555DBFEF8508E79F7CA8CE76B881308760" Packaging="embedded" SourcePath="u24" /><Payload Id="pay0HRUZTlbC3taSOffJBsEj92Br8Y" FilePath="1055\mbapreq.wxl" FileSize="2273" Hash="AEB8C90D66942A5CD73EA52A6F2ADD4F7D518A0D" Packaging="embedded" SourcePath="u25" /><Payload Id="payIvUOkc_EMH7laMFehefNolV8hZo" FilePath="1060\mbapreq.wxl" FileSize="2170" Hash="B1D4B71907B8BD82DD8B047404AF10FDBBE5CBA0" Packaging="embedded" SourcePath="u26" /><Payload Id="payLFhOb.rHuk4sW5CYAPMShG0NjGI" FilePath="2052\mbapreq.wxl" FileSize="1953" Hash="C8FB8982EC71C48D6EA021ADD9AAA7BCB0656281" Packaging="embedded" SourcePath="u27" /><Payload Id="payqIKCmERK7Nhxx_nNXvRxdKqKDbI" FilePath="2070\mbapreq.wxl" FileSize="2182" Hash="825F27A543907ED27E815EC67DFD48AF7BF5831E" Packaging="embedded" SourcePath="u28" /><Payload Id="payqeWUzIVaEqjuRXN0z8ECC3Y4tCc" FilePath="3082\mbapreq.wxl" FileSize="2369" Hash="39C07C31077AAFDC0DD208273AA41654CAD80FDD" Packaging="embedded" SourcePath="u29" /><Payload Id="paylfeHEjJSSTnNzY9QMZM2Ye3Ipy4" FilePath="mbapreq.dll" FileSize="245760" Hash="6499FA21D178131DDE13A4EF44ABEC32E91D65D4" Packaging="embedded" SourcePath="u31" /><Payload Id="payDPxs6uy8nbky.R7zhir2RRAfc.c" FilePath="WixToolset.Mba.Host.dll" FileSize="11264" Hash="9E6452891E401EB211DD41550A09FDF98EC0992F" Packaging="embedded" SourcePath="u32" /><Payload Id="uxTxMXPVMXwQrPTMIGa5WGt93w0Ns" FilePath="BootstrapperApplicationData.xml" FileSize="14292" Hash="CDF09A0723F4F33C13670BBAFCFFA7E660E15DFC" Packaging="embedded" SourcePath="u33" /><Payload Id="uxYRbgitOs0K878jn5L_z7LdJ21KI" FilePath="BundleExtensionData.xml" FileSize="252" Hash="86688B13D3364ADB90BBA552F544D4D546AFD63D" Packaging="embedded" SourcePath="u34" /></UX><Payload Id="NetFx48Web" FilePath="redist\ndp48-web.exe" FileSize="1479400" Hash="5A84A8E612E270E27D0061D58DB6B470153BE1F9" DownloadUrl="https://go.microsoft.com/fwlink/?LinkId=2085155" Packaging="external" SourcePath="redist\ndp48-web.exe" /><Payload Id="PackageA" FilePath="PackageAv1.msi" FileSize="32768" Hash="2369B16B7219B3C834DFBC5D2AF8B2EF8803D43D" Packaging="external" SourcePath="PackageAv1.msi" /><RollbackBoundary Id="WixDefaultBoundary" Vital="yes" Transaction="no" /><Registration Id="{22D1DDBA-284D-40A7-BD14-95EA07906F21}" ExecutableName="BundleA.exe" PerMachine="yes" Tag="" Version="1.0.0.0" ProviderKey="{DC94A8E0-4BF4-4026-B80B-2755DAFC05D3}"><Arp Register="yes" DisplayName="~SlipstreamTests - BundleA" DisplayVersion="1.0.0.0" /></Registration><Chain><ExePackage Id="NetFx48Web" Cache="keep" CacheId="5A84A8E612E270E27D0061D58DB6B470153BE1F9" InstallSize="1479400" Size="1479400" PerMachine="yes" Permanent="yes" Vital="yes" RollbackBoundaryForward="WixDefaultBoundary" LogPathVariable="NetFx48WebLog" RollbackLogPathVariable="WixBundleRollbackLog_NetFx48Web" DetectCondition="NETFRAMEWORK45 >= 528040" InstallArguments="/q /norestart /ChainingPackage "[WixBundleName]" /log "[NetFx48WebLog].html"" UninstallArguments="" RepairArguments="/q /norestart /repair /ChainingPackage "[WixBundleName]" /log "[NetFx48WebLog].html"" Repairable="yes" Uninstallable="no" Protocol="netfx4"><PayloadRef Id="NetFx48Web" /></ExePackage><MsiPackage Id="PackageA" Cache="keep" CacheId="{5FF7F534-3FFC-41E0-80CD-E6361E5E7B7B}v1.0.0.0" InstallSize="2103" Size="32768" PerMachine="yes" Permanent="no" Vital="yes" RollbackBoundaryBackward="WixDefaultBoundary" LogPathVariable="WixBundleLog_PackageA" RollbackLogPathVariable="WixBundleRollbackLog_PackageA" ProductCode="{5FF7F534-3FFC-41E0-80CD-E6361E5E7B7B}" Language="1033" Version="1.0.0.0" UpgradeCode="{DB87BB66-FE5D-4293-81AC-EE313D3F864B}"><MsiProperty Id="ARPSYSTEMCOMPONENT" Value="1" /><MsiProperty Id="MSIFASTINSTALL" Value="7" /><Provides Key="{5FF7F534-3FFC-41E0-80CD-E6361E5E7B7B}" Version="1.0.0.0" DisplayName="~SlipstreamTests - PackageA" /><RelatedPackage Id="{DB87BB66-FE5D-4293-81AC-EE313D3F864B}" MaxVersion="1.0.0.0" MaxInclusive="no" OnlyDetect="no" LangInclusive="no"><Language Id="1033" /></RelatedPackage><RelatedPackage Id="{DB87BB66-FE5D-4293-81AC-EE313D3F864B}" MinVersion="1.0.0.0" MinInclusive="no" OnlyDetect="yes" LangInclusive="no"><Language Id="1033" /></RelatedPackage><PayloadRef Id="PackageA" /></MsiPackage></Chain><PatchTargetCode TargetCode="{5FF7F534-3FFC-41E0-80CD-E6361E5E7B7B}" Product="yes" /><CommandLine Variables="upperCase" /></BurnManifest> | ||
