diff options
Diffstat (limited to 'src/engine/relatedbundle.cpp')
-rw-r--r-- | src/engine/relatedbundle.cpp | 19 |
1 files changed, 8 insertions, 11 deletions
diff --git a/src/engine/relatedbundle.cpp b/src/engine/relatedbundle.cpp index a4948a88..6953c678 100644 --- a/src/engine/relatedbundle.cpp +++ b/src/engine/relatedbundle.cpp | |||
@@ -391,14 +391,14 @@ static HRESULT LoadRelatedBundleFromKey( | |||
391 | __in HKEY hkBundleId, | 391 | __in HKEY hkBundleId, |
392 | __in BOOL fPerMachine, | 392 | __in BOOL fPerMachine, |
393 | __in BOOTSTRAPPER_RELATION_TYPE relationType, | 393 | __in BOOTSTRAPPER_RELATION_TYPE relationType, |
394 | __inout BURN_RELATED_BUNDLE *pRelatedBundle | 394 | __inout BURN_RELATED_BUNDLE* pRelatedBundle |
395 | ) | 395 | ) |
396 | { | 396 | { |
397 | HRESULT hr = S_OK; | 397 | HRESULT hr = S_OK; |
398 | DWORD64 qwEngineVersion = 0; | 398 | DWORD64 qwEngineVersion = 0; |
399 | LPWSTR sczBundleVersion = NULL; | 399 | LPWSTR sczBundleVersion = NULL; |
400 | LPWSTR sczCachePath = NULL; | 400 | LPWSTR sczCachePath = NULL; |
401 | BURN_CACHE_STATE cacheState = BURN_CACHE_STATE_NONE; | 401 | BOOL fCached = FALSE; |
402 | DWORD64 qwFileSize = 0; | 402 | DWORD64 qwFileSize = 0; |
403 | BURN_DEPENDENCY_PROVIDER dependencyProvider = { }; | 403 | BURN_DEPENDENCY_PROVIDER dependencyProvider = { }; |
404 | 404 | ||
@@ -423,19 +423,16 @@ static HRESULT LoadRelatedBundleFromKey( | |||
423 | hr = RegReadString(hkBundleId, BURN_REGISTRATION_REGISTRY_BUNDLE_CACHE_PATH, &sczCachePath); | 423 | hr = RegReadString(hkBundleId, BURN_REGISTRATION_REGISTRY_BUNDLE_CACHE_PATH, &sczCachePath); |
424 | ExitOnFailure(hr, "Failed to read cache path from registry for bundle: %ls", wzRelatedBundleId); | 424 | ExitOnFailure(hr, "Failed to read cache path from registry for bundle: %ls", wzRelatedBundleId); |
425 | 425 | ||
426 | hr = FileSize(sczCachePath, reinterpret_cast<LONGLONG *>(&qwFileSize)); | 426 | if (FileExistsEx(sczCachePath, NULL)) |
427 | if (SUCCEEDED(hr)) | ||
428 | { | 427 | { |
429 | cacheState = BURN_CACHE_STATE_COMPLETE; | 428 | fCached = TRUE; |
430 | } | 429 | } |
431 | else if (E_FILENOTFOUND != hr) | 430 | else |
432 | { | 431 | { |
433 | cacheState = BURN_CACHE_STATE_PARTIAL; | 432 | LogId(REPORT_STANDARD, MSG_DETECT_RELATED_BUNDLE_NOT_CACHED, wzRelatedBundleId, sczCachePath); |
434 | LogId(REPORT_STANDARD, MSG_DETECT_RELATED_BUNDLE_NOT_FULLY_CACHED, wzRelatedBundleId, sczCachePath, hr); | ||
435 | } | 433 | } |
436 | hr = S_OK; | ||
437 | 434 | ||
438 | pRelatedBundle->fPlannable = BURN_CACHE_STATE_COMPLETE == cacheState; | 435 | pRelatedBundle->fPlannable = fCached; |
439 | 436 | ||
440 | hr = RegReadString(hkBundleId, BURN_REGISTRATION_REGISTRY_BUNDLE_PROVIDER_KEY, &dependencyProvider.sczKey); | 437 | hr = RegReadString(hkBundleId, BURN_REGISTRATION_REGISTRY_BUNDLE_PROVIDER_KEY, &dependencyProvider.sczKey); |
441 | if (E_FILENOTFOUND != hr) | 438 | if (E_FILENOTFOUND != hr) |
@@ -464,7 +461,7 @@ static HRESULT LoadRelatedBundleFromKey( | |||
464 | pRelatedBundle->relationType = relationType; | 461 | pRelatedBundle->relationType = relationType; |
465 | 462 | ||
466 | hr = PseudoBundleInitialize(qwEngineVersion, &pRelatedBundle->package, fPerMachine, wzRelatedBundleId, pRelatedBundle->relationType, | 463 | hr = PseudoBundleInitialize(qwEngineVersion, &pRelatedBundle->package, fPerMachine, wzRelatedBundleId, pRelatedBundle->relationType, |
467 | BOOTSTRAPPER_PACKAGE_STATE_PRESENT, cacheState, sczCachePath, sczCachePath, NULL, qwFileSize, FALSE, | 464 | BOOTSTRAPPER_PACKAGE_STATE_PRESENT, fCached, sczCachePath, sczCachePath, NULL, qwFileSize, FALSE, |
468 | L"-quiet", L"-repair -quiet", L"-uninstall -quiet", | 465 | L"-quiet", L"-repair -quiet", L"-uninstall -quiet", |
469 | (dependencyProvider.sczKey && *dependencyProvider.sczKey) ? &dependencyProvider : NULL, | 466 | (dependencyProvider.sczKey && *dependencyProvider.sczKey) ? &dependencyProvider : NULL, |
470 | NULL, 0); | 467 | NULL, 0); |