diff options
Diffstat (limited to '')
-rw-r--r-- | src/engine/plan.cpp | 192 |
1 files changed, 60 insertions, 132 deletions
diff --git a/src/engine/plan.cpp b/src/engine/plan.cpp index 6f5407b9..1aaec252 100644 --- a/src/engine/plan.cpp +++ b/src/engine/plan.cpp | |||
@@ -6,13 +6,6 @@ | |||
6 | 6 | ||
7 | // internal struct definitions | 7 | // internal struct definitions |
8 | 8 | ||
9 | struct PLAN_NONPERMANENT_PACKAGE_INDICES | ||
10 | { | ||
11 | DWORD iAfterExecuteFirstNonPermanentPackage; | ||
12 | DWORD iBeforeRollbackFirstNonPermanentPackage; | ||
13 | DWORD iAfterExecuteLastNonPermanentPackage; | ||
14 | DWORD iAfterRollbackLastNonPermanentPackage; | ||
15 | }; | ||
16 | 9 | ||
17 | // internal function definitions | 10 | // internal function definitions |
18 | 11 | ||
@@ -39,8 +32,7 @@ static HRESULT ProcessPackage( | |||
39 | __in BOOTSTRAPPER_RELATION_TYPE relationType, | 32 | __in BOOTSTRAPPER_RELATION_TYPE relationType, |
40 | __in_z_opt LPCWSTR wzLayoutDirectory, | 33 | __in_z_opt LPCWSTR wzLayoutDirectory, |
41 | __inout HANDLE* phSyncpointEvent, | 34 | __inout HANDLE* phSyncpointEvent, |
42 | __inout BURN_ROLLBACK_BOUNDARY** ppRollbackBoundary, | 35 | __inout BURN_ROLLBACK_BOUNDARY** ppRollbackBoundary |
43 | __in_opt PLAN_NONPERMANENT_PACKAGE_INDICES* pNonpermanentPackageIndices | ||
44 | ); | 36 | ); |
45 | static HRESULT ProcessPackageRollbackBoundary( | 37 | static HRESULT ProcessPackageRollbackBoundary( |
46 | __in BURN_PLAN* pPlan, | 38 | __in BURN_PLAN* pPlan, |
@@ -479,7 +471,7 @@ extern "C" HRESULT PlanPackages( | |||
479 | __in BURN_PLAN* pPlan, | 471 | __in BURN_PLAN* pPlan, |
480 | __in BURN_LOGGING* pLog, | 472 | __in BURN_LOGGING* pLog, |
481 | __in BURN_VARIABLES* pVariables, | 473 | __in BURN_VARIABLES* pVariables, |
482 | __in BOOL fBundleInstalled, | 474 | __in BOOL /*fBundleInstalled*/, |
483 | __in BOOTSTRAPPER_DISPLAY display, | 475 | __in BOOTSTRAPPER_DISPLAY display, |
484 | __in BOOTSTRAPPER_RELATION_TYPE relationType, | 476 | __in BOOTSTRAPPER_RELATION_TYPE relationType, |
485 | __in_z_opt LPCWSTR wzLayoutDirectory, | 477 | __in_z_opt LPCWSTR wzLayoutDirectory, |
@@ -490,12 +482,6 @@ extern "C" HRESULT PlanPackages( | |||
490 | BOOL fBundlePerMachine = pPlan->fPerMachine; // bundle is per-machine if plan starts per-machine. | 482 | BOOL fBundlePerMachine = pPlan->fPerMachine; // bundle is per-machine if plan starts per-machine. |
491 | BURN_ROLLBACK_BOUNDARY* pRollbackBoundary = NULL; | 483 | BURN_ROLLBACK_BOUNDARY* pRollbackBoundary = NULL; |
492 | 484 | ||
493 | PLAN_NONPERMANENT_PACKAGE_INDICES nonpermanentPackageIndices; | ||
494 | nonpermanentPackageIndices.iAfterExecuteFirstNonPermanentPackage = BURN_PLAN_INVALID_ACTION_INDEX; | ||
495 | nonpermanentPackageIndices.iBeforeRollbackFirstNonPermanentPackage = BURN_PLAN_INVALID_ACTION_INDEX; | ||
496 | nonpermanentPackageIndices.iAfterExecuteLastNonPermanentPackage = BURN_PLAN_INVALID_ACTION_INDEX; | ||
497 | nonpermanentPackageIndices.iAfterRollbackLastNonPermanentPackage = BURN_PLAN_INVALID_ACTION_INDEX; | ||
498 | |||
499 | // Plan the packages. | 485 | // Plan the packages. |
500 | for (DWORD i = 0; i < pPackages->cPackages; ++i) | 486 | for (DWORD i = 0; i < pPackages->cPackages; ++i) |
501 | { | 487 | { |
@@ -518,34 +504,10 @@ extern "C" HRESULT PlanPackages( | |||
518 | } | 504 | } |
519 | } | 505 | } |
520 | 506 | ||
521 | hr = ProcessPackage(fBundlePerMachine, pUX, pPlan, pPackage, pLog, pVariables, display, relationType, wzLayoutDirectory, phSyncpointEvent, &pRollbackBoundary, &nonpermanentPackageIndices); | 507 | hr = ProcessPackage(fBundlePerMachine, pUX, pPlan, pPackage, pLog, pVariables, display, relationType, wzLayoutDirectory, phSyncpointEvent, &pRollbackBoundary); |
522 | ExitOnFailure(hr, "Failed to process package."); | 508 | ExitOnFailure(hr, "Failed to process package."); |
523 | } | 509 | } |
524 | 510 | ||
525 | // Insert the "keep registration" and "remove registration" actions in the plan when installing the first time and anytime we are uninstalling respectively. | ||
526 | if (!fBundleInstalled && (BOOTSTRAPPER_ACTION_INSTALL == pPlan->action || BOOTSTRAPPER_ACTION_MODIFY == pPlan->action || BOOTSTRAPPER_ACTION_REPAIR == pPlan->action)) | ||
527 | { | ||
528 | if (BURN_PLAN_INVALID_ACTION_INDEX == nonpermanentPackageIndices.iAfterExecuteFirstNonPermanentPackage) | ||
529 | { | ||
530 | nonpermanentPackageIndices.iAfterExecuteFirstNonPermanentPackage = pPlan->cExecuteActions; | ||
531 | nonpermanentPackageIndices.iBeforeRollbackFirstNonPermanentPackage = pPlan->cRollbackActions; | ||
532 | } | ||
533 | |||
534 | hr = PlanKeepRegistration(pPlan, nonpermanentPackageIndices.iAfterExecuteFirstNonPermanentPackage, nonpermanentPackageIndices.iBeforeRollbackFirstNonPermanentPackage); | ||
535 | ExitOnFailure(hr, "Failed to plan install keep registration."); | ||
536 | } | ||
537 | else if (BOOTSTRAPPER_ACTION_UNINSTALL == pPlan->action) | ||
538 | { | ||
539 | if (BURN_PLAN_INVALID_ACTION_INDEX == nonpermanentPackageIndices.iAfterExecuteLastNonPermanentPackage) | ||
540 | { | ||
541 | nonpermanentPackageIndices.iAfterExecuteLastNonPermanentPackage = pPlan->cExecuteActions; | ||
542 | nonpermanentPackageIndices.iAfterRollbackLastNonPermanentPackage = pPlan->cRollbackActions; | ||
543 | } | ||
544 | |||
545 | hr = PlanRemoveRegistration(pPlan, nonpermanentPackageIndices.iAfterExecuteLastNonPermanentPackage, nonpermanentPackageIndices.iAfterRollbackLastNonPermanentPackage); | ||
546 | ExitOnFailure(hr, "Failed to plan uninstall remove registration."); | ||
547 | } | ||
548 | |||
549 | // If we still have an open rollback boundary, complete it. | 511 | // If we still have an open rollback boundary, complete it. |
550 | if (pRollbackBoundary) | 512 | if (pRollbackBoundary) |
551 | { | 513 | { |
@@ -572,9 +534,9 @@ LExit: | |||
572 | extern "C" HRESULT PlanRegistration( | 534 | extern "C" HRESULT PlanRegistration( |
573 | __in BURN_PLAN* pPlan, | 535 | __in BURN_PLAN* pPlan, |
574 | __in BURN_REGISTRATION* pRegistration, | 536 | __in BURN_REGISTRATION* pRegistration, |
575 | __in BOOTSTRAPPER_RESUME_TYPE resumeType, | 537 | __in BOOTSTRAPPER_RESUME_TYPE /*resumeType*/, |
576 | __in BOOTSTRAPPER_RELATION_TYPE relationType, | 538 | __in BOOTSTRAPPER_RELATION_TYPE relationType, |
577 | __out BOOL* pfContinuePlanning | 539 | __inout BOOL* pfContinuePlanning |
578 | ) | 540 | ) |
579 | { | 541 | { |
580 | HRESULT hr = S_OK; | 542 | HRESULT hr = S_OK; |
@@ -583,9 +545,6 @@ extern "C" HRESULT PlanRegistration( | |||
583 | 545 | ||
584 | pPlan->fRegister = TRUE; // register the bundle since we're modifying machine state. | 546 | pPlan->fRegister = TRUE; // register the bundle since we're modifying machine state. |
585 | 547 | ||
586 | // Keep the registration if the bundle was already installed or we are planning after a restart. | ||
587 | pPlan->fKeepRegistrationDefault = (pRegistration->fInstalled || BOOTSTRAPPER_RESUME_TYPE_REBOOT == resumeType); | ||
588 | |||
589 | pPlan->fDisallowRemoval = FALSE; // by default the bundle can be planned to be removed | 548 | pPlan->fDisallowRemoval = FALSE; // by default the bundle can be planned to be removed |
590 | 549 | ||
591 | if (BOOTSTRAPPER_ACTION_UNINSTALL == pPlan->action) | 550 | if (BOOTSTRAPPER_ACTION_UNINSTALL == pPlan->action) |
@@ -692,7 +651,7 @@ extern "C" HRESULT PlanRegistration( | |||
692 | pPlan->dwRegistrationOperations |= BURN_REGISTRATION_ACTION_OPERATIONS_CACHE_BUNDLE; | 651 | pPlan->dwRegistrationOperations |= BURN_REGISTRATION_ACTION_OPERATIONS_CACHE_BUNDLE; |
693 | pPlan->dwRegistrationOperations |= BURN_REGISTRATION_ACTION_OPERATIONS_WRITE_REGISTRATION; | 652 | pPlan->dwRegistrationOperations |= BURN_REGISTRATION_ACTION_OPERATIONS_WRITE_REGISTRATION; |
694 | } | 653 | } |
695 | else if (BOOTSTRAPPER_ACTION_REPAIR == pPlan->action && !CacheBundleRunningFromCache()) // repairing but not not running from the cache. | 654 | else if (BOOTSTRAPPER_ACTION_REPAIR == pPlan->action && !CacheBundleRunningFromCache()) // repairing but not running from the cache. |
696 | { | 655 | { |
697 | pPlan->dwRegistrationOperations |= BURN_REGISTRATION_ACTION_OPERATIONS_CACHE_BUNDLE; | 656 | pPlan->dwRegistrationOperations |= BURN_REGISTRATION_ACTION_OPERATIONS_CACHE_BUNDLE; |
698 | pPlan->dwRegistrationOperations |= BURN_REGISTRATION_ACTION_OPERATIONS_WRITE_REGISTRATION; | 657 | pPlan->dwRegistrationOperations |= BURN_REGISTRATION_ACTION_OPERATIONS_WRITE_REGISTRATION; |
@@ -786,7 +745,7 @@ extern "C" HRESULT PlanPassThroughBundle( | |||
786 | BURN_ROLLBACK_BOUNDARY* pRollbackBoundary = NULL; | 745 | BURN_ROLLBACK_BOUNDARY* pRollbackBoundary = NULL; |
787 | 746 | ||
788 | // Plan passthrough package. | 747 | // Plan passthrough package. |
789 | hr = ProcessPackage(fBundlePerMachine, pUX, pPlan, pPackage, pLog, pVariables, display, relationType, NULL, phSyncpointEvent, &pRollbackBoundary, NULL); | 748 | hr = ProcessPackage(fBundlePerMachine, pUX, pPlan, pPackage, pLog, pVariables, display, relationType, NULL, phSyncpointEvent, &pRollbackBoundary); |
790 | ExitOnFailure(hr, "Failed to process passthrough package."); | 749 | ExitOnFailure(hr, "Failed to process passthrough package."); |
791 | 750 | ||
792 | // If we still have an open rollback boundary, complete it. | 751 | // If we still have an open rollback boundary, complete it. |
@@ -820,7 +779,7 @@ extern "C" HRESULT PlanUpdateBundle( | |||
820 | BURN_ROLLBACK_BOUNDARY* pRollbackBoundary = NULL; | 779 | BURN_ROLLBACK_BOUNDARY* pRollbackBoundary = NULL; |
821 | 780 | ||
822 | // Plan update package. | 781 | // Plan update package. |
823 | hr = ProcessPackage(fBundlePerMachine, pUX, pPlan, pPackage, pLog, pVariables, display, relationType, NULL, phSyncpointEvent, &pRollbackBoundary, NULL); | 782 | hr = ProcessPackage(fBundlePerMachine, pUX, pPlan, pPackage, pLog, pVariables, display, relationType, NULL, phSyncpointEvent, &pRollbackBoundary); |
824 | ExitOnFailure(hr, "Failed to process update package."); | 783 | ExitOnFailure(hr, "Failed to process update package."); |
825 | 784 | ||
826 | // If we still have an open rollback boundary, complete it. | 785 | // If we still have an open rollback boundary, complete it. |
@@ -849,8 +808,7 @@ static HRESULT ProcessPackage( | |||
849 | __in BOOTSTRAPPER_RELATION_TYPE relationType, | 808 | __in BOOTSTRAPPER_RELATION_TYPE relationType, |
850 | __in_z_opt LPCWSTR wzLayoutDirectory, | 809 | __in_z_opt LPCWSTR wzLayoutDirectory, |
851 | __inout HANDLE* phSyncpointEvent, | 810 | __inout HANDLE* phSyncpointEvent, |
852 | __inout BURN_ROLLBACK_BOUNDARY** ppRollbackBoundary, | 811 | __inout BURN_ROLLBACK_BOUNDARY** ppRollbackBoundary |
853 | __in_opt PLAN_NONPERMANENT_PACKAGE_INDICES* pNonpermanentPackageIndices | ||
854 | ) | 812 | ) |
855 | { | 813 | { |
856 | HRESULT hr = S_OK; | 814 | HRESULT hr = S_OK; |
@@ -871,6 +829,12 @@ static HRESULT ProcessPackage( | |||
871 | hr = ProcessPackageRollbackBoundary(pPlan, pEffectiveRollbackBoundary, ppRollbackBoundary); | 829 | hr = ProcessPackageRollbackBoundary(pPlan, pEffectiveRollbackBoundary, ppRollbackBoundary); |
872 | ExitOnFailure(hr, "Failed to process package rollback boundary."); | 830 | ExitOnFailure(hr, "Failed to process package rollback boundary."); |
873 | 831 | ||
832 | if (pPackage->fCanAffectRegistration) | ||
833 | { | ||
834 | pPackage->expectedCacheRegistrationState = pPackage->cacheRegistrationState; | ||
835 | pPackage->expectedInstallRegistrationState = pPackage->installRegistrationState; | ||
836 | } | ||
837 | |||
874 | // If the package is in a requested state, plan it. | 838 | // If the package is in a requested state, plan it. |
875 | if (BOOTSTRAPPER_REQUEST_STATE_NONE != pPackage->requested) | 839 | if (BOOTSTRAPPER_REQUEST_STATE_NONE != pPackage->requested) |
876 | { | 840 | { |
@@ -881,26 +845,19 @@ static HRESULT ProcessPackage( | |||
881 | } | 845 | } |
882 | else | 846 | else |
883 | { | 847 | { |
884 | if (pPackage->fUninstallable && pNonpermanentPackageIndices) | ||
885 | { | ||
886 | if (BURN_PLAN_INVALID_ACTION_INDEX == pNonpermanentPackageIndices->iBeforeRollbackFirstNonPermanentPackage) | ||
887 | { | ||
888 | pNonpermanentPackageIndices->iBeforeRollbackFirstNonPermanentPackage = pPlan->cRollbackActions; | ||
889 | } | ||
890 | } | ||
891 | |||
892 | hr = PlanExecutePackage(fBundlePerMachine, display, pUX, pPlan, pPackage, pLog, pVariables, phSyncpointEvent); | 848 | hr = PlanExecutePackage(fBundlePerMachine, display, pUX, pPlan, pPackage, pLog, pVariables, phSyncpointEvent); |
893 | ExitOnFailure(hr, "Failed to plan execute package."); | 849 | ExitOnFailure(hr, "Failed to plan execute package."); |
894 | 850 | ||
895 | if (pPackage->fUninstallable && pNonpermanentPackageIndices) | 851 | if (pPackage->fCanAffectRegistration) |
896 | { | 852 | { |
897 | if (BURN_PLAN_INVALID_ACTION_INDEX == pNonpermanentPackageIndices->iAfterExecuteFirstNonPermanentPackage) | 853 | if (BOOTSTRAPPER_ACTION_STATE_UNINSTALL < pPackage->execute) |
898 | { | 854 | { |
899 | pNonpermanentPackageIndices->iAfterExecuteFirstNonPermanentPackage = pPlan->cExecuteActions - 1; | 855 | pPackage->expectedInstallRegistrationState = BURN_PACKAGE_REGISTRATION_STATE_PRESENT; |
856 | } | ||
857 | else if (BOOTSTRAPPER_ACTION_STATE_UNINSTALL == pPackage->execute) | ||
858 | { | ||
859 | pPackage->expectedInstallRegistrationState = BURN_PACKAGE_REGISTRATION_STATE_ABSENT; | ||
900 | } | 860 | } |
901 | |||
902 | pNonpermanentPackageIndices->iAfterExecuteLastNonPermanentPackage = pPlan->cExecuteActions; | ||
903 | pNonpermanentPackageIndices->iAfterRollbackLastNonPermanentPackage = pPlan->cRollbackActions; | ||
904 | } | 861 | } |
905 | } | 862 | } |
906 | } | 863 | } |
@@ -920,6 +877,32 @@ static HRESULT ProcessPackage( | |||
920 | } | 877 | } |
921 | } | 878 | } |
922 | 879 | ||
880 | if (pPackage->fCanAffectRegistration) | ||
881 | { | ||
882 | if (BURN_DEPENDENCY_ACTION_REGISTER == pPackage->dependencyExecute) | ||
883 | { | ||
884 | if (BURN_PACKAGE_REGISTRATION_STATE_IGNORED == pPackage->expectedCacheRegistrationState) | ||
885 | { | ||
886 | pPackage->expectedCacheRegistrationState = BURN_PACKAGE_REGISTRATION_STATE_PRESENT; | ||
887 | } | ||
888 | if (BURN_PACKAGE_REGISTRATION_STATE_IGNORED == pPackage->expectedInstallRegistrationState) | ||
889 | { | ||
890 | pPackage->expectedInstallRegistrationState = BURN_PACKAGE_REGISTRATION_STATE_PRESENT; | ||
891 | } | ||
892 | } | ||
893 | else if (BURN_DEPENDENCY_ACTION_UNREGISTER == pPackage->dependencyExecute) | ||
894 | { | ||
895 | if (BURN_PACKAGE_REGISTRATION_STATE_PRESENT == pPackage->expectedCacheRegistrationState) | ||
896 | { | ||
897 | pPackage->expectedCacheRegistrationState = BURN_PACKAGE_REGISTRATION_STATE_IGNORED; | ||
898 | } | ||
899 | if (BURN_PACKAGE_REGISTRATION_STATE_PRESENT == pPackage->expectedInstallRegistrationState) | ||
900 | { | ||
901 | pPackage->expectedInstallRegistrationState = BURN_PACKAGE_REGISTRATION_STATE_IGNORED; | ||
902 | } | ||
903 | } | ||
904 | } | ||
905 | |||
923 | // Add the checkpoint after each package and dependency registration action. | 906 | // Add the checkpoint after each package and dependency registration action. |
924 | if (BOOTSTRAPPER_ACTION_STATE_NONE != pPackage->execute || BOOTSTRAPPER_ACTION_STATE_NONE != pPackage->rollback || BURN_DEPENDENCY_ACTION_NONE != pPackage->dependencyExecute) | 907 | if (BOOTSTRAPPER_ACTION_STATE_NONE != pPackage->execute || BOOTSTRAPPER_ACTION_STATE_NONE != pPackage->rollback || BURN_DEPENDENCY_ACTION_NONE != pPackage->dependencyExecute) |
925 | { | 908 | { |
@@ -1572,6 +1555,11 @@ extern "C" HRESULT PlanCleanPackage( | |||
1572 | pCleanAction->pPackage = pPackage; | 1555 | pCleanAction->pPackage = pPackage; |
1573 | 1556 | ||
1574 | pPackage->fUncache = TRUE; | 1557 | pPackage->fUncache = TRUE; |
1558 | |||
1559 | if (pPackage->fCanAffectRegistration) | ||
1560 | { | ||
1561 | pPackage->expectedCacheRegistrationState = BURN_PACKAGE_REGISTRATION_STATE_ABSENT; | ||
1562 | } | ||
1575 | } | 1563 | } |
1576 | 1564 | ||
1577 | LExit: | 1565 | LExit: |
@@ -1708,68 +1696,6 @@ LExit: | |||
1708 | return hr; | 1696 | return hr; |
1709 | } | 1697 | } |
1710 | 1698 | ||
1711 | extern "C" HRESULT PlanKeepRegistration( | ||
1712 | __in BURN_PLAN* pPlan, | ||
1713 | __in DWORD iAfterExecutePackageAction, | ||
1714 | __in DWORD iBeforeRollbackPackageAction | ||
1715 | ) | ||
1716 | { | ||
1717 | HRESULT hr = S_OK; | ||
1718 | BURN_EXECUTE_ACTION* pAction = NULL; | ||
1719 | |||
1720 | if (BURN_PLAN_INVALID_ACTION_INDEX != iAfterExecutePackageAction) | ||
1721 | { | ||
1722 | hr = PlanInsertExecuteAction(iAfterExecutePackageAction, pPlan, &pAction); | ||
1723 | ExitOnFailure(hr, "Failed to insert keep registration execute action."); | ||
1724 | |||
1725 | pAction->type = BURN_EXECUTE_ACTION_TYPE_REGISTRATION; | ||
1726 | pAction->registration.fKeep = TRUE; | ||
1727 | } | ||
1728 | |||
1729 | if (BURN_PLAN_INVALID_ACTION_INDEX != iBeforeRollbackPackageAction) | ||
1730 | { | ||
1731 | hr = PlanInsertRollbackAction(iBeforeRollbackPackageAction, pPlan, &pAction); | ||
1732 | ExitOnFailure(hr, "Failed to insert keep registration rollback action."); | ||
1733 | |||
1734 | pAction->type = BURN_EXECUTE_ACTION_TYPE_REGISTRATION; | ||
1735 | pAction->registration.fKeep = FALSE; | ||
1736 | } | ||
1737 | |||
1738 | LExit: | ||
1739 | return hr; | ||
1740 | } | ||
1741 | |||
1742 | extern "C" HRESULT PlanRemoveRegistration( | ||
1743 | __in BURN_PLAN* pPlan, | ||
1744 | __in DWORD iAfterExecutePackageAction, | ||
1745 | __in DWORD iAfterRollbackPackageAction | ||
1746 | ) | ||
1747 | { | ||
1748 | HRESULT hr = S_OK; | ||
1749 | BURN_EXECUTE_ACTION* pAction = NULL; | ||
1750 | |||
1751 | if (BURN_PLAN_INVALID_ACTION_INDEX != iAfterExecutePackageAction) | ||
1752 | { | ||
1753 | hr = PlanInsertExecuteAction(iAfterExecutePackageAction, pPlan, &pAction); | ||
1754 | ExitOnFailure(hr, "Failed to insert remove registration execute action."); | ||
1755 | |||
1756 | pAction->type = BURN_EXECUTE_ACTION_TYPE_REGISTRATION; | ||
1757 | pAction->registration.fKeep = FALSE; | ||
1758 | } | ||
1759 | |||
1760 | if (BURN_PLAN_INVALID_ACTION_INDEX != iAfterRollbackPackageAction) | ||
1761 | { | ||
1762 | hr = PlanInsertRollbackAction(iAfterRollbackPackageAction, pPlan, &pAction); | ||
1763 | ExitOnFailure(hr, "Failed to insert remove registration rollback action."); | ||
1764 | |||
1765 | pAction->type = BURN_EXECUTE_ACTION_TYPE_REGISTRATION; | ||
1766 | pAction->registration.fKeep = TRUE; | ||
1767 | } | ||
1768 | |||
1769 | LExit: | ||
1770 | return hr; | ||
1771 | } | ||
1772 | |||
1773 | extern "C" HRESULT PlanRollbackBoundaryBegin( | 1699 | extern "C" HRESULT PlanRollbackBoundaryBegin( |
1774 | __in BURN_PLAN* pPlan, | 1700 | __in BURN_PLAN* pPlan, |
1775 | __in BURN_ROLLBACK_BOUNDARY* pRollbackBoundary | 1701 | __in BURN_ROLLBACK_BOUNDARY* pRollbackBoundary |
@@ -1925,6 +1851,8 @@ static void ResetPlannedPackageState( | |||
1925 | pPackage->dependencyExecute = BURN_DEPENDENCY_ACTION_NONE; | 1851 | pPackage->dependencyExecute = BURN_DEPENDENCY_ACTION_NONE; |
1926 | pPackage->dependencyRollback = BURN_DEPENDENCY_ACTION_NONE; | 1852 | pPackage->dependencyRollback = BURN_DEPENDENCY_ACTION_NONE; |
1927 | pPackage->fDependencyManagerWasHere = FALSE; | 1853 | pPackage->fDependencyManagerWasHere = FALSE; |
1854 | pPackage->expectedCacheRegistrationState = BURN_PACKAGE_REGISTRATION_STATE_UNKNOWN; | ||
1855 | pPackage->expectedInstallRegistrationState = BURN_PACKAGE_REGISTRATION_STATE_UNKNOWN; | ||
1928 | 1856 | ||
1929 | if (BURN_PACKAGE_TYPE_MSI == pPackage->type && pPackage->Msi.rgFeatures) | 1857 | if (BURN_PACKAGE_TYPE_MSI == pPackage->type && pPackage->Msi.rgFeatures) |
1930 | { | 1858 | { |
@@ -2198,6 +2126,11 @@ static HRESULT AddCachePackageHelper( | |||
2198 | // did cache operations to verify the cache is valid so we did not plan the acquisition of the package. | 2126 | // did cache operations to verify the cache is valid so we did not plan the acquisition of the package. |
2199 | pPackage->fAcquire = (BURN_CACHE_STATE_COMPLETE != pPackage->cache); | 2127 | pPackage->fAcquire = (BURN_CACHE_STATE_COMPLETE != pPackage->cache); |
2200 | 2128 | ||
2129 | if (pPackage->fCanAffectRegistration) | ||
2130 | { | ||
2131 | pPackage->expectedCacheRegistrationState = BURN_PACKAGE_REGISTRATION_STATE_PRESENT; | ||
2132 | } | ||
2133 | |||
2201 | LExit: | 2134 | LExit: |
2202 | return hr; | 2135 | return hr; |
2203 | } | 2136 | } |
@@ -3118,10 +3051,6 @@ static void ExecuteActionLog( | |||
3118 | LogStringLine(PlanDumpLevel, "%ls action[%u]: MSU_PACKAGE package id: %ls, action: %hs, log path: %ls", wzBase, iAction, pAction->msuPackage.pPackage->sczId, LoggingActionStateToString(pAction->msuPackage.action), pAction->msuPackage.sczLogPath); | 3051 | LogStringLine(PlanDumpLevel, "%ls action[%u]: MSU_PACKAGE package id: %ls, action: %hs, log path: %ls", wzBase, iAction, pAction->msuPackage.pPackage->sczId, LoggingActionStateToString(pAction->msuPackage.action), pAction->msuPackage.sczLogPath); |
3119 | break; | 3052 | break; |
3120 | 3053 | ||
3121 | case BURN_EXECUTE_ACTION_TYPE_REGISTRATION: | ||
3122 | LogStringLine(PlanDumpLevel, "%ls action[%u]: REGISTRATION keep: %ls", wzBase, iAction, pAction->registration.fKeep ? L"yes" : L"no"); | ||
3123 | break; | ||
3124 | |||
3125 | case BURN_EXECUTE_ACTION_TYPE_ROLLBACK_BOUNDARY: | 3054 | case BURN_EXECUTE_ACTION_TYPE_ROLLBACK_BOUNDARY: |
3126 | LogStringLine(PlanDumpLevel, "%ls action[%u]: ROLLBACK_BOUNDARY id: %ls, vital: %ls", wzBase, iAction, pAction->rollbackBoundary.pRollbackBoundary->sczId, pAction->rollbackBoundary.pRollbackBoundary->fVital ? L"yes" : L"no"); | 3055 | LogStringLine(PlanDumpLevel, "%ls action[%u]: ROLLBACK_BOUNDARY id: %ls, vital: %ls", wzBase, iAction, pAction->rollbackBoundary.pRollbackBoundary->sczId, pAction->rollbackBoundary.pRollbackBoundary->fVital ? L"yes" : L"no"); |
3127 | break; | 3056 | break; |
@@ -3157,7 +3086,6 @@ extern "C" void PlanDump( | |||
3157 | LogStringLine(PlanDumpLevel, "Plan action: %hs", LoggingBurnActionToString(pPlan->action)); | 3086 | LogStringLine(PlanDumpLevel, "Plan action: %hs", LoggingBurnActionToString(pPlan->action)); |
3158 | LogStringLine(PlanDumpLevel, " per-machine: %hs", LoggingTrueFalseToString(pPlan->fPerMachine)); | 3087 | LogStringLine(PlanDumpLevel, " per-machine: %hs", LoggingTrueFalseToString(pPlan->fPerMachine)); |
3159 | LogStringLine(PlanDumpLevel, " disable-rollback: %hs", LoggingTrueFalseToString(pPlan->fDisableRollback)); | 3088 | LogStringLine(PlanDumpLevel, " disable-rollback: %hs", LoggingTrueFalseToString(pPlan->fDisableRollback)); |
3160 | LogStringLine(PlanDumpLevel, " keep registration by default: %hs", LoggingTrueFalseToString(pPlan->fKeepRegistrationDefault)); | ||
3161 | LogStringLine(PlanDumpLevel, " estimated size: %llu", pPlan->qwEstimatedSize); | 3089 | LogStringLine(PlanDumpLevel, " estimated size: %llu", pPlan->qwEstimatedSize); |
3162 | 3090 | ||
3163 | LogStringLine(PlanDumpLevel, "Plan cache size: %llu", pPlan->qwCacheSizeTotal); | 3091 | LogStringLine(PlanDumpLevel, "Plan cache size: %llu", pPlan->qwCacheSizeTotal); |