aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSean Hall <r.sean.hall@gmail.com>2022-01-31 16:19:32 -0600
committerSean Hall <r.sean.hall@gmail.com>2022-02-01 23:36:23 -0600
commiteae94502fe8e7ca601161360a7d31e93edc88763 (patch)
tree51fc862014a74c6fb2f303f90b4ca5999f3647d0
parentb152761dfddc0a131dcd13f70ae0e9b9e41b37fe (diff)
downloadwix-eae94502fe8e7ca601161360a7d31e93edc88763.tar.gz
wix-eae94502fe8e7ca601161360a7d31e93edc88763.tar.bz2
wix-eae94502fe8e7ca601161360a7d31e93edc88763.zip
Plan each dependency provider individually.
Refactoring for #6510
-rw-r--r--src/burn/engine/apply.cpp17
-rw-r--r--src/burn/engine/dependency.cpp132
-rw-r--r--src/burn/engine/dependency.h3
-rw-r--r--src/burn/engine/elevation.cpp45
-rw-r--r--src/burn/engine/elevation.h3
-rw-r--r--src/burn/engine/package.h7
-rw-r--r--src/burn/engine/plan.cpp19
-rw-r--r--src/burn/engine/plan.h1
-rw-r--r--src/burn/test/BurnUnitTest/PlanTest.cpp73
9 files changed, 187 insertions, 113 deletions
diff --git a/src/burn/engine/apply.cpp b/src/burn/engine/apply.cpp
index 9185e33a..2168cba6 100644
--- a/src/burn/engine/apply.cpp
+++ b/src/burn/engine/apply.cpp
@@ -252,7 +252,8 @@ static HRESULT ExecuteMsuPackage(
252static HRESULT ExecutePackageProviderAction( 252static HRESULT ExecutePackageProviderAction(
253 __in BURN_ENGINE_STATE* pEngineState, 253 __in BURN_ENGINE_STATE* pEngineState,
254 __in BURN_EXECUTE_ACTION* pAction, 254 __in BURN_EXECUTE_ACTION* pAction,
255 __in BURN_EXECUTE_CONTEXT* pContext 255 __in BURN_EXECUTE_CONTEXT* pContext,
256 __in BOOL fRollback
256 ); 257 );
257static HRESULT ExecuteDependencyAction( 258static HRESULT ExecuteDependencyAction(
258 __in BURN_ENGINE_STATE* pEngineState, 259 __in BURN_ENGINE_STATE* pEngineState,
@@ -2351,7 +2352,7 @@ static HRESULT DoExecuteAction(
2351 break; 2352 break;
2352 2353
2353 case BURN_EXECUTE_ACTION_TYPE_PACKAGE_PROVIDER: 2354 case BURN_EXECUTE_ACTION_TYPE_PACKAGE_PROVIDER:
2354 hr = ExecutePackageProviderAction(pEngineState, pExecuteAction, pContext); 2355 hr = ExecutePackageProviderAction(pEngineState, pExecuteAction, pContext, FALSE);
2355 ExitOnFailure(hr, "Failed to execute package provider registration action."); 2356 ExitOnFailure(hr, "Failed to execute package provider registration action.");
2356 break; 2357 break;
2357 2358
@@ -2474,7 +2475,7 @@ static HRESULT DoRollbackActions(
2474 break; 2475 break;
2475 2476
2476 case BURN_EXECUTE_ACTION_TYPE_PACKAGE_PROVIDER: 2477 case BURN_EXECUTE_ACTION_TYPE_PACKAGE_PROVIDER:
2477 hr = ExecutePackageProviderAction(pEngineState, pRollbackAction, pContext); 2478 hr = ExecutePackageProviderAction(pEngineState, pRollbackAction, pContext, TRUE);
2478 IgnoreRollbackError(hr, "Failed to rollback package provider action."); 2479 IgnoreRollbackError(hr, "Failed to rollback package provider action.");
2479 break; 2480 break;
2480 2481
@@ -2887,19 +2888,23 @@ LExit:
2887static HRESULT ExecutePackageProviderAction( 2888static HRESULT ExecutePackageProviderAction(
2888 __in BURN_ENGINE_STATE* pEngineState, 2889 __in BURN_ENGINE_STATE* pEngineState,
2889 __in BURN_EXECUTE_ACTION* pAction, 2890 __in BURN_EXECUTE_ACTION* pAction,
2890 __in BURN_EXECUTE_CONTEXT* /*pContext*/ 2891 __in BURN_EXECUTE_CONTEXT* pContext,
2892 __in BOOL fRollback
2891 ) 2893 )
2892{ 2894{
2893 HRESULT hr = S_OK; 2895 HRESULT hr = S_OK;
2894 2896
2897 Assert(pContext->fRollback == fRollback);
2898 UNREFERENCED_PARAMETER(pContext);
2899
2895 if (pAction->packageProvider.pPackage->fPerMachine) 2900 if (pAction->packageProvider.pPackage->fPerMachine)
2896 { 2901 {
2897 hr = ElevationExecutePackageProviderAction(pEngineState->companionConnection.hPipe, pAction); 2902 hr = ElevationExecutePackageProviderAction(pEngineState->companionConnection.hPipe, pAction, fRollback);
2898 ExitOnFailure(hr, "Failed to register the package provider on per-machine package."); 2903 ExitOnFailure(hr, "Failed to register the package provider on per-machine package.");
2899 } 2904 }
2900 else 2905 else
2901 { 2906 {
2902 hr = DependencyExecutePackageProviderAction(pAction); 2907 hr = DependencyExecutePackageProviderAction(pAction, fRollback);
2903 ExitOnFailure(hr, "Failed to register the package provider on per-user package."); 2908 ExitOnFailure(hr, "Failed to register the package provider on per-user package.");
2904 } 2909 }
2905 2910
diff --git a/src/burn/engine/dependency.cpp b/src/burn/engine/dependency.cpp
index e94b0e93..8f568f28 100644
--- a/src/burn/engine/dependency.cpp
+++ b/src/burn/engine/dependency.cpp
@@ -59,11 +59,17 @@ static LPCWSTR GetPackageProviderId(
59 ); 59 );
60 60
61static HRESULT RegisterPackageProvider( 61static HRESULT RegisterPackageProvider(
62 __in const BURN_PACKAGE* pPackage 62 __in const BURN_DEPENDENCY_PROVIDER* pProvider,
63 __in LPCWSTR wzPackageId,
64 __in LPCWSTR wzPackageProviderId,
65 __in HKEY hkRoot,
66 __in BOOL fVital
63 ); 67 );
64 68
65static void UnregisterPackageProvider( 69static void UnregisterPackageProvider(
66 __in const BURN_PACKAGE* pPackage 70 __in const BURN_DEPENDENCY_PROVIDER* pProvider,
71 __in LPCWSTR wzPackageId,
72 __in HKEY hkRoot
67 ); 73 );
68 74
69static HRESULT RegisterPackageDependency( 75static HRESULT RegisterPackageDependency(
@@ -489,6 +495,8 @@ extern "C" HRESULT DependencyPlanPackageBegin(
489 { 495 {
490 pPackage->execute = BOOTSTRAPPER_ACTION_STATE_NONE; 496 pPackage->execute = BOOTSTRAPPER_ACTION_STATE_NONE;
491 pPackage->rollback = BOOTSTRAPPER_ACTION_STATE_NONE; 497 pPackage->rollback = BOOTSTRAPPER_ACTION_STATE_NONE;
498
499 // Assume the compatible package has the same exact providers.
492 pPackage->compatiblePackage.fRemove = FALSE; 500 pPackage->compatiblePackage.fRemove = FALSE;
493 } 501 }
494 else 502 else
@@ -511,8 +519,22 @@ extern "C" HRESULT DependencyPlanPackageBegin(
511 519
512 if (!fAllImportedProviders) 520 if (!fAllImportedProviders)
513 { 521 {
514 pPackage->providerExecute = dependencyExecuteAction; 522 for (DWORD i = 0; i < pPackage->cDependencyProviders; ++i)
515 pPackage->providerRollback = dependencyRollbackAction; 523 {
524 BURN_DEPENDENCY_PROVIDER* pProvider = &pPackage->rgDependencyProviders[i];
525 pProvider->providerExecute = dependencyExecuteAction;
526 pProvider->providerRollback = dependencyRollbackAction;
527 }
528
529 if (BURN_DEPENDENCY_ACTION_NONE != dependencyExecuteAction)
530 {
531 pPackage->fProviderExecute = TRUE;
532 }
533
534 if (BURN_DEPENDENCY_ACTION_NONE != dependencyRollbackAction)
535 {
536 pPackage->fProviderRollback = TRUE;
537 }
516 } 538 }
517 } 539 }
518 540
@@ -556,14 +578,13 @@ extern "C" HRESULT DependencyPlanPackage(
556 } 578 }
557 579
558 // Add the provider rollback plan. 580 // Add the provider rollback plan.
559 if (BURN_DEPENDENCY_ACTION_NONE != pPackage->providerRollback) 581 if (pPackage->fProviderRollback)
560 { 582 {
561 hr = PlanAppendRollbackAction(pPlan, &pAction); 583 hr = PlanAppendRollbackAction(pPlan, &pAction);
562 ExitOnFailure(hr, "Failed to append provider rollback action."); 584 ExitOnFailure(hr, "Failed to append provider rollback action.");
563 585
564 pAction->type = BURN_EXECUTE_ACTION_TYPE_PACKAGE_PROVIDER; 586 pAction->type = BURN_EXECUTE_ACTION_TYPE_PACKAGE_PROVIDER;
565 pAction->packageProvider.pPackage = const_cast<BURN_PACKAGE*>(pPackage); 587 pAction->packageProvider.pPackage = const_cast<BURN_PACKAGE*>(pPackage);
566 pAction->packageProvider.action = pPackage->providerRollback;
567 588
568 // Put a checkpoint before the execute action so that rollback happens 589 // Put a checkpoint before the execute action so that rollback happens
569 // if execute fails. 590 // if execute fails.
@@ -573,7 +594,7 @@ extern "C" HRESULT DependencyPlanPackage(
573 594
574 // Add the provider execute plan. This comes after rollback so if something goes wrong 595 // Add the provider execute plan. This comes after rollback so if something goes wrong
575 // rollback will try to clean up after us. 596 // rollback will try to clean up after us.
576 if (BURN_DEPENDENCY_ACTION_NONE != pPackage->providerExecute) 597 if (pPackage->fProviderExecute)
577 { 598 {
578 if (NULL != pdwInsertSequence) 599 if (NULL != pdwInsertSequence)
579 { 600 {
@@ -592,7 +613,6 @@ extern "C" HRESULT DependencyPlanPackage(
592 613
593 pAction->type = BURN_EXECUTE_ACTION_TYPE_PACKAGE_PROVIDER; 614 pAction->type = BURN_EXECUTE_ACTION_TYPE_PACKAGE_PROVIDER;
594 pAction->packageProvider.pPackage = const_cast<BURN_PACKAGE*>(pPackage); 615 pAction->packageProvider.pPackage = const_cast<BURN_PACKAGE*>(pPackage);
595 pAction->packageProvider.action = pPackage->providerExecute;
596 } 616 }
597 617
598LExit: 618LExit:
@@ -627,26 +647,39 @@ LExit:
627} 647}
628 648
629extern "C" HRESULT DependencyExecutePackageProviderAction( 649extern "C" HRESULT DependencyExecutePackageProviderAction(
630 __in const BURN_EXECUTE_ACTION* pAction 650 __in const BURN_EXECUTE_ACTION* pAction,
651 __in BOOL fRollback
631 ) 652 )
632{ 653{
633 AssertSz(BURN_EXECUTE_ACTION_TYPE_PACKAGE_PROVIDER == pAction->type, "Execute action type not supported by this function."); 654 AssertSz(BURN_EXECUTE_ACTION_TYPE_PACKAGE_PROVIDER == pAction->type, "Execute action type not supported by this function.");
634 655
635 HRESULT hr = S_OK; 656 HRESULT hr = S_OK;
636 const BURN_PACKAGE* pPackage = pAction->packageProvider.pPackage; 657 const BURN_PACKAGE* pPackage = pAction->packageProvider.pPackage;
658 HKEY hkRoot = pPackage->fPerMachine ? HKEY_LOCAL_MACHINE : HKEY_CURRENT_USER;
659 LPCWSTR wzId = GetPackageProviderId(pPackage);
637 660
638 // Register or unregister the package provider(s). 661 for (DWORD i = 0; i < pPackage->cDependencyProviders; ++i)
639 if (BURN_DEPENDENCY_ACTION_REGISTER == pAction->packageProvider.action)
640 {
641 hr = RegisterPackageProvider(pPackage);
642 ExitOnFailure(hr, "Failed to register the package providers.");
643 }
644 else if (BURN_DEPENDENCY_ACTION_UNREGISTER == pAction->packageProvider.action)
645 { 662 {
646 UnregisterPackageProvider(pPackage); 663 const BURN_DEPENDENCY_PROVIDER* pProvider = pPackage->rgDependencyProviders + i;
664 BURN_DEPENDENCY_ACTION action = fRollback ? pProvider->providerRollback : pProvider->providerExecute;
665 HRESULT hrProvider = S_OK;
666
667 // Register or unregister the package provider.
668 switch (action)
669 {
670 case BURN_DEPENDENCY_ACTION_REGISTER:
671 hrProvider = RegisterPackageProvider(pProvider, pPackage->sczId, wzId, hkRoot, pPackage->fVital);
672 if (SUCCEEDED(hr) && FAILED(hrProvider))
673 {
674 hr = hrProvider;
675 }
676 break;
677 case BURN_DEPENDENCY_ACTION_UNREGISTER:
678 UnregisterPackageProvider(pProvider, pPackage->sczId, hkRoot);
679 break;
680 }
647 } 681 }
648 682
649LExit:
650 if (!pPackage->fVital) 683 if (!pPackage->fVital)
651 { 684 {
652 hr = S_OK; 685 hr = S_OK;
@@ -1175,7 +1208,7 @@ static void CalculateDependencyActionStates(
1175 case BOOTSTRAPPER_ACTION_STATE_INSTALL: __fallthrough; 1208 case BOOTSTRAPPER_ACTION_STATE_INSTALL: __fallthrough;
1176 case BOOTSTRAPPER_ACTION_STATE_MODIFY: __fallthrough; 1209 case BOOTSTRAPPER_ACTION_STATE_MODIFY: __fallthrough;
1177 case BOOTSTRAPPER_ACTION_STATE_REPAIR: __fallthrough; 1210 case BOOTSTRAPPER_ACTION_STATE_REPAIR: __fallthrough;
1178 case BOOTSTRAPPER_ACTION_STATE_MINOR_UPGRADE: __fallthrough; 1211 case BOOTSTRAPPER_ACTION_STATE_MINOR_UPGRADE:
1179 *pDependencyExecuteAction = BURN_DEPENDENCY_ACTION_REGISTER; 1212 *pDependencyExecuteAction = BURN_DEPENDENCY_ACTION_REGISTER;
1180 break; 1213 break;
1181 } 1214 }
@@ -1188,7 +1221,7 @@ static void CalculateDependencyActionStates(
1188 switch (pPackage->currentState) 1221 switch (pPackage->currentState)
1189 { 1222 {
1190 case BOOTSTRAPPER_PACKAGE_STATE_OBSOLETE: __fallthrough; 1223 case BOOTSTRAPPER_PACKAGE_STATE_OBSOLETE: __fallthrough;
1191 case BOOTSTRAPPER_PACKAGE_STATE_ABSENT: __fallthrough; 1224 case BOOTSTRAPPER_PACKAGE_STATE_ABSENT:
1192 *pDependencyRollbackAction = BURN_DEPENDENCY_ACTION_UNREGISTER; 1225 *pDependencyRollbackAction = BURN_DEPENDENCY_ACTION_UNREGISTER;
1193 break; 1226 break;
1194 } 1227 }
@@ -1291,32 +1324,25 @@ static LPCWSTR GetPackageProviderId(
1291} 1324}
1292 1325
1293static HRESULT RegisterPackageProvider( 1326static HRESULT RegisterPackageProvider(
1294 __in const BURN_PACKAGE* pPackage 1327 __in const BURN_DEPENDENCY_PROVIDER* pProvider,
1328 __in LPCWSTR wzPackageId,
1329 __in LPCWSTR wzPackageProviderId,
1330 __in HKEY hkRoot,
1331 __in BOOL fVital
1295 ) 1332 )
1296{ 1333{
1297 HRESULT hr = S_OK; 1334 HRESULT hr = S_OK;
1298 1335
1299 if (pPackage->rgDependencyProviders) 1336 if (!pProvider->fImported)
1300 { 1337 {
1301 HKEY hkRoot = pPackage->fPerMachine ? HKEY_LOCAL_MACHINE : HKEY_CURRENT_USER; 1338 LogId(REPORT_VERBOSE, MSG_DEPENDENCY_PACKAGE_REGISTER, pProvider->sczKey, pProvider->sczVersion, wzPackageId);
1302 LPCWSTR wzId = GetPackageProviderId(pPackage);
1303
1304 for (DWORD i = 0; i < pPackage->cDependencyProviders; ++i)
1305 {
1306 const BURN_DEPENDENCY_PROVIDER* pProvider = &pPackage->rgDependencyProviders[i];
1307
1308 if (!pProvider->fImported)
1309 {
1310 LogId(REPORT_VERBOSE, MSG_DEPENDENCY_PACKAGE_REGISTER, pProvider->sczKey, pProvider->sczVersion, pPackage->sczId);
1311 1339
1312 hr = DepRegisterDependency(hkRoot, pProvider->sczKey, pProvider->sczVersion, pProvider->sczDisplayName, wzId, 0); 1340 hr = DepRegisterDependency(hkRoot, pProvider->sczKey, pProvider->sczVersion, pProvider->sczDisplayName, wzPackageProviderId, 0);
1313 ExitOnFailure(hr, "Failed to register the package dependency provider: %ls", pProvider->sczKey); 1341 ExitOnFailure(hr, "Failed to register the package dependency provider: %ls", pProvider->sczKey);
1314 }
1315 }
1316 } 1342 }
1317 1343
1318LExit: 1344LExit:
1319 if (!pPackage->fVital) 1345 if (!fVital)
1320 { 1346 {
1321 hr = S_OK; 1347 hr = S_OK;
1322 } 1348 }
@@ -1325,36 +1351,28 @@ LExit:
1325} 1351}
1326 1352
1327/******************************************************************** 1353/********************************************************************
1328 UnregisterPackageProvider - Removes each dependency provider 1354 UnregisterPackageProvider - Removes the dependency provider.
1329 for the package (if not imported from the package itself).
1330 1355
1331 Note: Does not check for existing dependents before removing the key. 1356 Note: Does not check for existing dependents before removing the key.
1332*********************************************************************/ 1357*********************************************************************/
1333static void UnregisterPackageProvider( 1358static void UnregisterPackageProvider(
1334 __in const BURN_PACKAGE* pPackage 1359 __in const BURN_DEPENDENCY_PROVIDER* pProvider,
1360 __in LPCWSTR wzPackageId,
1361 __in HKEY hkRoot
1335 ) 1362 )
1336{ 1363{
1337 HRESULT hr = S_OK; 1364 HRESULT hr = S_OK;
1338 HKEY hkRoot = pPackage->fPerMachine ? HKEY_LOCAL_MACHINE : HKEY_CURRENT_USER;
1339 1365
1340 if (pPackage->rgDependencyProviders) 1366 if (!pProvider->fImported)
1341 { 1367 {
1342 for (DWORD i = 0; i < pPackage->cDependencyProviders; ++i) 1368 hr = DepUnregisterDependency(hkRoot, pProvider->sczKey);
1369 if (SUCCEEDED(hr))
1343 { 1370 {
1344 const BURN_DEPENDENCY_PROVIDER* pProvider = &pPackage->rgDependencyProviders[i]; 1371 LogId(REPORT_VERBOSE, MSG_DEPENDENCY_PACKAGE_UNREGISTERED, pProvider->sczKey, wzPackageId);
1345 1372 }
1346 if (!pProvider->fImported) 1373 else if (FAILED(hr) && E_FILENOTFOUND != hr)
1347 { 1374 {
1348 hr = DepUnregisterDependency(hkRoot, pProvider->sczKey); 1375 LogId(REPORT_VERBOSE, MSG_DEPENDENCY_PACKAGE_UNREGISTERED_FAILED, pProvider->sczKey, wzPackageId, hr);
1349 if (SUCCEEDED(hr))
1350 {
1351 LogId(REPORT_VERBOSE, MSG_DEPENDENCY_PACKAGE_UNREGISTERED, pProvider->sczKey, pPackage->sczId);
1352 }
1353 else if (FAILED(hr) && E_FILENOTFOUND != hr)
1354 {
1355 LogId(REPORT_VERBOSE, MSG_DEPENDENCY_PACKAGE_UNREGISTERED_FAILED, pProvider->sczKey, pPackage->sczId, hr);
1356 }
1357 }
1358 } 1376 }
1359 } 1377 }
1360} 1378}
diff --git a/src/burn/engine/dependency.h b/src/burn/engine/dependency.h
index 41718066..0e558554 100644
--- a/src/burn/engine/dependency.h
+++ b/src/burn/engine/dependency.h
@@ -150,7 +150,8 @@ HRESULT DependencyPlanPackageComplete(
150 150
151*********************************************************************/ 151*********************************************************************/
152HRESULT DependencyExecutePackageProviderAction( 152HRESULT DependencyExecutePackageProviderAction(
153 __in const BURN_EXECUTE_ACTION* pAction 153 __in const BURN_EXECUTE_ACTION* pAction,
154 __in BOOL fRollback
154 ); 155 );
155 156
156/******************************************************************** 157/********************************************************************
diff --git a/src/burn/engine/elevation.cpp b/src/burn/engine/elevation.cpp
index eafc08ee..75679acd 100644
--- a/src/burn/engine/elevation.cpp
+++ b/src/burn/engine/elevation.cpp
@@ -1305,7 +1305,8 @@ LExit:
1305 1305
1306extern "C" HRESULT ElevationExecutePackageProviderAction( 1306extern "C" HRESULT ElevationExecutePackageProviderAction(
1307 __in HANDLE hPipe, 1307 __in HANDLE hPipe,
1308 __in BURN_EXECUTE_ACTION* pExecuteAction 1308 __in BURN_EXECUTE_ACTION* pExecuteAction,
1309 __in BOOL fRollback
1309 ) 1310 )
1310{ 1311{
1311 HRESULT hr = S_OK; 1312 HRESULT hr = S_OK;
@@ -1318,8 +1319,17 @@ extern "C" HRESULT ElevationExecutePackageProviderAction(
1318 hr = BuffWriteString(&pbData, &cbData, pExecuteAction->packageProvider.pPackage->sczId); 1319 hr = BuffWriteString(&pbData, &cbData, pExecuteAction->packageProvider.pPackage->sczId);
1319 ExitOnFailure(hr, "Failed to write package id to message buffer."); 1320 ExitOnFailure(hr, "Failed to write package id to message buffer.");
1320 1321
1321 hr = BuffWriteNumber(&pbData, &cbData, pExecuteAction->packageProvider.action); 1322 hr = BuffWriteNumber(&pbData, &cbData, (DWORD)fRollback);
1322 ExitOnFailure(hr, "Failed to write action to message buffer."); 1323 ExitOnFailure(hr, "Failed to write rollback flag to message buffer.");
1324
1325 // Provider actions.
1326 for (DWORD i = 0; i < pExecuteAction->packageProvider.pPackage->cDependencyProviders; ++i)
1327 {
1328 BURN_DEPENDENCY_PROVIDER* pProvider = pExecuteAction->packageProvider.pPackage->rgDependencyProviders + i;
1329 BURN_DEPENDENCY_ACTION* pAction = fRollback ? &pProvider->providerRollback : &pProvider->providerExecute;
1330 hr = BuffWriteNumber(&pbData, &cbData, (DWORD)*pAction);
1331 ExitOnFailure(hr, "Failed to write provider action to message buffer.");
1332 }
1323 1333
1324 // Send the message. 1334 // Send the message.
1325 hr = PipeSendMessage(hPipe, BURN_ELEVATION_MESSAGE_TYPE_EXECUTE_PACKAGE_PROVIDER, pbData, cbData, NULL, NULL, &dwResult); 1335 hr = PipeSendMessage(hPipe, BURN_ELEVATION_MESSAGE_TYPE_EXECUTE_PACKAGE_PROVIDER, pbData, cbData, NULL, NULL, &dwResult);
@@ -2840,7 +2850,7 @@ static HRESULT OnExecuteMsiPackage(
2840 SIZE_T iData = 0; 2850 SIZE_T iData = 0;
2841 LPWSTR sczPackage = NULL; 2851 LPWSTR sczPackage = NULL;
2842 HWND hwndParent = NULL; 2852 HWND hwndParent = NULL;
2843 BOOL fRollback = 0; 2853 BOOL fRollback = FALSE;
2844 BURN_EXECUTE_ACTION executeAction = { }; 2854 BURN_EXECUTE_ACTION executeAction = { };
2845 BOOTSTRAPPER_APPLY_RESTART msiRestart = BOOTSTRAPPER_APPLY_RESTART_NONE; 2855 BOOTSTRAPPER_APPLY_RESTART msiRestart = BOOTSTRAPPER_APPLY_RESTART_NONE;
2846 2856
@@ -2946,7 +2956,7 @@ static HRESULT OnExecuteMspPackage(
2946 SIZE_T iData = 0; 2956 SIZE_T iData = 0;
2947 LPWSTR sczPackage = NULL; 2957 LPWSTR sczPackage = NULL;
2948 HWND hwndParent = NULL; 2958 HWND hwndParent = NULL;
2949 BOOL fRollback = 0; 2959 BOOL fRollback = FALSE;
2950 BURN_EXECUTE_ACTION executeAction = { }; 2960 BURN_EXECUTE_ACTION executeAction = { };
2951 BOOTSTRAPPER_APPLY_RESTART restart = BOOTSTRAPPER_APPLY_RESTART_NONE; 2961 BOOTSTRAPPER_APPLY_RESTART restart = BOOTSTRAPPER_APPLY_RESTART_NONE;
2952 2962
@@ -3117,7 +3127,7 @@ static HRESULT OnUninstallMsiCompatiblePackage(
3117 LPWSTR sczPackageId = NULL; 3127 LPWSTR sczPackageId = NULL;
3118 LPWSTR sczCompatiblePackageId = NULL; 3128 LPWSTR sczCompatiblePackageId = NULL;
3119 HWND hwndParent = NULL; 3129 HWND hwndParent = NULL;
3120 BOOL fRollback = 0; 3130 BOOL fRollback = FALSE;
3121 BURN_EXECUTE_ACTION executeAction = { }; 3131 BURN_EXECUTE_ACTION executeAction = { };
3122 BURN_PACKAGE* pPackage = NULL; 3132 BURN_PACKAGE* pPackage = NULL;
3123 BURN_COMPATIBLE_PACKAGE* pCompatiblePackage = NULL; 3133 BURN_COMPATIBLE_PACKAGE* pCompatiblePackage = NULL;
@@ -3195,6 +3205,7 @@ static HRESULT OnExecutePackageProviderAction(
3195 HRESULT hr = S_OK; 3205 HRESULT hr = S_OK;
3196 SIZE_T iData = 0; 3206 SIZE_T iData = 0;
3197 LPWSTR sczPackage = NULL; 3207 LPWSTR sczPackage = NULL;
3208 BOOL fRollback = FALSE;
3198 BURN_EXECUTE_ACTION executeAction = { }; 3209 BURN_EXECUTE_ACTION executeAction = { };
3199 3210
3200 executeAction.type = BURN_EXECUTE_ACTION_TYPE_PACKAGE_PROVIDER; 3211 executeAction.type = BURN_EXECUTE_ACTION_TYPE_PACKAGE_PROVIDER;
@@ -3203,9 +3214,6 @@ static HRESULT OnExecutePackageProviderAction(
3203 hr = BuffReadString(pbData, cbData, &iData, &sczPackage); 3214 hr = BuffReadString(pbData, cbData, &iData, &sczPackage);
3204 ExitOnFailure(hr, "Failed to read package id from message buffer."); 3215 ExitOnFailure(hr, "Failed to read package id from message buffer.");
3205 3216
3206 hr = BuffReadNumber(pbData, cbData, &iData, reinterpret_cast<DWORD*>(&executeAction.packageProvider.action));
3207 ExitOnFailure(hr, "Failed to read action.");
3208
3209 // Find the package again. 3217 // Find the package again.
3210 hr = PackageFindById(pPackages, sczPackage, &executeAction.packageProvider.pPackage); 3218 hr = PackageFindById(pPackages, sczPackage, &executeAction.packageProvider.pPackage);
3211 if (E_NOTFOUND == hr) 3219 if (E_NOTFOUND == hr)
@@ -3214,8 +3222,25 @@ static HRESULT OnExecutePackageProviderAction(
3214 } 3222 }
3215 ExitOnFailure(hr, "Failed to find package: %ls", sczPackage); 3223 ExitOnFailure(hr, "Failed to find package: %ls", sczPackage);
3216 3224
3225 hr = BuffReadNumber(pbData, cbData, &iData, (DWORD*)&fRollback);
3226 ExitOnFailure(hr, "Failed to read rollback flag.");
3227
3228 // Read provider actions.
3229 for (DWORD i = 0; i < executeAction.packageProvider.pPackage->cDependencyProviders; ++i)
3230 {
3231 BURN_DEPENDENCY_PROVIDER* pProvider = executeAction.packageProvider.pPackage->rgDependencyProviders + i;
3232 BURN_DEPENDENCY_ACTION* pAction = fRollback ? &pProvider->providerRollback : &pProvider->providerExecute;
3233 hr = BuffReadNumber(pbData, cbData, &iData, (DWORD*)pAction);
3234 ExitOnFailure(hr, "Failed to read provider action.");
3235 }
3236
3237 if (!executeAction.packageProvider.pPackage->fPerMachine)
3238 {
3239 ExitWithRootFailure(hr, E_INVALIDARG, "ExecutePackageProviderAction called for per-user package.");
3240 }
3241
3217 // Execute the package provider action. 3242 // Execute the package provider action.
3218 hr = DependencyExecutePackageProviderAction(&executeAction); 3243 hr = DependencyExecutePackageProviderAction(&executeAction, fRollback);
3219 ExitOnFailure(hr, "Failed to execute package provider action."); 3244 ExitOnFailure(hr, "Failed to execute package provider action.");
3220 3245
3221LExit: 3246LExit:
diff --git a/src/burn/engine/elevation.h b/src/burn/engine/elevation.h
index 9659ef89..f5b56f02 100644
--- a/src/burn/engine/elevation.h
+++ b/src/burn/engine/elevation.h
@@ -139,7 +139,8 @@ HRESULT ElevationUninstallMsiCompatiblePackage(
139 ); 139 );
140HRESULT ElevationExecutePackageProviderAction( 140HRESULT ElevationExecutePackageProviderAction(
141 __in HANDLE hPipe, 141 __in HANDLE hPipe,
142 __in BURN_EXECUTE_ACTION* pExecuteAction 142 __in BURN_EXECUTE_ACTION* pExecuteAction,
143 __in BOOL fRollback
143 ); 144 );
144HRESULT ElevationExecutePackageDependencyAction( 145HRESULT ElevationExecutePackageDependencyAction(
145 __in HANDLE hPipe, 146 __in HANDLE hPipe,
diff --git a/src/burn/engine/package.h b/src/burn/engine/package.h
index eb812e20..6fae0c10 100644
--- a/src/burn/engine/package.h
+++ b/src/burn/engine/package.h
@@ -195,6 +195,9 @@ typedef struct _BURN_DEPENDENCY_PROVIDER
195 195
196 DEPENDENCY* rgDependents; // only valid after Detect. 196 DEPENDENCY* rgDependents; // only valid after Detect.
197 UINT cDependents; // only valid after Detect. 197 UINT cDependents; // only valid after Detect.
198
199 BURN_DEPENDENCY_ACTION providerExecute; // only valid during Plan.
200 BURN_DEPENDENCY_ACTION providerRollback; // only valid during Plan.
198} BURN_DEPENDENCY_PROVIDER; 201} BURN_DEPENDENCY_PROVIDER;
199 202
200typedef struct _BURN_ROLLBACK_BOUNDARY 203typedef struct _BURN_ROLLBACK_BOUNDARY
@@ -267,8 +270,8 @@ typedef struct _BURN_PACKAGE
267 BOOL fPlannedUncache; // only valid during Plan. 270 BOOL fPlannedUncache; // only valid during Plan.
268 BOOTSTRAPPER_ACTION_STATE execute; // only valid during Plan. 271 BOOTSTRAPPER_ACTION_STATE execute; // only valid during Plan.
269 BOOTSTRAPPER_ACTION_STATE rollback; // only valid during Plan. 272 BOOTSTRAPPER_ACTION_STATE rollback; // only valid during Plan.
270 BURN_DEPENDENCY_ACTION providerExecute; // only valid during Plan. 273 BOOL fProviderExecute; // only valid during Plan.
271 BURN_DEPENDENCY_ACTION providerRollback; // only valid during Plan. 274 BOOL fProviderRollback; // only valid during Plan.
272 BURN_DEPENDENCY_ACTION dependencyExecute; // only valid during Plan. 275 BURN_DEPENDENCY_ACTION dependencyExecute; // only valid during Plan.
273 BURN_DEPENDENCY_ACTION dependencyRollback; // only valid during Plan. 276 BURN_DEPENDENCY_ACTION dependencyRollback; // only valid during Plan.
274 BOOL fDependencyManagerWasHere; // only valid during Plan. 277 BOOL fDependencyManagerWasHere; // only valid during Plan.
diff --git a/src/burn/engine/plan.cpp b/src/burn/engine/plan.cpp
index a25b17d7..27eee3fb 100644
--- a/src/burn/engine/plan.cpp
+++ b/src/burn/engine/plan.cpp
@@ -1922,8 +1922,8 @@ static void ResetPlannedPackageState(
1922 pPackage->fPlannedUncache = FALSE; 1922 pPackage->fPlannedUncache = FALSE;
1923 pPackage->execute = BOOTSTRAPPER_ACTION_STATE_NONE; 1923 pPackage->execute = BOOTSTRAPPER_ACTION_STATE_NONE;
1924 pPackage->rollback = BOOTSTRAPPER_ACTION_STATE_NONE; 1924 pPackage->rollback = BOOTSTRAPPER_ACTION_STATE_NONE;
1925 pPackage->providerExecute = BURN_DEPENDENCY_ACTION_NONE; 1925 pPackage->fProviderExecute = FALSE;
1926 pPackage->providerRollback = BURN_DEPENDENCY_ACTION_NONE; 1926 pPackage->fProviderRollback = FALSE;
1927 pPackage->dependencyExecute = BURN_DEPENDENCY_ACTION_NONE; 1927 pPackage->dependencyExecute = BURN_DEPENDENCY_ACTION_NONE;
1928 pPackage->dependencyRollback = BURN_DEPENDENCY_ACTION_NONE; 1928 pPackage->dependencyRollback = BURN_DEPENDENCY_ACTION_NONE;
1929 pPackage->fDependencyManagerWasHere = FALSE; 1929 pPackage->fDependencyManagerWasHere = FALSE;
@@ -1969,6 +1969,14 @@ static void ResetPlannedPackageState(
1969 } 1969 }
1970 } 1970 }
1971 1971
1972 for (DWORD i = 0; i < pPackage->cDependencyProviders; ++i)
1973 {
1974 BURN_DEPENDENCY_PROVIDER* pProvider = &pPackage->rgDependencyProviders[i];
1975
1976 pProvider->providerExecute = BURN_DEPENDENCY_ACTION_NONE;
1977 pProvider->providerRollback = BURN_DEPENDENCY_ACTION_NONE;
1978 }
1979
1972 ResetPlannedPayloadGroupState(&pPackage->payloads); 1980 ResetPlannedPayloadGroupState(&pPackage->payloads);
1973} 1981}
1974 1982
@@ -2637,7 +2645,12 @@ static void ExecuteActionLog(
2637 break; 2645 break;
2638 2646
2639 case BURN_EXECUTE_ACTION_TYPE_PACKAGE_PROVIDER: 2647 case BURN_EXECUTE_ACTION_TYPE_PACKAGE_PROVIDER:
2640 LogStringLine(PlanDumpLevel, "%ls action[%u]: PACKAGE_PROVIDER package id: %ls, action: %hs", wzBase, iAction, pAction->packageProvider.pPackage->sczId, LoggingDependencyActionToString(pAction->packageProvider.action)); 2648 LogStringLine(PlanDumpLevel, "%ls action[%u]: PACKAGE_PROVIDER package id: %ls", wzBase, iAction, pAction->packageProvider.pPackage->sczId);
2649 for (DWORD j = 0; j < pAction->packageProvider.pPackage->cDependencyProviders; ++j)
2650 {
2651 const BURN_DEPENDENCY_PROVIDER* pProvider = pAction->packageProvider.pPackage->rgDependencyProviders + j;
2652 LogStringLine(PlanDumpLevel, " Provider[%u]: key: %ls, action: %hs", j, pProvider->sczKey, LoggingDependencyActionToString(fRollback ? pProvider->providerRollback : pProvider->providerExecute));
2653 }
2641 break; 2654 break;
2642 2655
2643 case BURN_EXECUTE_ACTION_TYPE_PACKAGE_DEPENDENCY: 2656 case BURN_EXECUTE_ACTION_TYPE_PACKAGE_DEPENDENCY:
diff --git a/src/burn/engine/plan.h b/src/burn/engine/plan.h
index 15092210..61953168 100644
--- a/src/burn/engine/plan.h
+++ b/src/burn/engine/plan.h
@@ -208,7 +208,6 @@ typedef struct _BURN_EXECUTE_ACTION
208 struct 208 struct
209 { 209 {
210 BURN_PACKAGE* pPackage; 210 BURN_PACKAGE* pPackage;
211 BURN_DEPENDENCY_ACTION action;
212 } packageProvider; 211 } packageProvider;
213 struct 212 struct
214 { 213 {
diff --git a/src/burn/test/BurnUnitTest/PlanTest.cpp b/src/burn/test/BurnUnitTest/PlanTest.cpp
index 9d86b7cc..d5926694 100644
--- a/src/burn/test/BurnUnitTest/PlanTest.cpp
+++ b/src/burn/test/BurnUnitTest/PlanTest.cpp
@@ -18,6 +18,9 @@ static BOOTSTRAPPER_REQUEST_STATE vPackageRequestState = BOOTSTRAPPER_REQUEST_ST
18static BOOL vfUseRelatedBundleRequestState = FALSE; 18static BOOL vfUseRelatedBundleRequestState = FALSE;
19static BOOTSTRAPPER_REQUEST_STATE vRelatedBundleRequestState = BOOTSTRAPPER_REQUEST_STATE_NONE; 19static BOOTSTRAPPER_REQUEST_STATE vRelatedBundleRequestState = BOOTSTRAPPER_REQUEST_STATE_NONE;
20 20
21static BURN_DEPENDENCY_ACTION registerActions1[] = { BURN_DEPENDENCY_ACTION_REGISTER };
22static BURN_DEPENDENCY_ACTION unregisterActions1[] = { BURN_DEPENDENCY_ACTION_UNREGISTER };
23
21namespace Microsoft 24namespace Microsoft
22{ 25{
23namespace Tools 26namespace Tools
@@ -90,7 +93,7 @@ namespace Bootstrapper
90 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++); 93 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
91 ValidateExecuteWaitCachePackage(pPlan, fRollback, dwIndex++, L"PackageA"); 94 ValidateExecuteWaitCachePackage(pPlan, fRollback, dwIndex++, L"PackageA");
92 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++); 95 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
93 ValidateExecutePackageProvider(pPlan, fRollback, dwIndex++, L"PackageA", BURN_DEPENDENCY_ACTION_REGISTER); 96 ValidateExecutePackageProvider(pPlan, fRollback, dwIndex++, L"PackageA", registerActions1, 1);
94 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++); 97 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
95 ValidateExecuteMsiPackage(pPlan, fRollback, dwIndex++, L"PackageA", BOOTSTRAPPER_ACTION_STATE_INSTALL, BURN_MSI_PROPERTY_INSTALL, INSTALLUILEVEL_NONE, FALSE, BOOTSTRAPPER_MSI_FILE_VERSIONING_MISSING_OR_OLDER, 0); 98 ValidateExecuteMsiPackage(pPlan, fRollback, dwIndex++, L"PackageA", BOOTSTRAPPER_ACTION_STATE_INSTALL, BURN_MSI_PROPERTY_INSTALL, INSTALLUILEVEL_NONE, FALSE, BOOTSTRAPPER_MSI_FILE_VERSIONING_MISSING_OR_OLDER, 0);
96 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++); 99 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
@@ -105,7 +108,7 @@ namespace Bootstrapper
105 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++); 108 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
106 ValidateExecuteWaitCachePackage(pPlan, fRollback, dwIndex++, L"PackageB"); 109 ValidateExecuteWaitCachePackage(pPlan, fRollback, dwIndex++, L"PackageB");
107 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++); 110 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
108 ValidateExecutePackageProvider(pPlan, fRollback, dwIndex++, L"PackageB", BURN_DEPENDENCY_ACTION_REGISTER); 111 ValidateExecutePackageProvider(pPlan, fRollback, dwIndex++, L"PackageB", registerActions1, 1);
109 ValidateExecuteMsiPackage(pPlan, fRollback, dwIndex++, L"PackageB", BOOTSTRAPPER_ACTION_STATE_INSTALL, BURN_MSI_PROPERTY_INSTALL, INSTALLUILEVEL_NONE, FALSE, BOOTSTRAPPER_MSI_FILE_VERSIONING_MISSING_OR_OLDER, 0); 112 ValidateExecuteMsiPackage(pPlan, fRollback, dwIndex++, L"PackageB", BOOTSTRAPPER_ACTION_STATE_INSTALL, BURN_MSI_PROPERTY_INSTALL, INSTALLUILEVEL_NONE, FALSE, BOOTSTRAPPER_MSI_FILE_VERSIONING_MISSING_OR_OLDER, 0);
110 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++); 113 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
111 ValidateExecutePackageDependency(pPlan, fRollback, dwIndex++, L"PackageB", L"{E6469F05-BDC8-4EB8-B218-67412543EFAA}", BURN_DEPENDENCY_ACTION_REGISTER); 114 ValidateExecutePackageDependency(pPlan, fRollback, dwIndex++, L"PackageB", L"{E6469F05-BDC8-4EB8-B218-67412543EFAA}", BURN_DEPENDENCY_ACTION_REGISTER);
@@ -114,7 +117,7 @@ namespace Bootstrapper
114 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++); 117 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
115 ValidateExecuteWaitCachePackage(pPlan, fRollback, dwIndex++, L"PackageC"); 118 ValidateExecuteWaitCachePackage(pPlan, fRollback, dwIndex++, L"PackageC");
116 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++); 119 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
117 ValidateExecutePackageProvider(pPlan, fRollback, dwIndex++, L"PackageC", BURN_DEPENDENCY_ACTION_REGISTER); 120 ValidateExecutePackageProvider(pPlan, fRollback, dwIndex++, L"PackageC", registerActions1, 1);
118 ValidateExecuteMsiPackage(pPlan, fRollback, dwIndex++, L"PackageC", BOOTSTRAPPER_ACTION_STATE_INSTALL, BURN_MSI_PROPERTY_INSTALL, INSTALLUILEVEL_NONE, FALSE, BOOTSTRAPPER_MSI_FILE_VERSIONING_MISSING_OR_OLDER, 0); 121 ValidateExecuteMsiPackage(pPlan, fRollback, dwIndex++, L"PackageC", BOOTSTRAPPER_ACTION_STATE_INSTALL, BURN_MSI_PROPERTY_INSTALL, INSTALLUILEVEL_NONE, FALSE, BOOTSTRAPPER_MSI_FILE_VERSIONING_MISSING_OR_OLDER, 0);
119 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++); 122 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
120 ValidateExecutePackageDependency(pPlan, fRollback, dwIndex++, L"PackageC", L"{E6469F05-BDC8-4EB8-B218-67412543EFAA}", BURN_DEPENDENCY_ACTION_REGISTER); 123 ValidateExecutePackageDependency(pPlan, fRollback, dwIndex++, L"PackageC", L"{E6469F05-BDC8-4EB8-B218-67412543EFAA}", BURN_DEPENDENCY_ACTION_REGISTER);
@@ -131,7 +134,7 @@ namespace Bootstrapper
131 ValidateExecuteRollbackBoundaryStart(pPlan, fRollback, dwIndex++, L"WixDefaultBoundary", TRUE, FALSE); 134 ValidateExecuteRollbackBoundaryStart(pPlan, fRollback, dwIndex++, L"WixDefaultBoundary", TRUE, FALSE);
132 ValidateExecuteUncachePackage(pPlan, fRollback, dwIndex++, L"PackageA"); 135 ValidateExecuteUncachePackage(pPlan, fRollback, dwIndex++, L"PackageA");
133 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++); 136 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
134 ValidateExecutePackageProvider(pPlan, fRollback, dwIndex++, L"PackageA", BURN_DEPENDENCY_ACTION_UNREGISTER); 137 ValidateExecutePackageProvider(pPlan, fRollback, dwIndex++, L"PackageA", unregisterActions1, 1);
135 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++); 138 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
136 ValidateExecuteMsiPackage(pPlan, fRollback, dwIndex++, L"PackageA", BOOTSTRAPPER_ACTION_STATE_UNINSTALL, BURN_MSI_PROPERTY_UNINSTALL, INSTALLUILEVEL_NONE, FALSE, BOOTSTRAPPER_MSI_FILE_VERSIONING_MISSING_OR_OLDER, 0); 139 ValidateExecuteMsiPackage(pPlan, fRollback, dwIndex++, L"PackageA", BOOTSTRAPPER_ACTION_STATE_UNINSTALL, BURN_MSI_PROPERTY_UNINSTALL, INSTALLUILEVEL_NONE, FALSE, BOOTSTRAPPER_MSI_FILE_VERSIONING_MISSING_OR_OLDER, 0);
137 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++); 140 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
@@ -145,7 +148,7 @@ namespace Bootstrapper
145 ValidateExecuteUncachePackage(pPlan, fRollback, dwIndex++, L"PackageB"); 148 ValidateExecuteUncachePackage(pPlan, fRollback, dwIndex++, L"PackageB");
146 dwExecuteCheckpointId += 1; // cache checkpoints 149 dwExecuteCheckpointId += 1; // cache checkpoints
147 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++); 150 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
148 ValidateExecutePackageProvider(pPlan, fRollback, dwIndex++, L"PackageB", BURN_DEPENDENCY_ACTION_UNREGISTER); 151 ValidateExecutePackageProvider(pPlan, fRollback, dwIndex++, L"PackageB", unregisterActions1, 1);
149 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++); 152 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
150 ValidateExecutePackageDependency(pPlan, fRollback, dwIndex++, L"PackageB", L"{E6469F05-BDC8-4EB8-B218-67412543EFAA}", BURN_DEPENDENCY_ACTION_UNREGISTER); 153 ValidateExecutePackageDependency(pPlan, fRollback, dwIndex++, L"PackageB", L"{E6469F05-BDC8-4EB8-B218-67412543EFAA}", BURN_DEPENDENCY_ACTION_UNREGISTER);
151 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++); 154 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
@@ -153,7 +156,7 @@ namespace Bootstrapper
153 ValidateExecuteUncachePackage(pPlan, fRollback, dwIndex++, L"PackageC"); 156 ValidateExecuteUncachePackage(pPlan, fRollback, dwIndex++, L"PackageC");
154 dwExecuteCheckpointId += 1; // cache checkpoints 157 dwExecuteCheckpointId += 1; // cache checkpoints
155 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++); 158 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
156 ValidateExecutePackageProvider(pPlan, fRollback, dwIndex++, L"PackageC", BURN_DEPENDENCY_ACTION_UNREGISTER); 159 ValidateExecutePackageProvider(pPlan, fRollback, dwIndex++, L"PackageC", unregisterActions1, 1);
157 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++); 160 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
158 ValidateExecutePackageDependency(pPlan, fRollback, dwIndex++, L"PackageC", L"{E6469F05-BDC8-4EB8-B218-67412543EFAA}", BURN_DEPENDENCY_ACTION_UNREGISTER); 161 ValidateExecutePackageDependency(pPlan, fRollback, dwIndex++, L"PackageC", L"{E6469F05-BDC8-4EB8-B218-67412543EFAA}", BURN_DEPENDENCY_ACTION_UNREGISTER);
159 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++); 162 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
@@ -217,13 +220,13 @@ namespace Bootstrapper
217 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++); 220 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
218 ValidateExecutePackageDependency(pPlan, fRollback, dwIndex++, L"PackageC", L"{E6469F05-BDC8-4EB8-B218-67412543EFAA}", BURN_DEPENDENCY_ACTION_UNREGISTER); 221 ValidateExecutePackageDependency(pPlan, fRollback, dwIndex++, L"PackageC", L"{E6469F05-BDC8-4EB8-B218-67412543EFAA}", BURN_DEPENDENCY_ACTION_UNREGISTER);
219 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++); 222 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
220 ValidateExecutePackageProvider(pPlan, fRollback, dwIndex++, L"PackageC", BURN_DEPENDENCY_ACTION_UNREGISTER); 223 ValidateExecutePackageProvider(pPlan, fRollback, dwIndex++, L"PackageC", unregisterActions1, 1);
221 ValidateExecuteMsiPackage(pPlan, fRollback, dwIndex++, L"PackageC", BOOTSTRAPPER_ACTION_STATE_UNINSTALL, BURN_MSI_PROPERTY_UNINSTALL, INSTALLUILEVEL_NONE, FALSE, BOOTSTRAPPER_MSI_FILE_VERSIONING_MISSING_OR_OLDER, 0); 224 ValidateExecuteMsiPackage(pPlan, fRollback, dwIndex++, L"PackageC", BOOTSTRAPPER_ACTION_STATE_UNINSTALL, BURN_MSI_PROPERTY_UNINSTALL, INSTALLUILEVEL_NONE, FALSE, BOOTSTRAPPER_MSI_FILE_VERSIONING_MISSING_OR_OLDER, 0);
222 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++); 225 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
223 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++); 226 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
224 ValidateExecutePackageDependency(pPlan, fRollback, dwIndex++, L"PackageB", L"{E6469F05-BDC8-4EB8-B218-67412543EFAA}", BURN_DEPENDENCY_ACTION_UNREGISTER); 227 ValidateExecutePackageDependency(pPlan, fRollback, dwIndex++, L"PackageB", L"{E6469F05-BDC8-4EB8-B218-67412543EFAA}", BURN_DEPENDENCY_ACTION_UNREGISTER);
225 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++); 228 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
226 ValidateExecutePackageProvider(pPlan, fRollback, dwIndex++, L"PackageB", BURN_DEPENDENCY_ACTION_UNREGISTER); 229 ValidateExecutePackageProvider(pPlan, fRollback, dwIndex++, L"PackageB", unregisterActions1, 1);
227 ValidateExecuteMsiPackage(pPlan, fRollback, dwIndex++, L"PackageB", BOOTSTRAPPER_ACTION_STATE_UNINSTALL, BURN_MSI_PROPERTY_UNINSTALL, INSTALLUILEVEL_NONE, FALSE, BOOTSTRAPPER_MSI_FILE_VERSIONING_MISSING_OR_OLDER, 0); 230 ValidateExecuteMsiPackage(pPlan, fRollback, dwIndex++, L"PackageB", BOOTSTRAPPER_ACTION_STATE_UNINSTALL, BURN_MSI_PROPERTY_UNINSTALL, INSTALLUILEVEL_NONE, FALSE, BOOTSTRAPPER_MSI_FILE_VERSIONING_MISSING_OR_OLDER, 0);
228 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++); 231 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
229 ValidateExecuteCommitMsiTransaction(pPlan, fRollback, dwIndex++, L"rbaOCA08D8ky7uBOK71_6FWz1K3TuQ"); 232 ValidateExecuteCommitMsiTransaction(pPlan, fRollback, dwIndex++, L"rbaOCA08D8ky7uBOK71_6FWz1K3TuQ");
@@ -233,7 +236,7 @@ namespace Bootstrapper
233 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++); 236 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
234 ValidateExecutePackageDependency(pPlan, fRollback, dwIndex++, L"PackageA", L"{E6469F05-BDC8-4EB8-B218-67412543EFAA}", BURN_DEPENDENCY_ACTION_UNREGISTER); 237 ValidateExecutePackageDependency(pPlan, fRollback, dwIndex++, L"PackageA", L"{E6469F05-BDC8-4EB8-B218-67412543EFAA}", BURN_DEPENDENCY_ACTION_UNREGISTER);
235 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++); 238 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
236 ValidateExecutePackageProvider(pPlan, fRollback, dwIndex++, L"PackageA", BURN_DEPENDENCY_ACTION_UNREGISTER); 239 ValidateExecutePackageProvider(pPlan, fRollback, dwIndex++, L"PackageA", unregisterActions1, 1);
237 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++); 240 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
238 ValidateExecuteMsiPackage(pPlan, fRollback, dwIndex++, L"PackageA", BOOTSTRAPPER_ACTION_STATE_UNINSTALL, BURN_MSI_PROPERTY_UNINSTALL, INSTALLUILEVEL_NONE, FALSE, BOOTSTRAPPER_MSI_FILE_VERSIONING_MISSING_OR_OLDER, 0); 241 ValidateExecuteMsiPackage(pPlan, fRollback, dwIndex++, L"PackageA", BOOTSTRAPPER_ACTION_STATE_UNINSTALL, BURN_MSI_PROPERTY_UNINSTALL, INSTALLUILEVEL_NONE, FALSE, BOOTSTRAPPER_MSI_FILE_VERSIONING_MISSING_OR_OLDER, 0);
239 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++); 242 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
@@ -248,12 +251,12 @@ namespace Bootstrapper
248 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++); 251 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
249 ValidateExecutePackageDependency(pPlan, fRollback, dwIndex++, L"PackageC", L"{E6469F05-BDC8-4EB8-B218-67412543EFAA}", BURN_DEPENDENCY_ACTION_REGISTER); 252 ValidateExecutePackageDependency(pPlan, fRollback, dwIndex++, L"PackageC", L"{E6469F05-BDC8-4EB8-B218-67412543EFAA}", BURN_DEPENDENCY_ACTION_REGISTER);
250 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++); 253 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
251 ValidateExecutePackageProvider(pPlan, fRollback, dwIndex++, L"PackageC", BURN_DEPENDENCY_ACTION_REGISTER); 254 ValidateExecutePackageProvider(pPlan, fRollback, dwIndex++, L"PackageC", registerActions1, 1);
252 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++); 255 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
253 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++); 256 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
254 ValidateExecutePackageDependency(pPlan, fRollback, dwIndex++, L"PackageB", L"{E6469F05-BDC8-4EB8-B218-67412543EFAA}", BURN_DEPENDENCY_ACTION_REGISTER); 257 ValidateExecutePackageDependency(pPlan, fRollback, dwIndex++, L"PackageB", L"{E6469F05-BDC8-4EB8-B218-67412543EFAA}", BURN_DEPENDENCY_ACTION_REGISTER);
255 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++); 258 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
256 ValidateExecutePackageProvider(pPlan, fRollback, dwIndex++, L"PackageB", BURN_DEPENDENCY_ACTION_REGISTER); 259 ValidateExecutePackageProvider(pPlan, fRollback, dwIndex++, L"PackageB", registerActions1, 1);
257 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++); 260 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
258 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++); 261 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
259 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++); 262 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
@@ -261,7 +264,7 @@ namespace Bootstrapper
261 ValidateExecuteRollbackBoundaryStart(pPlan, fRollback, dwIndex++, L"WixDefaultBoundary", TRUE, FALSE); 264 ValidateExecuteRollbackBoundaryStart(pPlan, fRollback, dwIndex++, L"WixDefaultBoundary", TRUE, FALSE);
262 ValidateExecutePackageDependency(pPlan, fRollback, dwIndex++, L"PackageA", L"{E6469F05-BDC8-4EB8-B218-67412543EFAA}", BURN_DEPENDENCY_ACTION_REGISTER); 265 ValidateExecutePackageDependency(pPlan, fRollback, dwIndex++, L"PackageA", L"{E6469F05-BDC8-4EB8-B218-67412543EFAA}", BURN_DEPENDENCY_ACTION_REGISTER);
263 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++); 266 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
264 ValidateExecutePackageProvider(pPlan, fRollback, dwIndex++, L"PackageA", BURN_DEPENDENCY_ACTION_REGISTER); 267 ValidateExecutePackageProvider(pPlan, fRollback, dwIndex++, L"PackageA", registerActions1, 1);
265 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++); 268 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
266 ValidateExecuteMsiPackage(pPlan, fRollback, dwIndex++, L"PackageA", BOOTSTRAPPER_ACTION_STATE_INSTALL, BURN_MSI_PROPERTY_INSTALL, INSTALLUILEVEL_NONE, FALSE, BOOTSTRAPPER_MSI_FILE_VERSIONING_MISSING_OR_OLDER, 0); 269 ValidateExecuteMsiPackage(pPlan, fRollback, dwIndex++, L"PackageA", BOOTSTRAPPER_ACTION_STATE_INSTALL, BURN_MSI_PROPERTY_INSTALL, INSTALLUILEVEL_NONE, FALSE, BOOTSTRAPPER_MSI_FILE_VERSIONING_MISSING_OR_OLDER, 0);
267 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++); 270 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
@@ -327,7 +330,7 @@ namespace Bootstrapper
327 DWORD dwExecuteCheckpointId = 1; 330 DWORD dwExecuteCheckpointId = 1;
328 ValidateExecuteRollbackBoundaryStart(pPlan, fRollback, dwIndex++, L"WixDefaultBoundary", TRUE, FALSE); 331 ValidateExecuteRollbackBoundaryStart(pPlan, fRollback, dwIndex++, L"WixDefaultBoundary", TRUE, FALSE);
329 ValidateExecutePackageDependency(pPlan, fRollback, dwIndex++, L"PackageA", L"{A6F0CBF7-1578-450C-B9D7-9CF2EEC40002}", BURN_DEPENDENCY_ACTION_UNREGISTER); 332 ValidateExecutePackageDependency(pPlan, fRollback, dwIndex++, L"PackageA", L"{A6F0CBF7-1578-450C-B9D7-9CF2EEC40002}", BURN_DEPENDENCY_ACTION_UNREGISTER);
330 ValidateExecutePackageProvider(pPlan, fRollback, dwIndex++, L"PackageA", BURN_DEPENDENCY_ACTION_UNREGISTER); 333 ValidateExecutePackageProvider(pPlan, fRollback, dwIndex++, L"PackageA", unregisterActions1, 1);
331 ValidateUninstallMsiCompatiblePackage(pPlan, fRollback, dwIndex++, L"PackageA", 0); 334 ValidateUninstallMsiCompatiblePackage(pPlan, fRollback, dwIndex++, L"PackageA", 0);
332 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++); 335 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
333 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++); 336 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
@@ -404,7 +407,7 @@ namespace Bootstrapper
404 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++); 407 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
405 ValidateExecuteWaitCachePackage(pPlan, fRollback, dwIndex++, L"PackageA"); 408 ValidateExecuteWaitCachePackage(pPlan, fRollback, dwIndex++, L"PackageA");
406 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++); 409 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
407 ValidateExecutePackageProvider(pPlan, fRollback, dwIndex++, L"PackageA", BURN_DEPENDENCY_ACTION_REGISTER); 410 ValidateExecutePackageProvider(pPlan, fRollback, dwIndex++, L"PackageA", registerActions1, 1);
408 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++); 411 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
409 ValidateExecuteMsiPackage(pPlan, fRollback, dwIndex++, L"PackageA", BOOTSTRAPPER_ACTION_STATE_INSTALL, BURN_MSI_PROPERTY_INSTALL, INSTALLUILEVEL_NONE, FALSE, BOOTSTRAPPER_MSI_FILE_VERSIONING_MISSING_OR_OLDER, 0); 412 ValidateExecuteMsiPackage(pPlan, fRollback, dwIndex++, L"PackageA", BOOTSTRAPPER_ACTION_STATE_INSTALL, BURN_MSI_PROPERTY_INSTALL, INSTALLUILEVEL_NONE, FALSE, BOOTSTRAPPER_MSI_FILE_VERSIONING_MISSING_OR_OLDER, 0);
410 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++); 413 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
@@ -420,7 +423,7 @@ namespace Bootstrapper
420 ValidateExecuteRollbackBoundaryStart(pPlan, fRollback, dwIndex++, L"WixDefaultBoundary", TRUE, FALSE); 423 ValidateExecuteRollbackBoundaryStart(pPlan, fRollback, dwIndex++, L"WixDefaultBoundary", TRUE, FALSE);
421 ValidateExecuteUncachePackage(pPlan, fRollback, dwIndex++, L"PackageA"); 424 ValidateExecuteUncachePackage(pPlan, fRollback, dwIndex++, L"PackageA");
422 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++); 425 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
423 ValidateExecutePackageProvider(pPlan, fRollback, dwIndex++, L"PackageA", BURN_DEPENDENCY_ACTION_UNREGISTER); 426 ValidateExecutePackageProvider(pPlan, fRollback, dwIndex++, L"PackageA", unregisterActions1, 1);
424 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++); 427 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
425 ValidateExecuteMsiPackage(pPlan, fRollback, dwIndex++, L"PackageA", BOOTSTRAPPER_ACTION_STATE_UNINSTALL, BURN_MSI_PROPERTY_UNINSTALL, INSTALLUILEVEL_NONE, FALSE, BOOTSTRAPPER_MSI_FILE_VERSIONING_MISSING_OR_OLDER, 0); 428 ValidateExecuteMsiPackage(pPlan, fRollback, dwIndex++, L"PackageA", BOOTSTRAPPER_ACTION_STATE_UNINSTALL, BURN_MSI_PROPERTY_UNINSTALL, INSTALLUILEVEL_NONE, FALSE, BOOTSTRAPPER_MSI_FILE_VERSIONING_MISSING_OR_OLDER, 0);
426 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++); 429 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
@@ -498,7 +501,7 @@ namespace Bootstrapper
498 ValidateExecuteRollbackBoundaryStart(pPlan, fRollback, dwIndex++, L"WixDefaultBoundary", TRUE, FALSE); 501 ValidateExecuteRollbackBoundaryStart(pPlan, fRollback, dwIndex++, L"WixDefaultBoundary", TRUE, FALSE);
499 ValidateExecuteUncachePackage(pPlan, fRollback, dwIndex++, L"PackageA"); 502 ValidateExecuteUncachePackage(pPlan, fRollback, dwIndex++, L"PackageA");
500 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++); 503 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
501 ValidateExecutePackageProvider(pPlan, fRollback, dwIndex++, L"PackageA", BURN_DEPENDENCY_ACTION_UNREGISTER); 504 ValidateExecutePackageProvider(pPlan, fRollback, dwIndex++, L"PackageA", unregisterActions1, 1);
502 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++); 505 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
503 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++); 506 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
504 ValidateExecuteRollbackBoundaryEnd(pPlan, fRollback, dwIndex++); 507 ValidateExecuteRollbackBoundaryEnd(pPlan, fRollback, dwIndex++);
@@ -559,7 +562,7 @@ namespace Bootstrapper
559 DWORD dwExecuteCheckpointId = 1; 562 DWORD dwExecuteCheckpointId = 1;
560 ValidateExecuteRollbackBoundaryStart(pPlan, fRollback, dwIndex++, L"WixDefaultBoundary", TRUE, FALSE); 563 ValidateExecuteRollbackBoundaryStart(pPlan, fRollback, dwIndex++, L"WixDefaultBoundary", TRUE, FALSE);
561 ValidateExecutePackageDependency(pPlan, fRollback, dwIndex++, L"PackageA", L"{A6F0CBF7-1578-450C-B9D7-9CF2EEC40002}", BURN_DEPENDENCY_ACTION_UNREGISTER); 564 ValidateExecutePackageDependency(pPlan, fRollback, dwIndex++, L"PackageA", L"{A6F0CBF7-1578-450C-B9D7-9CF2EEC40002}", BURN_DEPENDENCY_ACTION_UNREGISTER);
562 ValidateExecutePackageProvider(pPlan, fRollback, dwIndex++, L"PackageA", BURN_DEPENDENCY_ACTION_UNREGISTER); 565 ValidateExecutePackageProvider(pPlan, fRollback, dwIndex++, L"PackageA", unregisterActions1, 1);
563 ValidateExecuteMsiPackage(pPlan, fRollback, dwIndex++, L"PackageA", BOOTSTRAPPER_ACTION_STATE_UNINSTALL, BURN_MSI_PROPERTY_UNINSTALL, INSTALLUILEVEL_NONE, FALSE, BOOTSTRAPPER_MSI_FILE_VERSIONING_MISSING_OR_OLDER, 0); 566 ValidateExecuteMsiPackage(pPlan, fRollback, dwIndex++, L"PackageA", BOOTSTRAPPER_ACTION_STATE_UNINSTALL, BURN_MSI_PROPERTY_UNINSTALL, INSTALLUILEVEL_NONE, FALSE, BOOTSTRAPPER_MSI_FILE_VERSIONING_MISSING_OR_OLDER, 0);
564 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++); 567 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
565 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++); 568 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
@@ -637,7 +640,7 @@ namespace Bootstrapper
637 ValidateExecuteRollbackBoundaryStart(pPlan, fRollback, dwIndex++, L"WixDefaultBoundary", TRUE, FALSE); 640 ValidateExecuteRollbackBoundaryStart(pPlan, fRollback, dwIndex++, L"WixDefaultBoundary", TRUE, FALSE);
638 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++); 641 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
639 ValidateExecuteWaitCachePackage(pPlan, fRollback, dwIndex++, L"PackageA"); 642 ValidateExecuteWaitCachePackage(pPlan, fRollback, dwIndex++, L"PackageA");
640 ValidateExecutePackageProvider(pPlan, fRollback, dwIndex++, L"PackageA", BURN_DEPENDENCY_ACTION_REGISTER); 643 ValidateExecutePackageProvider(pPlan, fRollback, dwIndex++, L"PackageA", registerActions1, 1);
641 ValidateExecuteMsiPackage(pPlan, fRollback, dwIndex++, L"PackageA", BOOTSTRAPPER_ACTION_STATE_INSTALL, BURN_MSI_PROPERTY_INSTALL, INSTALLUILEVEL_NONE, FALSE, BOOTSTRAPPER_MSI_FILE_VERSIONING_MISSING_OR_OLDER, 0); 644 ValidateExecuteMsiPackage(pPlan, fRollback, dwIndex++, L"PackageA", BOOTSTRAPPER_ACTION_STATE_INSTALL, BURN_MSI_PROPERTY_INSTALL, INSTALLUILEVEL_NONE, FALSE, BOOTSTRAPPER_MSI_FILE_VERSIONING_MISSING_OR_OLDER, 0);
642 ValidateExecutePackageDependency(pPlan, fRollback, dwIndex++, L"PackageA", L"{A6F0CBF7-1578-450C-B9D7-9CF2EEC40002}", BURN_DEPENDENCY_ACTION_REGISTER); 645 ValidateExecutePackageDependency(pPlan, fRollback, dwIndex++, L"PackageA", L"{A6F0CBF7-1578-450C-B9D7-9CF2EEC40002}", BURN_DEPENDENCY_ACTION_REGISTER);
643 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++); 646 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
@@ -713,7 +716,7 @@ namespace Bootstrapper
713 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++); 716 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
714 ValidateExecuteWaitCachePackage(pPlan, fRollback, dwIndex++, L"PackageA"); 717 ValidateExecuteWaitCachePackage(pPlan, fRollback, dwIndex++, L"PackageA");
715 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++); 718 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
716 ValidateExecutePackageProvider(pPlan, fRollback, dwIndex++, L"PackageA", BURN_DEPENDENCY_ACTION_REGISTER); 719 ValidateExecutePackageProvider(pPlan, fRollback, dwIndex++, L"PackageA", registerActions1, 1);
717 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++); 720 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
718 ValidateExecuteMsiPackage(pPlan, fRollback, dwIndex++, L"PackageA", BOOTSTRAPPER_ACTION_STATE_INSTALL, BURN_MSI_PROPERTY_INSTALL, INSTALLUILEVEL_NONE, FALSE, BOOTSTRAPPER_MSI_FILE_VERSIONING_MISSING_OR_OLDER, 0); 721 ValidateExecuteMsiPackage(pPlan, fRollback, dwIndex++, L"PackageA", BOOTSTRAPPER_ACTION_STATE_INSTALL, BURN_MSI_PROPERTY_INSTALL, INSTALLUILEVEL_NONE, FALSE, BOOTSTRAPPER_MSI_FILE_VERSIONING_MISSING_OR_OLDER, 0);
719 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++); 722 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
@@ -730,7 +733,7 @@ namespace Bootstrapper
730 ValidateExecuteRollbackBoundaryStart(pPlan, fRollback, dwIndex++, L"WixDefaultBoundary", TRUE, FALSE); 733 ValidateExecuteRollbackBoundaryStart(pPlan, fRollback, dwIndex++, L"WixDefaultBoundary", TRUE, FALSE);
731 ValidateExecuteUncachePackage(pPlan, fRollback, dwIndex++, L"PackageA"); 734 ValidateExecuteUncachePackage(pPlan, fRollback, dwIndex++, L"PackageA");
732 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++); 735 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
733 ValidateExecutePackageProvider(pPlan, fRollback, dwIndex++, L"PackageA", BURN_DEPENDENCY_ACTION_UNREGISTER); 736 ValidateExecutePackageProvider(pPlan, fRollback, dwIndex++, L"PackageA", unregisterActions1, 1);
734 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++); 737 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
735 ValidateExecuteMsiPackage(pPlan, fRollback, dwIndex++, L"PackageA", BOOTSTRAPPER_ACTION_STATE_UNINSTALL, BURN_MSI_PROPERTY_UNINSTALL, INSTALLUILEVEL_NONE, FALSE, BOOTSTRAPPER_MSI_FILE_VERSIONING_MISSING_OR_OLDER, 0); 738 ValidateExecuteMsiPackage(pPlan, fRollback, dwIndex++, L"PackageA", BOOTSTRAPPER_ACTION_STATE_UNINSTALL, BURN_MSI_PROPERTY_UNINSTALL, INSTALLUILEVEL_NONE, FALSE, BOOTSTRAPPER_MSI_FILE_VERSIONING_MISSING_OR_OLDER, 0);
736 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++); 739 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
@@ -854,7 +857,7 @@ namespace Bootstrapper
854 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++); 857 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
855 ValidateExecutePackageDependency(pPlan, fRollback, dwIndex++, L"PackageA", L"{A6F0CBF7-1578-450C-B9D7-9CF2EEC40002}", BURN_DEPENDENCY_ACTION_UNREGISTER); 858 ValidateExecutePackageDependency(pPlan, fRollback, dwIndex++, L"PackageA", L"{A6F0CBF7-1578-450C-B9D7-9CF2EEC40002}", BURN_DEPENDENCY_ACTION_UNREGISTER);
856 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++); 859 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
857 ValidateExecutePackageProvider(pPlan, fRollback, dwIndex++, L"PackageA", BURN_DEPENDENCY_ACTION_UNREGISTER); 860 ValidateExecutePackageProvider(pPlan, fRollback, dwIndex++, L"PackageA", unregisterActions1, 1);
858 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++); 861 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
859 ValidateExecuteMsiPackage(pPlan, fRollback, dwIndex++, L"PackageA", BOOTSTRAPPER_ACTION_STATE_UNINSTALL, BURN_MSI_PROPERTY_UNINSTALL, INSTALLUILEVEL_NONE, FALSE, BOOTSTRAPPER_MSI_FILE_VERSIONING_MISSING_OR_OLDER, 0); 862 ValidateExecuteMsiPackage(pPlan, fRollback, dwIndex++, L"PackageA", BOOTSTRAPPER_ACTION_STATE_UNINSTALL, BURN_MSI_PROPERTY_UNINSTALL, INSTALLUILEVEL_NONE, FALSE, BOOTSTRAPPER_MSI_FILE_VERSIONING_MISSING_OR_OLDER, 0);
860 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++); 863 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
@@ -868,7 +871,7 @@ namespace Bootstrapper
868 ValidateExecuteRollbackBoundaryStart(pPlan, fRollback, dwIndex++, L"WixDefaultBoundary", TRUE, FALSE); 871 ValidateExecuteRollbackBoundaryStart(pPlan, fRollback, dwIndex++, L"WixDefaultBoundary", TRUE, FALSE);
869 ValidateExecutePackageDependency(pPlan, fRollback, dwIndex++, L"PackageA", L"{A6F0CBF7-1578-450C-B9D7-9CF2EEC40002}", BURN_DEPENDENCY_ACTION_REGISTER); 872 ValidateExecutePackageDependency(pPlan, fRollback, dwIndex++, L"PackageA", L"{A6F0CBF7-1578-450C-B9D7-9CF2EEC40002}", BURN_DEPENDENCY_ACTION_REGISTER);
870 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++); 873 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
871 ValidateExecutePackageProvider(pPlan, fRollback, dwIndex++, L"PackageA", BURN_DEPENDENCY_ACTION_REGISTER); 874 ValidateExecutePackageProvider(pPlan, fRollback, dwIndex++, L"PackageA", registerActions1, 1);
872 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++); 875 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
873 ValidateExecuteMsiPackage(pPlan, fRollback, dwIndex++, L"PackageA", BOOTSTRAPPER_ACTION_STATE_INSTALL, BURN_MSI_PROPERTY_INSTALL, INSTALLUILEVEL_NONE, FALSE, BOOTSTRAPPER_MSI_FILE_VERSIONING_MISSING_OR_OLDER, 0); 876 ValidateExecuteMsiPackage(pPlan, fRollback, dwIndex++, L"PackageA", BOOTSTRAPPER_ACTION_STATE_INSTALL, BURN_MSI_PROPERTY_INSTALL, INSTALLUILEVEL_NONE, FALSE, BOOTSTRAPPER_MSI_FILE_VERSIONING_MISSING_OR_OLDER, 0);
874 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++); 877 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
@@ -1011,14 +1014,14 @@ namespace Bootstrapper
1011 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++); 1014 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
1012 ValidateExecuteWaitCachePackage(pPlan, fRollback, dwIndex++, L"PackageA"); 1015 ValidateExecuteWaitCachePackage(pPlan, fRollback, dwIndex++, L"PackageA");
1013 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++); 1016 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
1014 ValidateExecutePackageProvider(pPlan, fRollback, dwIndex++, L"PackageA", BURN_DEPENDENCY_ACTION_REGISTER); 1017 ValidateExecutePackageProvider(pPlan, fRollback, dwIndex++, L"PackageA", registerActions1, 1);
1015 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++); 1018 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
1016 ValidateExecuteMsiPackage(pPlan, fRollback, dwIndex++, L"PackageA", BOOTSTRAPPER_ACTION_STATE_INSTALL, BURN_MSI_PROPERTY_INSTALL, INSTALLUILEVEL_NONE, FALSE, BOOTSTRAPPER_MSI_FILE_VERSIONING_MISSING_OR_OLDER, 0); 1019 ValidateExecuteMsiPackage(pPlan, fRollback, dwIndex++, L"PackageA", BOOTSTRAPPER_ACTION_STATE_INSTALL, BURN_MSI_PROPERTY_INSTALL, INSTALLUILEVEL_NONE, FALSE, BOOTSTRAPPER_MSI_FILE_VERSIONING_MISSING_OR_OLDER, 0);
1017 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++); 1020 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
1018 ValidateExecutePackageDependency(pPlan, fRollback, dwIndex++, L"PackageA", L"{22D1DDBA-284D-40A7-BD14-95EA07906F21}", BURN_DEPENDENCY_ACTION_REGISTER); 1021 ValidateExecutePackageDependency(pPlan, fRollback, dwIndex++, L"PackageA", L"{22D1DDBA-284D-40A7-BD14-95EA07906F21}", BURN_DEPENDENCY_ACTION_REGISTER);
1019 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++); 1022 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
1020 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++); 1023 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
1021 ValidateExecutePackageProvider(pPlan, fRollback, dwIndex++, L"PatchA", BURN_DEPENDENCY_ACTION_REGISTER); 1024 ValidateExecutePackageProvider(pPlan, fRollback, dwIndex++, L"PatchA", registerActions1, 1);
1022 pExecuteAction = ValidateDeletedExecuteMspTarget(pPlan, fRollback, dwIndex++, L"PatchA", BOOTSTRAPPER_ACTION_STATE_INSTALL, L"{5FF7F534-3FFC-41E0-80CD-E6361E5E7B7B}", TRUE, BURN_MSI_PROPERTY_INSTALL, INSTALLUILEVEL_NONE, FALSE, BOOTSTRAPPER_MSI_FILE_VERSIONING_MISSING_OR_OLDER, TRUE); 1025 pExecuteAction = ValidateDeletedExecuteMspTarget(pPlan, fRollback, dwIndex++, L"PatchA", BOOTSTRAPPER_ACTION_STATE_INSTALL, L"{5FF7F534-3FFC-41E0-80CD-E6361E5E7B7B}", TRUE, BURN_MSI_PROPERTY_INSTALL, INSTALLUILEVEL_NONE, FALSE, BOOTSTRAPPER_MSI_FILE_VERSIONING_MISSING_OR_OLDER, TRUE);
1023 ValidateExecuteMspTargetPatch(pExecuteAction, 0, L"PatchA"); 1026 ValidateExecuteMspTargetPatch(pExecuteAction, 0, L"PatchA");
1024 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++); 1027 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
@@ -1037,14 +1040,14 @@ namespace Bootstrapper
1037 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++); 1040 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
1038 dwExecuteCheckpointId += 1; // cache checkpoints 1041 dwExecuteCheckpointId += 1; // cache checkpoints
1039 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++); 1042 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
1040 ValidateExecutePackageProvider(pPlan, fRollback, dwIndex++, L"PackageA", BURN_DEPENDENCY_ACTION_UNREGISTER); 1043 ValidateExecutePackageProvider(pPlan, fRollback, dwIndex++, L"PackageA", unregisterActions1, 1);
1041 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++); 1044 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
1042 ValidateExecuteMsiPackage(pPlan, fRollback, dwIndex++, L"PackageA", BOOTSTRAPPER_ACTION_STATE_UNINSTALL, BURN_MSI_PROPERTY_UNINSTALL, INSTALLUILEVEL_NONE, FALSE, BOOTSTRAPPER_MSI_FILE_VERSIONING_MISSING_OR_OLDER, 0); 1045 ValidateExecuteMsiPackage(pPlan, fRollback, dwIndex++, L"PackageA", BOOTSTRAPPER_ACTION_STATE_UNINSTALL, BURN_MSI_PROPERTY_UNINSTALL, INSTALLUILEVEL_NONE, FALSE, BOOTSTRAPPER_MSI_FILE_VERSIONING_MISSING_OR_OLDER, 0);
1043 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++); 1046 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
1044 ValidateExecutePackageDependency(pPlan, fRollback, dwIndex++, L"PackageA", L"{22D1DDBA-284D-40A7-BD14-95EA07906F21}", BURN_DEPENDENCY_ACTION_UNREGISTER); 1047 ValidateExecutePackageDependency(pPlan, fRollback, dwIndex++, L"PackageA", L"{22D1DDBA-284D-40A7-BD14-95EA07906F21}", BURN_DEPENDENCY_ACTION_UNREGISTER);
1045 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++); 1048 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
1046 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++); 1049 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
1047 ValidateExecutePackageProvider(pPlan, fRollback, dwIndex++, L"PatchA", BURN_DEPENDENCY_ACTION_UNREGISTER); 1050 ValidateExecutePackageProvider(pPlan, fRollback, dwIndex++, L"PatchA", unregisterActions1, 1);
1048 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++); 1051 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
1049 pExecuteAction = ValidateDeletedExecuteMspTarget(pPlan, fRollback, dwIndex++, L"PatchA", BOOTSTRAPPER_ACTION_STATE_UNINSTALL, L"{5FF7F534-3FFC-41E0-80CD-E6361E5E7B7B}", TRUE, BURN_MSI_PROPERTY_UNINSTALL, INSTALLUILEVEL_NONE, FALSE, BOOTSTRAPPER_MSI_FILE_VERSIONING_MISSING_OR_OLDER, TRUE); 1052 pExecuteAction = ValidateDeletedExecuteMspTarget(pPlan, fRollback, dwIndex++, L"PatchA", BOOTSTRAPPER_ACTION_STATE_UNINSTALL, L"{5FF7F534-3FFC-41E0-80CD-E6361E5E7B7B}", TRUE, BURN_MSI_PROPERTY_UNINSTALL, INSTALLUILEVEL_NONE, FALSE, BOOTSTRAPPER_MSI_FILE_VERSIONING_MISSING_OR_OLDER, TRUE);
1050 ValidateExecuteMspTargetPatch(pExecuteAction, 0, L"PatchA"); 1053 ValidateExecuteMspTargetPatch(pExecuteAction, 0, L"PatchA");
@@ -1108,14 +1111,14 @@ namespace Bootstrapper
1108 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++); 1111 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
1109 ValidateExecutePackageDependency(pPlan, fRollback, dwIndex++, L"PatchA", L"{22D1DDBA-284D-40A7-BD14-95EA07906F21}", BURN_DEPENDENCY_ACTION_UNREGISTER); 1112 ValidateExecutePackageDependency(pPlan, fRollback, dwIndex++, L"PatchA", L"{22D1DDBA-284D-40A7-BD14-95EA07906F21}", BURN_DEPENDENCY_ACTION_UNREGISTER);
1110 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++); 1113 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
1111 ValidateExecutePackageProvider(pPlan, fRollback, dwIndex++, L"PatchA", BURN_DEPENDENCY_ACTION_UNREGISTER); 1114 ValidateExecutePackageProvider(pPlan, fRollback, dwIndex++, L"PatchA", unregisterActions1, 1);
1112 pExecuteAction = ValidateDeletedExecuteMspTarget(pPlan, fRollback, dwIndex++, L"PatchA", BOOTSTRAPPER_ACTION_STATE_UNINSTALL, L"{5FF7F534-3FFC-41E0-80CD-E6361E5E7B7B}", TRUE, BURN_MSI_PROPERTY_UNINSTALL, INSTALLUILEVEL_NONE, FALSE, BOOTSTRAPPER_MSI_FILE_VERSIONING_MISSING_OR_OLDER, TRUE); 1115 pExecuteAction = ValidateDeletedExecuteMspTarget(pPlan, fRollback, dwIndex++, L"PatchA", BOOTSTRAPPER_ACTION_STATE_UNINSTALL, L"{5FF7F534-3FFC-41E0-80CD-E6361E5E7B7B}", TRUE, BURN_MSI_PROPERTY_UNINSTALL, INSTALLUILEVEL_NONE, FALSE, BOOTSTRAPPER_MSI_FILE_VERSIONING_MISSING_OR_OLDER, TRUE);
1113 ValidateExecuteMspTargetPatch(pExecuteAction, 0, L"PatchA"); 1116 ValidateExecuteMspTargetPatch(pExecuteAction, 0, L"PatchA");
1114 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++); 1117 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
1115 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++); 1118 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
1116 ValidateExecutePackageDependency(pPlan, fRollback, dwIndex++, L"PackageA", L"{22D1DDBA-284D-40A7-BD14-95EA07906F21}", BURN_DEPENDENCY_ACTION_UNREGISTER); 1119 ValidateExecutePackageDependency(pPlan, fRollback, dwIndex++, L"PackageA", L"{22D1DDBA-284D-40A7-BD14-95EA07906F21}", BURN_DEPENDENCY_ACTION_UNREGISTER);
1117 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++); 1120 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
1118 ValidateExecutePackageProvider(pPlan, fRollback, dwIndex++, L"PackageA", BURN_DEPENDENCY_ACTION_UNREGISTER); 1121 ValidateExecutePackageProvider(pPlan, fRollback, dwIndex++, L"PackageA", unregisterActions1, 1);
1119 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++); 1122 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
1120 ValidateExecuteMsiPackage(pPlan, fRollback, dwIndex++, L"PackageA", BOOTSTRAPPER_ACTION_STATE_UNINSTALL, BURN_MSI_PROPERTY_UNINSTALL, INSTALLUILEVEL_NONE, FALSE, BOOTSTRAPPER_MSI_FILE_VERSIONING_MISSING_OR_OLDER, 0); 1123 ValidateExecuteMsiPackage(pPlan, fRollback, dwIndex++, L"PackageA", BOOTSTRAPPER_ACTION_STATE_UNINSTALL, BURN_MSI_PROPERTY_UNINSTALL, INSTALLUILEVEL_NONE, FALSE, BOOTSTRAPPER_MSI_FILE_VERSIONING_MISSING_OR_OLDER, 0);
1121 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++); 1124 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
@@ -1129,14 +1132,14 @@ namespace Bootstrapper
1129 ValidateExecuteRollbackBoundaryStart(pPlan, fRollback, dwIndex++, L"WixDefaultBoundary", TRUE, FALSE); 1132 ValidateExecuteRollbackBoundaryStart(pPlan, fRollback, dwIndex++, L"WixDefaultBoundary", TRUE, FALSE);
1130 ValidateExecutePackageDependency(pPlan, fRollback, dwIndex++, L"PatchA", L"{22D1DDBA-284D-40A7-BD14-95EA07906F21}", BURN_DEPENDENCY_ACTION_REGISTER); 1133 ValidateExecutePackageDependency(pPlan, fRollback, dwIndex++, L"PatchA", L"{22D1DDBA-284D-40A7-BD14-95EA07906F21}", BURN_DEPENDENCY_ACTION_REGISTER);
1131 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++); 1134 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
1132 ValidateExecutePackageProvider(pPlan, fRollback, dwIndex++, L"PatchA", BURN_DEPENDENCY_ACTION_REGISTER); 1135 ValidateExecutePackageProvider(pPlan, fRollback, dwIndex++, L"PatchA", registerActions1, 1);
1133 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++); 1136 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
1134 pExecuteAction = ValidateDeletedExecuteMspTarget(pPlan, fRollback, dwIndex++, L"PatchA", BOOTSTRAPPER_ACTION_STATE_INSTALL, L"{5FF7F534-3FFC-41E0-80CD-E6361E5E7B7B}", TRUE, BURN_MSI_PROPERTY_INSTALL, INSTALLUILEVEL_NONE, FALSE, BOOTSTRAPPER_MSI_FILE_VERSIONING_MISSING_OR_OLDER, TRUE); 1137 pExecuteAction = ValidateDeletedExecuteMspTarget(pPlan, fRollback, dwIndex++, L"PatchA", BOOTSTRAPPER_ACTION_STATE_INSTALL, L"{5FF7F534-3FFC-41E0-80CD-E6361E5E7B7B}", TRUE, BURN_MSI_PROPERTY_INSTALL, INSTALLUILEVEL_NONE, FALSE, BOOTSTRAPPER_MSI_FILE_VERSIONING_MISSING_OR_OLDER, TRUE);
1135 ValidateExecuteMspTargetPatch(pExecuteAction, 0, L"PatchA"); 1138 ValidateExecuteMspTargetPatch(pExecuteAction, 0, L"PatchA");
1136 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++); 1139 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
1137 ValidateExecutePackageDependency(pPlan, fRollback, dwIndex++, L"PackageA", L"{22D1DDBA-284D-40A7-BD14-95EA07906F21}", BURN_DEPENDENCY_ACTION_REGISTER); 1140 ValidateExecutePackageDependency(pPlan, fRollback, dwIndex++, L"PackageA", L"{22D1DDBA-284D-40A7-BD14-95EA07906F21}", BURN_DEPENDENCY_ACTION_REGISTER);
1138 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++); 1141 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
1139 ValidateExecutePackageProvider(pPlan, fRollback, dwIndex++, L"PackageA", BURN_DEPENDENCY_ACTION_REGISTER); 1142 ValidateExecutePackageProvider(pPlan, fRollback, dwIndex++, L"PackageA", registerActions1, 1);
1140 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++); 1143 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
1141 ValidateExecuteMsiPackage(pPlan, fRollback, dwIndex++, L"PackageA", BOOTSTRAPPER_ACTION_STATE_INSTALL, BURN_MSI_PROPERTY_INSTALL, INSTALLUILEVEL_NONE, FALSE, BOOTSTRAPPER_MSI_FILE_VERSIONING_MISSING_OR_OLDER, 0); 1144 ValidateExecuteMsiPackage(pPlan, fRollback, dwIndex++, L"PackageA", BOOTSTRAPPER_ACTION_STATE_INSTALL, BURN_MSI_PROPERTY_INSTALL, INSTALLUILEVEL_NONE, FALSE, BOOTSTRAPPER_MSI_FILE_VERSIONING_MISSING_OR_OLDER, 0);
1142 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++); 1145 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
@@ -1711,13 +1714,19 @@ namespace Bootstrapper
1711 __in BOOL fRollback, 1714 __in BOOL fRollback,
1712 __in DWORD dwIndex, 1715 __in DWORD dwIndex,
1713 __in LPCWSTR wzPackageId, 1716 __in LPCWSTR wzPackageId,
1714 __in BURN_DEPENDENCY_ACTION action 1717 __in BURN_DEPENDENCY_ACTION* rgActions,
1718 __in DWORD cActions
1715 ) 1719 )
1716 { 1720 {
1717 BURN_EXECUTE_ACTION* pAction = ValidateExecuteActionExists(pPlan, fRollback, dwIndex); 1721 BURN_EXECUTE_ACTION* pAction = ValidateExecuteActionExists(pPlan, fRollback, dwIndex);
1718 Assert::Equal<DWORD>(BURN_EXECUTE_ACTION_TYPE_PACKAGE_PROVIDER, pAction->type); 1722 Assert::Equal<DWORD>(BURN_EXECUTE_ACTION_TYPE_PACKAGE_PROVIDER, pAction->type);
1719 NativeAssert::StringEqual(wzPackageId, pAction->packageProvider.pPackage->sczId); 1723 NativeAssert::StringEqual(wzPackageId, pAction->packageProvider.pPackage->sczId);
1720 Assert::Equal<DWORD>(action, pAction->packageProvider.action); 1724 Assert::Equal<DWORD>(cActions, pAction->packageProvider.pPackage->cDependencyProviders);
1725 for (DWORD i = 0; i < cActions; ++i)
1726 {
1727 const BURN_DEPENDENCY_PROVIDER* pProvider = pAction->packageProvider.pPackage->rgDependencyProviders + i;
1728 Assert::Equal<DWORD>(rgActions[i], fRollback ? pProvider->providerRollback : pProvider->providerExecute);
1729 }
1721 Assert::Equal<BOOL>(FALSE, pAction->fDeleted); 1730 Assert::Equal<BOOL>(FALSE, pAction->fDeleted);
1722 } 1731 }
1723 1732