diff options
Diffstat (limited to '')
| -rw-r--r-- | src/burn/engine/core.cpp | 42 |
1 files changed, 33 insertions, 9 deletions
diff --git a/src/burn/engine/core.cpp b/src/burn/engine/core.cpp index 2dfa4857..7937bd65 100644 --- a/src/burn/engine/core.cpp +++ b/src/burn/engine/core.cpp | |||
| @@ -379,7 +379,7 @@ extern "C" HRESULT CoreDetect( | |||
| 379 | pEngineState->registration.fEligibleForCleanup = FALSE; | 379 | pEngineState->registration.fEligibleForCleanup = FALSE; |
| 380 | } | 380 | } |
| 381 | 381 | ||
| 382 | LogId(REPORT_STANDARD, MSG_DETECTED_PACKAGE, pPackage->sczId, LoggingPackageStateToString(pPackage->currentState), LoggingBoolToString(pPackage->fCached), LoggingPackageRegistrationStateToString(pPackage->fCanAffectRegistration, pPackage->installRegistrationState), LoggingPackageRegistrationStateToString(pPackage->fCanAffectRegistration, pPackage->cacheRegistrationState)); | 382 | LogId(REPORT_STANDARD, MSG_DETECTED_PACKAGE, pPackage->sczId, LoggingPackageStateToString(pPackage->currentState), LoggingBoolToString(pPackage->fCached), LoggingPackageRegistrationStateToString(pPackage->fCanAffectRegistration, pPackage->installRegistrationState), LoggingPackageRegistrationStateToString(pPackage->fCanAffectRegistration, pPackage->cacheRegistrationState), LoggingPackageScopeToString(pPackage->scope)); |
| 383 | 383 | ||
| 384 | if (BURN_PACKAGE_TYPE_MSI == pPackage->type) | 384 | if (BURN_PACKAGE_TYPE_MSI == pPackage->type) |
| 385 | { | 385 | { |
| @@ -424,8 +424,9 @@ LExit: | |||
| 424 | 424 | ||
| 425 | extern "C" HRESULT CorePlan( | 425 | extern "C" HRESULT CorePlan( |
| 426 | __in BURN_ENGINE_STATE* pEngineState, | 426 | __in BURN_ENGINE_STATE* pEngineState, |
| 427 | __in BOOTSTRAPPER_ACTION action | 427 | __in BOOTSTRAPPER_ACTION action, |
| 428 | ) | 428 | __in BOOTSTRAPPER_SCOPE plannedScope |
| 429 | ) | ||
| 429 | { | 430 | { |
| 430 | HRESULT hr = S_OK; | 431 | HRESULT hr = S_OK; |
| 431 | BOOL fPlanBegan = FALSE; | 432 | BOOL fPlanBegan = FALSE; |
| @@ -433,7 +434,7 @@ extern "C" HRESULT CorePlan( | |||
| 433 | BURN_PACKAGE* pForwardCompatibleBundlePackage = NULL; | 434 | BURN_PACKAGE* pForwardCompatibleBundlePackage = NULL; |
| 434 | BOOL fContinuePlanning = TRUE; // assume we won't skip planning due to dependencies. | 435 | BOOL fContinuePlanning = TRUE; // assume we won't skip planning due to dependencies. |
| 435 | 436 | ||
| 436 | LogId(REPORT_STANDARD, MSG_PLAN_BEGIN, pEngineState->packages.cPackages, LoggingBurnActionToString(action)); | 437 | LogId(REPORT_STANDARD, MSG_PLAN_BEGIN, pEngineState->packages.cPackages, LoggingBurnActionToString(action), LoggingBundleScopeToString(plannedScope)); |
| 437 | 438 | ||
| 438 | fPlanBegan = TRUE; | 439 | fPlanBegan = TRUE; |
| 439 | hr = BACallbackOnPlanBegin(&pEngineState->userExperience, pEngineState->packages.cPackages); | 440 | hr = BACallbackOnPlanBegin(&pEngineState->userExperience, pEngineState->packages.cPackages); |
| @@ -452,12 +453,13 @@ extern "C" HRESULT CorePlan( | |||
| 452 | pEngineState->fPlanned = FALSE; | 453 | pEngineState->fPlanned = FALSE; |
| 453 | PlanReset(&pEngineState->plan, &pEngineState->variables, &pEngineState->containers, &pEngineState->packages, &pEngineState->layoutPayloads); | 454 | PlanReset(&pEngineState->plan, &pEngineState->variables, &pEngineState->containers, &pEngineState->packages, &pEngineState->layoutPayloads); |
| 454 | 455 | ||
| 455 | hr = PlanSetVariables(action, &pEngineState->variables); | 456 | hr = PlanSetVariables(action, pEngineState->registration.scope, pEngineState->plan.plannedScope, &pEngineState->variables); |
| 456 | ExitOnFailure(hr, "Failed to update action."); | 457 | ExitOnFailure(hr, "Failed to update plan variables."); |
| 457 | 458 | ||
| 458 | // Remember the overall action state in the plan since it shapes the changes | 459 | // Remember the overall action state in the plan since it shapes the changes |
| 459 | // we make everywhere. | 460 | // we make everywhere. |
| 460 | pEngineState->plan.action = action; | 461 | pEngineState->plan.action = action; |
| 462 | pEngineState->plan.plannedScope = plannedScope; | ||
| 461 | pEngineState->plan.pCache = &pEngineState->cache; | 463 | pEngineState->plan.pCache = &pEngineState->cache; |
| 462 | pEngineState->plan.pCommand = &pEngineState->command; | 464 | pEngineState->plan.pCommand = &pEngineState->command; |
| 463 | pEngineState->plan.pInternalCommand = &pEngineState->internalCommand; | 465 | pEngineState->plan.pInternalCommand = &pEngineState->internalCommand; |
| @@ -467,6 +469,17 @@ extern "C" HRESULT CorePlan( | |||
| 467 | pEngineState->plan.fDisableRollback = pEngineState->fDisableRollback || BOOTSTRAPPER_ACTION_UNSAFE_UNINSTALL == pEngineState->plan.action; | 469 | pEngineState->plan.fDisableRollback = pEngineState->fDisableRollback || BOOTSTRAPPER_ACTION_UNSAFE_UNINSTALL == pEngineState->plan.action; |
| 468 | pEngineState->plan.fPlanPackageCacheRollback = BOOTSTRAPPER_REGISTRATION_TYPE_NONE == pEngineState->registration.detectedRegistrationType; | 470 | pEngineState->plan.fPlanPackageCacheRollback = BOOTSTRAPPER_REGISTRATION_TYPE_NONE == pEngineState->registration.detectedRegistrationType; |
| 469 | 471 | ||
| 472 | hr = PlanPackagesAndBundleScope(pEngineState->packages.rgPackages, pEngineState->packages.cPackages, pEngineState->plan.plannedScope, pEngineState->registration.scope, pEngineState->command.commandLineScope, &pEngineState->plan.plannedScope, &pEngineState->registration.fPerMachine); | ||
| 473 | ExitOnFailure(hr, "Failed to determine packages and bundle scope."); | ||
| 474 | |||
| 475 | if (BOOTSTRAPPER_PACKAGE_SCOPE_PER_MACHINE_OR_PER_USER == pEngineState->registration.scope || BOOTSTRAPPER_PACKAGE_SCOPE_PER_USER_OR_PER_MACHINE == pEngineState->registration.scope) | ||
| 476 | { | ||
| 477 | LogId(REPORT_STANDARD, MSG_PLAN_CONFIGURED_SCOPE, LoggingInstallScopeToString(pEngineState->registration.fPerMachine)); | ||
| 478 | } | ||
| 479 | |||
| 480 | hr = RegistrationSetPaths(&pEngineState->registration, &pEngineState->cache); | ||
| 481 | ExitOnFailure(hr, "Failed to set registration paths."); | ||
| 482 | |||
| 470 | // Set resume commandline | 483 | // Set resume commandline |
| 471 | hr = PlanSetResumeCommand(&pEngineState->plan, &pEngineState->registration, &pEngineState->log); | 484 | hr = PlanSetResumeCommand(&pEngineState->plan, &pEngineState->registration, &pEngineState->log); |
| 472 | ExitOnFailure(hr, "Failed to set resume command"); | 485 | ExitOnFailure(hr, "Failed to set resume command"); |
| @@ -475,7 +488,7 @@ extern "C" HRESULT CorePlan( | |||
| 475 | ExitOnFailure(hr, "Failed to initialize the dependencies for the plan."); | 488 | ExitOnFailure(hr, "Failed to initialize the dependencies for the plan."); |
| 476 | 489 | ||
| 477 | hr = RegistrationPlanInitialize(&pEngineState->registration); | 490 | hr = RegistrationPlanInitialize(&pEngineState->registration); |
| 478 | ExitOnFailure(hr, "Failed to initialize registration for the plan."); | 491 | ExitOnFailure(hr, "Failed to initialize the plan for registration."); |
| 479 | 492 | ||
| 480 | if (BOOTSTRAPPER_ACTION_LAYOUT == action) | 493 | if (BOOTSTRAPPER_ACTION_LAYOUT == action) |
| 481 | { | 494 | { |
| @@ -556,6 +569,9 @@ extern "C" HRESULT CorePlan( | |||
| 556 | LogPackages(pUpgradeBundlePackage, pForwardCompatibleBundlePackage, &pEngineState->packages, &pEngineState->registration.relatedBundles, action); | 569 | LogPackages(pUpgradeBundlePackage, pForwardCompatibleBundlePackage, &pEngineState->packages, &pEngineState->registration.relatedBundles, action); |
| 557 | } | 570 | } |
| 558 | 571 | ||
| 572 | hr = PlanSetVariables(action, pEngineState->registration.scope, pEngineState->plan.plannedScope, &pEngineState->variables); | ||
| 573 | ExitOnFailure(hr, "Failed to update plan variables after planning."); | ||
| 574 | |||
| 559 | PlanDump(&pEngineState->plan); | 575 | PlanDump(&pEngineState->plan); |
| 560 | 576 | ||
| 561 | LExit: | 577 | LExit: |
| @@ -1331,7 +1347,7 @@ extern "C" void CoreCleanup( | |||
| 1331 | ExitFunction(); | 1347 | ExitFunction(); |
| 1332 | } | 1348 | } |
| 1333 | 1349 | ||
| 1334 | hr = CorePlan(pEngineState, BOOTSTRAPPER_ACTION_UNINSTALL); | 1350 | hr = CorePlan(pEngineState, BOOTSTRAPPER_ACTION_UNINSTALL, BOOTSTRAPPER_SCOPE_DEFAULT); |
| 1335 | ExitOnFailure(hr, "Plan during cleanup failed"); | 1351 | ExitOnFailure(hr, "Plan during cleanup failed"); |
| 1336 | 1352 | ||
| 1337 | hr = CoreApply(pEngineState, pEngineState->hMessageWindow); | 1353 | hr = CoreApply(pEngineState, pEngineState->hMessageWindow); |
| @@ -1470,6 +1486,14 @@ extern "C" HRESULT CoreParseCommandLine( | |||
| 1470 | { | 1486 | { |
| 1471 | pInternalCommand->fDisableSystemRestore = TRUE; | 1487 | pInternalCommand->fDisableSystemRestore = TRUE; |
| 1472 | } | 1488 | } |
| 1489 | else if (CSTR_EQUAL == ::CompareStringOrdinal(&argv[i][1], -1, L"peruser", -1, TRUE)) | ||
| 1490 | { | ||
| 1491 | pCommand->commandLineScope = BOOTSTRAPPER_SCOPE_PER_USER; | ||
| 1492 | } | ||
| 1493 | else if (CSTR_EQUAL == ::CompareStringOrdinal(&argv[i][1], -1, L"permachine", -1, TRUE)) | ||
| 1494 | { | ||
| 1495 | pCommand->commandLineScope = BOOTSTRAPPER_SCOPE_PER_MACHINE; | ||
| 1496 | } | ||
| 1473 | else if (CSTR_EQUAL == ::CompareStringOrdinal(&argv[i][1], -1, L"originalsource", -1, TRUE)) | 1497 | else if (CSTR_EQUAL == ::CompareStringOrdinal(&argv[i][1], -1, L"originalsource", -1, TRUE)) |
| 1474 | { | 1498 | { |
| 1475 | if (i + 1 >= argc) | 1499 | if (i + 1 >= argc) |
| @@ -2346,7 +2370,7 @@ static void LogPackages( | |||
| 2346 | LogRollbackBoundary(pPackage->pRollbackBoundaryBackward); | 2370 | LogRollbackBoundary(pPackage->pRollbackBoundaryBackward); |
| 2347 | } | 2371 | } |
| 2348 | 2372 | ||
| 2349 | LogId(REPORT_STANDARD, MSG_PLANNED_PACKAGE, pPackage->sczId, LoggingPackageStateToString(pPackage->currentState), LoggingRequestStateToString(pPackage->defaultRequested), LoggingRequestStateToString(pPackage->requested), LoggingActionStateToString(pPackage->execute), LoggingActionStateToString(pPackage->rollback), LoggingCacheTypeToString(pPackage->authoredCacheType), LoggingCacheTypeToString(pPackage->cacheType), LoggingPlannedCacheToString(pPackage), LoggingBoolToString(pPackage->fPlannedUncache), LoggingDependencyActionToString(pPackage->dependencyExecute), LoggingPackageRegistrationStateToString(pPackage->fCanAffectRegistration, pPackage->expectedInstallRegistrationState), LoggingPackageRegistrationStateToString(pPackage->fCanAffectRegistration, pPackage->expectedCacheRegistrationState)); | 2373 | LogId(REPORT_STANDARD, MSG_PLANNED_PACKAGE, pPackage->sczId, LoggingPackageStateToString(pPackage->currentState), LoggingRequestStateToString(pPackage->defaultRequested), LoggingRequestStateToString(pPackage->requested), LoggingActionStateToString(pPackage->execute), LoggingActionStateToString(pPackage->rollback), LoggingCacheTypeToString(pPackage->authoredCacheType), LoggingCacheTypeToString(pPackage->cacheType), LoggingPlannedCacheToString(pPackage), LoggingBoolToString(pPackage->fPlannedUncache), LoggingDependencyActionToString(pPackage->dependencyExecute), LoggingPackageRegistrationStateToString(pPackage->fCanAffectRegistration, pPackage->expectedInstallRegistrationState), LoggingPackageRegistrationStateToString(pPackage->fCanAffectRegistration, pPackage->expectedCacheRegistrationState), LoggingInstallScopeToString(pPackage->fPerMachine)); |
| 2350 | 2374 | ||
| 2351 | if (BURN_PACKAGE_TYPE_MSI == pPackage->type) | 2375 | if (BURN_PACKAGE_TYPE_MSI == pPackage->type) |
| 2352 | { | 2376 | { |
