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 | |
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.
-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> | ||