diff options
| author | Sean Hall <r.sean.hall@gmail.com> | 2022-08-08 18:02:15 -0500 |
|---|---|---|
| committer | Sean Hall <r.sean.hall@gmail.com> | 2022-08-09 09:57:02 -0500 |
| commit | 240b663ad5fc94ed6d19c966b5c9105a176ecf40 (patch) | |
| tree | d194e242ccb5bb69f0dbbc388ede87cef65c700f /src/ext | |
| parent | 8e1cbe8d7b468553d76c20452561e89726de5c47 (diff) | |
| download | wix-240b663ad5fc94ed6d19c966b5c9105a176ecf40.tar.gz wix-240b663ad5fc94ed6d19c966b5c9105a176ecf40.tar.bz2 wix-240b663ad5fc94ed6d19c966b5c9105a176ecf40.zip | |
Skip logging errors in some places when they are due to missing files or registry keys or values.
Related to 6696
Diffstat (limited to 'src/ext')
| -rw-r--r-- | src/ext/Bal/dnchost/dncutil.cpp | 2 | ||||
| -rw-r--r-- | src/ext/Bal/mbahost/mbahost.cpp | 99 | ||||
| -rw-r--r-- | src/ext/Dependency/ca/wixdepca.cpp | 7 |
3 files changed, 52 insertions, 56 deletions
diff --git a/src/ext/Bal/dnchost/dncutil.cpp b/src/ext/Bal/dnchost/dncutil.cpp index 6486e6e9..a8d4f4ff 100644 --- a/src/ext/Bal/dnchost/dncutil.cpp +++ b/src/ext/Bal/dnchost/dncutil.cpp | |||
| @@ -338,7 +338,7 @@ static HRESULT InitializeCoreClrPre5( | |||
| 338 | { | 338 | { |
| 339 | BalLog(BOOTSTRAPPER_LOG_LEVEL_ERROR, "%ls: %ls", rgPropertyKeys[i], rgPropertyValues[i]); | 339 | BalLog(BOOTSTRAPPER_LOG_LEVEL_ERROR, "%ls: %ls", rgPropertyKeys[i], rgPropertyValues[i]); |
| 340 | } | 340 | } |
| 341 | BalExitOnFailure(hr = E_FILENOTFOUND, "Failed to locate coreclr.dll."); | 341 | BalExitWithRootFailure(hr, E_FILENOTFOUND, "Failed to locate coreclr.dll."); |
| 342 | } | 342 | } |
| 343 | 343 | ||
| 344 | hr = LoadCoreClr(pState, sczCoreClrPath); | 344 | hr = LoadCoreClr(pState, sczCoreClrPath); |
diff --git a/src/ext/Bal/mbahost/mbahost.cpp b/src/ext/Bal/mbahost/mbahost.cpp index 5edbe376..9d8acc8a 100644 --- a/src/ext/Bal/mbahost/mbahost.cpp +++ b/src/ext/Bal/mbahost/mbahost.cpp | |||
| @@ -228,31 +228,31 @@ static HRESULT GetAppDomain( | |||
| 228 | 228 | ||
| 229 | // Create the setup information for a new AppDomain to set the app base and config. | 229 | // Create the setup information for a new AppDomain to set the app base and config. |
| 230 | hr = pState->pCLRHost->CreateDomainSetup(&pUnk); | 230 | hr = pState->pCLRHost->CreateDomainSetup(&pUnk); |
| 231 | ExitOnRootFailure(hr, "Failed to create the AppDomainSetup object."); | 231 | BalExitOnRootFailure(hr, "Failed to create the AppDomainSetup object."); |
| 232 | 232 | ||
| 233 | hr = pUnk->QueryInterface(__uuidof(IAppDomainSetup), reinterpret_cast<LPVOID*>(&pAppDomainSetup)); | 233 | hr = pUnk->QueryInterface(__uuidof(IAppDomainSetup), reinterpret_cast<LPVOID*>(&pAppDomainSetup)); |
| 234 | ExitOnRootFailure(hr, "Failed to query for the IAppDomainSetup interface."); | 234 | BalExitOnRootFailure(hr, "Failed to query for the IAppDomainSetup interface."); |
| 235 | ReleaseNullObject(pUnk); | 235 | ReleaseNullObject(pUnk); |
| 236 | 236 | ||
| 237 | // Set properties on the AppDomainSetup object. | 237 | // Set properties on the AppDomainSetup object. |
| 238 | bstrAppBase = ::SysAllocString(pState->sczAppBase); | 238 | bstrAppBase = ::SysAllocString(pState->sczAppBase); |
| 239 | ExitOnNull(bstrAppBase, hr, E_OUTOFMEMORY, "Failed to allocate the application base path for the AppDomainSetup."); | 239 | BalExitOnNull(bstrAppBase, hr, E_OUTOFMEMORY, "Failed to allocate the application base path for the AppDomainSetup."); |
| 240 | 240 | ||
| 241 | hr = pAppDomainSetup->put_ApplicationBase(bstrAppBase); | 241 | hr = pAppDomainSetup->put_ApplicationBase(bstrAppBase); |
| 242 | ExitOnRootFailure(hr, "Failed to set the application base path for the AppDomainSetup."); | 242 | BalExitOnRootFailure(hr, "Failed to set the application base path for the AppDomainSetup."); |
| 243 | 243 | ||
| 244 | bstrConfigPath = ::SysAllocString(pState->sczConfigPath); | 244 | bstrConfigPath = ::SysAllocString(pState->sczConfigPath); |
| 245 | ExitOnNull(bstrConfigPath, hr, E_OUTOFMEMORY, "Failed to allocate the application configuration file for the AppDomainSetup."); | 245 | BalExitOnNull(bstrConfigPath, hr, E_OUTOFMEMORY, "Failed to allocate the application configuration file for the AppDomainSetup."); |
| 246 | 246 | ||
| 247 | hr = pAppDomainSetup->put_ConfigurationFile(bstrConfigPath); | 247 | hr = pAppDomainSetup->put_ConfigurationFile(bstrConfigPath); |
| 248 | ExitOnRootFailure(hr, "Failed to set the configuration file path for the AppDomainSetup."); | 248 | BalExitOnRootFailure(hr, "Failed to set the configuration file path for the AppDomainSetup."); |
| 249 | 249 | ||
| 250 | // Create the AppDomain to load the factory type. | 250 | // Create the AppDomain to load the factory type. |
| 251 | hr = pState->pCLRHost->CreateDomainEx(L"MBA", pAppDomainSetup, NULL, &pUnk); | 251 | hr = pState->pCLRHost->CreateDomainEx(L"MBA", pAppDomainSetup, NULL, &pUnk); |
| 252 | ExitOnRootFailure(hr, "Failed to create the MBA AppDomain."); | 252 | BalExitOnRootFailure(hr, "Failed to create the MBA AppDomain."); |
| 253 | 253 | ||
| 254 | hr = pUnk->QueryInterface(__uuidof(_AppDomain), reinterpret_cast<LPVOID*>(&pState->pAppDomain)); | 254 | hr = pUnk->QueryInterface(__uuidof(_AppDomain), reinterpret_cast<LPVOID*>(&pState->pAppDomain)); |
| 255 | ExitOnRootFailure(hr, "Failed to query for the _AppDomain interface."); | 255 | BalExitOnRootFailure(hr, "Failed to query for the _AppDomain interface."); |
| 256 | 256 | ||
| 257 | LExit: | 257 | LExit: |
| 258 | ReleaseBSTR(bstrConfigPath); | 258 | ReleaseBSTR(bstrConfigPath); |
| @@ -270,13 +270,13 @@ static HRESULT LoadModulePaths( | |||
| 270 | LPWSTR sczFullPath = NULL; | 270 | LPWSTR sczFullPath = NULL; |
| 271 | 271 | ||
| 272 | hr = PathForCurrentProcess(&sczFullPath, pState->hInstance); | 272 | hr = PathForCurrentProcess(&sczFullPath, pState->hInstance); |
| 273 | ExitOnFailure(hr, "Failed to get the full host path."); | 273 | BalExitOnFailure(hr, "Failed to get the full host path."); |
| 274 | 274 | ||
| 275 | hr = PathGetDirectory(sczFullPath, &pState->sczAppBase); | 275 | hr = PathGetDirectory(sczFullPath, &pState->sczAppBase); |
| 276 | ExitOnFailure(hr, "Failed to get the directory of the full process path."); | 276 | BalExitOnFailure(hr, "Failed to get the directory of the full process path."); |
| 277 | 277 | ||
| 278 | hr = PathConcat(pState->sczAppBase, MBA_CONFIG_FILE_NAME, &pState->sczConfigPath); | 278 | hr = PathConcat(pState->sczAppBase, MBA_CONFIG_FILE_NAME, &pState->sczConfigPath); |
| 279 | ExitOnFailure(hr, "Failed to get the full path to the application configuration file."); | 279 | BalExitOnFailure(hr, "Failed to get the full path to the application configuration file."); |
| 280 | 280 | ||
| 281 | LExit: | 281 | LExit: |
| 282 | ReleaseStr(sczFullPath); | 282 | ReleaseStr(sczFullPath); |
| @@ -332,23 +332,23 @@ static HRESULT CheckSupportedFrameworks( | |||
| 332 | BOOL fUpdatedManifest = FALSE; | 332 | BOOL fUpdatedManifest = FALSE; |
| 333 | 333 | ||
| 334 | hr = XmlLoadDocumentFromFile(wzConfigPath, &pixdManifest); | 334 | hr = XmlLoadDocumentFromFile(wzConfigPath, &pixdManifest); |
| 335 | ExitOnFailure(hr, "Failed to load bootstrapper config file from path: %ls", wzConfigPath); | 335 | BalExitOnFailure(hr, "Failed to load bootstrapper config file from path: %ls", wzConfigPath); |
| 336 | 336 | ||
| 337 | hr = XmlSelectNodes(pixdManifest, L"/configuration/wix.bootstrapper/host/supportedFramework", &pNodeList); | 337 | hr = XmlSelectNodes(pixdManifest, L"/configuration/wix.bootstrapper/host/supportedFramework", &pNodeList); |
| 338 | ExitOnFailure(hr, "Failed to select all supportedFramework elements."); | 338 | BalExitOnFailure(hr, "Failed to select all supportedFramework elements."); |
| 339 | 339 | ||
| 340 | hr = pNodeList->get_length(reinterpret_cast<long*>(&cSupportedFrameworks)); | 340 | hr = pNodeList->get_length(reinterpret_cast<long*>(&cSupportedFrameworks)); |
| 341 | ExitOnFailure(hr, "Failed to get the supported framework count."); | 341 | BalExitOnFailure(hr, "Failed to get the supported framework count."); |
| 342 | 342 | ||
| 343 | if (cSupportedFrameworks) | 343 | if (cSupportedFrameworks) |
| 344 | { | 344 | { |
| 345 | while (S_OK == (hr = XmlNextElement(pNodeList, &pNode, NULL))) | 345 | while (S_OK == (hr = XmlNextElement(pNodeList, &pNode, NULL))) |
| 346 | { | 346 | { |
| 347 | hr = XmlGetAttributeEx(pNode, L"version", &sczSupportedFrameworkVersion); | 347 | hr = XmlGetAttributeEx(pNode, L"version", &sczSupportedFrameworkVersion); |
| 348 | ExitOnRequiredXmlQueryFailure(hr, "Failed to get supportedFramework/@version."); | 348 | BalExitOnRequiredXmlQueryFailure(hr, "Failed to get supportedFramework/@version."); |
| 349 | 349 | ||
| 350 | hr = StrAllocFormatted(&sczFrameworkRegistryKey, L"SOFTWARE\\Microsoft\\NET Framework Setup\\NDP\\%ls", sczSupportedFrameworkVersion); | 350 | hr = StrAllocFormatted(&sczFrameworkRegistryKey, L"SOFTWARE\\Microsoft\\NET Framework Setup\\NDP\\%ls", sczSupportedFrameworkVersion); |
| 351 | ExitOnFailure(hr, "Failed to allocate path to supported framework Install registry key."); | 351 | BalExitOnFailure(hr, "Failed to allocate path to supported framework Install registry key."); |
| 352 | 352 | ||
| 353 | hr = RegOpen(HKEY_LOCAL_MACHINE, sczFrameworkRegistryKey, KEY_READ, &hkFramework); | 353 | hr = RegOpen(HKEY_LOCAL_MACHINE, sczFrameworkRegistryKey, KEY_READ, &hkFramework); |
| 354 | if (SUCCEEDED(hr)) | 354 | if (SUCCEEDED(hr)) |
| @@ -367,19 +367,18 @@ static HRESULT CheckSupportedFrameworks( | |||
| 367 | // If we looped through all the supported frameworks but didn't find anything, ensure we return a failure. | 367 | // If we looped through all the supported frameworks but didn't find anything, ensure we return a failure. |
| 368 | if (S_FALSE == hr) | 368 | if (S_FALSE == hr) |
| 369 | { | 369 | { |
| 370 | hr = E_NOTFOUND; | 370 | BalExitWithRootFailure(hr, E_NOTFOUND, "Failed to find a supported framework."); |
| 371 | ExitOnRootFailure(hr, "Failed to find a supported framework."); | ||
| 372 | } | 371 | } |
| 373 | 372 | ||
| 374 | hr = UpdateSupportedRuntime(pixdManifest, pNode, &fUpdatedManifest); | 373 | hr = UpdateSupportedRuntime(pixdManifest, pNode, &fUpdatedManifest); |
| 375 | ExitOnFailure(hr, "Failed to update supportedRuntime."); | 374 | BalExitOnFailure(hr, "Failed to update supportedRuntime."); |
| 376 | } | 375 | } |
| 377 | // else no supported frameworks specified, so the startup/supportedRuntime must be enough. | 376 | // else no supported frameworks specified, so the startup/supportedRuntime must be enough. |
| 378 | 377 | ||
| 379 | if (fUpdatedManifest) | 378 | if (fUpdatedManifest) |
| 380 | { | 379 | { |
| 381 | hr = XmlSaveDocument(pixdManifest, wzConfigPath); | 380 | hr = XmlSaveDocument(pixdManifest, wzConfigPath); |
| 382 | ExitOnFailure(hr, "Failed to save updated manifest over config file: %ls", wzConfigPath); | 381 | BalExitOnFailure(hr, "Failed to save updated manifest over config file: %ls", wzConfigPath); |
| 383 | } | 382 | } |
| 384 | 383 | ||
| 385 | LExit: | 384 | LExit: |
| @@ -410,7 +409,7 @@ static HRESULT UpdateSupportedRuntime( | |||
| 410 | 409 | ||
| 411 | // If the runtime version attribute is not specified, don't update the manifest. | 410 | // If the runtime version attribute is not specified, don't update the manifest. |
| 412 | hr = XmlGetAttributeEx(pixnSupportedFramework, L"runtimeVersion", &sczSupportedRuntimeVersion); | 411 | hr = XmlGetAttributeEx(pixnSupportedFramework, L"runtimeVersion", &sczSupportedRuntimeVersion); |
| 413 | ExitOnOptionalXmlQueryFailure(hr, fXmlFound, "Failed to get supportedFramework/@runtimeVersion."); | 412 | BalExitOnOptionalXmlQueryFailure(hr, fXmlFound, "Failed to get supportedFramework/@runtimeVersion."); |
| 414 | 413 | ||
| 415 | if (!fXmlFound) | 414 | if (!fXmlFound) |
| 416 | { | 415 | { |
| @@ -420,17 +419,17 @@ static HRESULT UpdateSupportedRuntime( | |||
| 420 | // Get the startup element. Fail if we can't find it since it'll be necessary to load the | 419 | // Get the startup element. Fail if we can't find it since it'll be necessary to load the |
| 421 | // correct runtime. | 420 | // correct runtime. |
| 422 | hr = XmlSelectSingleNode(pixdManifest, L"/configuration/startup", &pixnStartup); | 421 | hr = XmlSelectSingleNode(pixdManifest, L"/configuration/startup", &pixnStartup); |
| 423 | ExitOnRequiredXmlQueryFailure(hr, "Failed to get startup element."); | 422 | BalExitOnRequiredXmlQueryFailure(hr, "Failed to get startup element."); |
| 424 | 423 | ||
| 425 | // Remove any pre-existing supported runtimes because they'll just get in the way and create our new one. | 424 | // Remove any pre-existing supported runtimes because they'll just get in the way and create our new one. |
| 426 | hr = XmlRemoveChildren(pixnStartup, L"supportedRuntime"); | 425 | hr = XmlRemoveChildren(pixnStartup, L"supportedRuntime"); |
| 427 | ExitOnFailure(hr, "Failed to remove pre-existing supportedRuntime elements."); | 426 | BalExitOnFailure(hr, "Failed to remove pre-existing supportedRuntime elements."); |
| 428 | 427 | ||
| 429 | hr = XmlCreateChild(pixnStartup, L"supportedRuntime", &pixnSupportedRuntime); | 428 | hr = XmlCreateChild(pixnStartup, L"supportedRuntime", &pixnSupportedRuntime); |
| 430 | ExitOnFailure(hr, "Failed to create supportedRuntime element."); | 429 | BalExitOnFailure(hr, "Failed to create supportedRuntime element."); |
| 431 | 430 | ||
| 432 | hr = XmlSetAttribute(pixnSupportedRuntime, L"version", sczSupportedRuntimeVersion); | 431 | hr = XmlSetAttribute(pixnSupportedRuntime, L"version", sczSupportedRuntimeVersion); |
| 433 | ExitOnFailure(hr, "Failed to set supportedRuntime/@version to '%ls'.", sczSupportedRuntimeVersion); | 432 | BalExitOnFailure(hr, "Failed to set supportedRuntime/@version to '%ls'.", sczSupportedRuntimeVersion); |
| 434 | 433 | ||
| 435 | *pfUpdatedManifest = TRUE; | 434 | *pfUpdatedManifest = TRUE; |
| 436 | 435 | ||
| @@ -465,14 +464,14 @@ static HRESULT LoadRuntime( | |||
| 465 | 464 | ||
| 466 | // Check that the supported framework is installed. | 465 | // Check that the supported framework is installed. |
| 467 | hr = CheckSupportedFrameworks(pState->sczConfigPath); | 466 | hr = CheckSupportedFrameworks(pState->sczConfigPath); |
| 468 | ExitOnFailure(hr, "Failed to find supported framework."); | 467 | BalExitOnFailure(hr, "Failed to find supported framework."); |
| 469 | 468 | ||
| 470 | // Cache the CLR host to be shutdown later. This can occur on a different thread. | 469 | // Cache the CLR host to be shutdown later. This can occur on a different thread. |
| 471 | // Disable message boxes from being displayed on error and blocking execution. | 470 | // Disable message boxes from being displayed on error and blocking execution. |
| 472 | ::SetErrorMode(uiMode | SEM_FAILCRITICALERRORS); | 471 | ::SetErrorMode(uiMode | SEM_FAILCRITICALERRORS); |
| 473 | 472 | ||
| 474 | hr = LoadSystemLibrary(L"mscoree.dll", &hModule); | 473 | hr = LoadSystemLibrary(L"mscoree.dll", &hModule); |
| 475 | ExitOnFailure(hr, "Failed to load mscoree.dll"); | 474 | BalExitOnFailure(hr, "Failed to load mscoree.dll"); |
| 476 | 475 | ||
| 477 | pfnCLRCreateInstance = reinterpret_cast<CLRCreateInstanceFnPtr>(::GetProcAddress(hModule, "CLRCreateInstance")); | 476 | pfnCLRCreateInstance = reinterpret_cast<CLRCreateInstanceFnPtr>(::GetProcAddress(hModule, "CLRCreateInstance")); |
| 478 | 477 | ||
| @@ -481,7 +480,7 @@ static HRESULT LoadRuntime( | |||
| 481 | hr = pfnCLRCreateInstance(CLSID_CLRMetaHostPolicy, IID_ICLRMetaHostPolicy, reinterpret_cast<LPVOID*>(&pCLRMetaHostPolicy)); | 480 | hr = pfnCLRCreateInstance(CLSID_CLRMetaHostPolicy, IID_ICLRMetaHostPolicy, reinterpret_cast<LPVOID*>(&pCLRMetaHostPolicy)); |
| 482 | if (E_NOTIMPL != hr) | 481 | if (E_NOTIMPL != hr) |
| 483 | { | 482 | { |
| 484 | ExitOnRootFailure(hr, "Failed to create instance of ICLRMetaHostPolicy."); | 483 | BalExitOnRootFailure(hr, "Failed to create instance of ICLRMetaHostPolicy."); |
| 485 | 484 | ||
| 486 | fFallbackToCorBindToCurrentRuntime = FALSE; | 485 | fFallbackToCorBindToCurrentRuntime = FALSE; |
| 487 | } | 486 | } |
| @@ -490,19 +489,19 @@ static HRESULT LoadRuntime( | |||
| 490 | if (fFallbackToCorBindToCurrentRuntime) | 489 | if (fFallbackToCorBindToCurrentRuntime) |
| 491 | { | 490 | { |
| 492 | pfnCorBindToCurrentRuntime = reinterpret_cast<PFN_CORBINDTOCURRENTRUNTIME>(::GetProcAddress(hModule, "CorBindToCurrentRuntime")); | 491 | pfnCorBindToCurrentRuntime = reinterpret_cast<PFN_CORBINDTOCURRENTRUNTIME>(::GetProcAddress(hModule, "CorBindToCurrentRuntime")); |
| 493 | ExitOnNullWithLastError(pfnCorBindToCurrentRuntime, hr, "Failed to get procedure address for CorBindToCurrentRuntime."); | 492 | BalExitOnNullWithLastError(pfnCorBindToCurrentRuntime, hr, "Failed to get procedure address for CorBindToCurrentRuntime."); |
| 494 | 493 | ||
| 495 | hr = pfnCorBindToCurrentRuntime(pState->sczConfigPath, CLSID_CorRuntimeHost, IID_ICorRuntimeHost, reinterpret_cast<LPVOID*>(&pState->pCLRHost)); | 494 | hr = pfnCorBindToCurrentRuntime(pState->sczConfigPath, CLSID_CorRuntimeHost, IID_ICorRuntimeHost, reinterpret_cast<LPVOID*>(&pState->pCLRHost)); |
| 496 | ExitOnRootFailure(hr, "Failed to create the CLR host using the application configuration file path."); | 495 | BalExitOnRootFailure(hr, "Failed to create the CLR host using the application configuration file path."); |
| 497 | } | 496 | } |
| 498 | else | 497 | else |
| 499 | { | 498 | { |
| 500 | 499 | ||
| 501 | hr = SHCreateStreamOnFileEx(pState->sczConfigPath, STGM_READ | STGM_SHARE_DENY_WRITE, 0, FALSE, NULL, &pCfgStream); | 500 | hr = SHCreateStreamOnFileEx(pState->sczConfigPath, STGM_READ | STGM_SHARE_DENY_WRITE, 0, FALSE, NULL, &pCfgStream); |
| 502 | ExitOnFailure(hr, "Failed to load bootstrapper config file from path: %ls", pState->sczConfigPath); | 501 | BalExitOnFailure(hr, "Failed to load bootstrapper config file from path: %ls", pState->sczConfigPath); |
| 503 | 502 | ||
| 504 | hr = pCLRMetaHostPolicy->GetRequestedRuntime(METAHOST_POLICY_HIGHCOMPAT, NULL, pCfgStream, NULL, &cchVersion, NULL, NULL, &dwConfigFlags, IID_ICLRRuntimeInfo, reinterpret_cast<LPVOID*>(&pCLRRuntimeInfo)); | 503 | hr = pCLRMetaHostPolicy->GetRequestedRuntime(METAHOST_POLICY_HIGHCOMPAT, NULL, pCfgStream, NULL, &cchVersion, NULL, NULL, &dwConfigFlags, IID_ICLRRuntimeInfo, reinterpret_cast<LPVOID*>(&pCLRRuntimeInfo)); |
| 505 | ExitOnRootFailure(hr, "Failed to get the CLR runtime info using the application configuration file path."); | 504 | BalExitOnRootFailure(hr, "Failed to get the CLR runtime info using the application configuration file path."); |
| 506 | 505 | ||
| 507 | // .NET 4 RTM had a bug where it wouldn't set pcchVersion if pwzVersion was NULL. | 506 | // .NET 4 RTM had a bug where it wouldn't set pcchVersion if pwzVersion was NULL. |
| 508 | if (!cchVersion) | 507 | if (!cchVersion) |
| @@ -510,7 +509,7 @@ static HRESULT LoadRuntime( | |||
| 510 | hr = pCLRRuntimeInfo->GetVersionString(NULL, &cchVersion); | 509 | hr = pCLRRuntimeInfo->GetVersionString(NULL, &cchVersion); |
| 511 | if (HRESULT_FROM_WIN32(ERROR_INSUFFICIENT_BUFFER) != hr) | 510 | if (HRESULT_FROM_WIN32(ERROR_INSUFFICIENT_BUFFER) != hr) |
| 512 | { | 511 | { |
| 513 | ExitOnFailure(hr, "Failed to get the length of the CLR version string."); | 512 | BalExitOnFailure(hr, "Failed to get the length of the CLR version string."); |
| 514 | } | 513 | } |
| 515 | } | 514 | } |
| 516 | 515 | ||
| @@ -523,21 +522,21 @@ static HRESULT LoadRuntime( | |||
| 523 | if (CSTR_EQUAL == CompareString(LOCALE_NEUTRAL, 0, L"v4.0.30319", -1, pwzVersion, cchVersion)) | 522 | if (CSTR_EQUAL == CompareString(LOCALE_NEUTRAL, 0, L"v4.0.30319", -1, pwzVersion, cchVersion)) |
| 524 | { | 523 | { |
| 525 | hr = VerifyNET4RuntimeIsSupported(); | 524 | hr = VerifyNET4RuntimeIsSupported(); |
| 526 | ExitOnFailure(hr, "Found unsupported .NET 4 Runtime."); | 525 | BalExitOnFailure(hr, "Found unsupported .NET 4 Runtime."); |
| 527 | } | 526 | } |
| 528 | 527 | ||
| 529 | if (METAHOST_CONFIG_FLAGS_LEGACY_V2_ACTIVATION_POLICY_TRUE == (METAHOST_CONFIG_FLAGS_LEGACY_V2_ACTIVATION_POLICY_MASK & dwConfigFlags)) | 528 | if (METAHOST_CONFIG_FLAGS_LEGACY_V2_ACTIVATION_POLICY_TRUE == (METAHOST_CONFIG_FLAGS_LEGACY_V2_ACTIVATION_POLICY_MASK & dwConfigFlags)) |
| 530 | { | 529 | { |
| 531 | hr = pCLRRuntimeInfo->BindAsLegacyV2Runtime(); | 530 | hr = pCLRRuntimeInfo->BindAsLegacyV2Runtime(); |
| 532 | ExitOnRootFailure(hr, "Failed to bind as legacy V2 runtime."); | 531 | BalExitOnRootFailure(hr, "Failed to bind as legacy V2 runtime."); |
| 533 | } | 532 | } |
| 534 | 533 | ||
| 535 | hr = pCLRRuntimeInfo->GetInterface(CLSID_CorRuntimeHost, IID_ICorRuntimeHost, reinterpret_cast<LPVOID*>(&pState->pCLRHost)); | 534 | hr = pCLRRuntimeInfo->GetInterface(CLSID_CorRuntimeHost, IID_ICorRuntimeHost, reinterpret_cast<LPVOID*>(&pState->pCLRHost)); |
| 536 | ExitOnRootFailure(hr, "Failed to get instance of ICorRuntimeHost."); | 535 | BalExitOnRootFailure(hr, "Failed to get instance of ICorRuntimeHost."); |
| 537 | } | 536 | } |
| 538 | 537 | ||
| 539 | hr = pState->pCLRHost->Start(); | 538 | hr = pState->pCLRHost->Start(); |
| 540 | ExitOnRootFailure(hr, "Failed to start the CLR host."); | 539 | BalExitOnRootFailure(hr, "Failed to start the CLR host."); |
| 541 | 540 | ||
| 542 | LExit: | 541 | LExit: |
| 543 | ReleaseStr(pwzVersion); | 542 | ReleaseStr(pwzVersion); |
| @@ -567,10 +566,10 @@ static HRESULT CreateManagedBootstrapperApplication( | |||
| 567 | IBootstrapperApplicationFactory* pAppFactory = NULL; | 566 | IBootstrapperApplicationFactory* pAppFactory = NULL; |
| 568 | 567 | ||
| 569 | hr = CreateManagedBootstrapperApplicationFactory(pAppDomain, &pAppFactory); | 568 | hr = CreateManagedBootstrapperApplicationFactory(pAppDomain, &pAppFactory); |
| 570 | ExitOnFailure(hr, "Failed to create the factory to create the bootstrapper application."); | 569 | BalExitOnFailure(hr, "Failed to create the factory to create the bootstrapper application."); |
| 571 | 570 | ||
| 572 | hr = pAppFactory->Create(pArgs, pResults); | 571 | hr = pAppFactory->Create(pArgs, pResults); |
| 573 | ExitOnFailure(hr, "Failed to create the bootstrapper application."); | 572 | BalExitOnFailure(hr, "Failed to create the bootstrapper application."); |
| 574 | 573 | ||
| 575 | LExit: | 574 | LExit: |
| 576 | ReleaseNullObject(pAppFactory); | 575 | ReleaseNullObject(pAppFactory); |
| @@ -593,20 +592,20 @@ static HRESULT CreateManagedBootstrapperApplicationFactory( | |||
| 593 | ::VariantInit(&vtBAFactory); | 592 | ::VariantInit(&vtBAFactory); |
| 594 | 593 | ||
| 595 | bstrAssemblyName = ::SysAllocString(MBA_ASSEMBLY_FULL_NAME); | 594 | bstrAssemblyName = ::SysAllocString(MBA_ASSEMBLY_FULL_NAME); |
| 596 | ExitOnNull(bstrAssemblyName, hr, E_OUTOFMEMORY, "Failed to allocate the full assembly name for the bootstrapper application factory."); | 595 | BalExitOnNull(bstrAssemblyName, hr, E_OUTOFMEMORY, "Failed to allocate the full assembly name for the bootstrapper application factory."); |
| 597 | 596 | ||
| 598 | bstrTypeName = ::SysAllocString(MBA_ENTRY_TYPE); | 597 | bstrTypeName = ::SysAllocString(MBA_ENTRY_TYPE); |
| 599 | ExitOnNull(bstrTypeName, hr, E_OUTOFMEMORY, "Failed to allocate the full type name for the BA factory."); | 598 | BalExitOnNull(bstrTypeName, hr, E_OUTOFMEMORY, "Failed to allocate the full type name for the BA factory."); |
| 600 | 599 | ||
| 601 | hr = pAppDomain->CreateInstance(bstrAssemblyName, bstrTypeName, &pObj); | 600 | hr = pAppDomain->CreateInstance(bstrAssemblyName, bstrTypeName, &pObj); |
| 602 | ExitOnRootFailure(hr, "Failed to create the BA factory object."); | 601 | BalExitOnRootFailure(hr, "Failed to create the BA factory object."); |
| 603 | 602 | ||
| 604 | hr = pObj->Unwrap(&vtBAFactory); | 603 | hr = pObj->Unwrap(&vtBAFactory); |
| 605 | ExitOnRootFailure(hr, "Failed to unwrap the BA factory object into the host domain."); | 604 | BalExitOnRootFailure(hr, "Failed to unwrap the BA factory object into the host domain."); |
| 606 | ExitOnNull(vtBAFactory.punkVal, hr, E_UNEXPECTED, "The variant did not contain the expected IUnknown pointer."); | 605 | BalExitOnNull(vtBAFactory.punkVal, hr, E_UNEXPECTED, "The variant did not contain the expected IUnknown pointer."); |
| 607 | 606 | ||
| 608 | hr = vtBAFactory.punkVal->QueryInterface(__uuidof(IBootstrapperApplicationFactory), reinterpret_cast<LPVOID*>(ppAppFactory)); | 607 | hr = vtBAFactory.punkVal->QueryInterface(__uuidof(IBootstrapperApplicationFactory), reinterpret_cast<LPVOID*>(ppAppFactory)); |
| 609 | ExitOnRootFailure(hr, "Failed to query for the bootstrapper app factory interface."); | 608 | BalExitOnRootFailure(hr, "Failed to query for the bootstrapper app factory interface."); |
| 610 | 609 | ||
| 611 | LExit: | 610 | LExit: |
| 612 | ReleaseVariant(vtBAFactory); | 611 | ReleaseVariant(vtBAFactory); |
| @@ -632,13 +631,13 @@ static HRESULT CreatePrerequisiteBA( | |||
| 632 | BalExitOnFailure(hr, "Failed to get path to pre-requisite BA."); | 631 | BalExitOnFailure(hr, "Failed to get path to pre-requisite BA."); |
| 633 | 632 | ||
| 634 | hModule = ::LoadLibraryExW(sczMbapreqPath, NULL, LOAD_WITH_ALTERED_SEARCH_PATH); | 633 | hModule = ::LoadLibraryExW(sczMbapreqPath, NULL, LOAD_WITH_ALTERED_SEARCH_PATH); |
| 635 | ExitOnNullWithLastError(hModule, hr, "Failed to load pre-requisite BA DLL."); | 634 | BalExitOnNullWithLastError(hModule, hr, "Failed to load pre-requisite BA DLL."); |
| 636 | 635 | ||
| 637 | PFN_PREQ_BOOTSTRAPPER_APPLICATION_CREATE pfnCreate = reinterpret_cast<PFN_PREQ_BOOTSTRAPPER_APPLICATION_CREATE>(::GetProcAddress(hModule, "PrereqBootstrapperApplicationCreate")); | 636 | PFN_PREQ_BOOTSTRAPPER_APPLICATION_CREATE pfnCreate = reinterpret_cast<PFN_PREQ_BOOTSTRAPPER_APPLICATION_CREATE>(::GetProcAddress(hModule, "PrereqBootstrapperApplicationCreate")); |
| 638 | ExitOnNullWithLastError(pfnCreate, hr, "Failed to get PrereqBootstrapperApplicationCreate entry-point from: %ls", sczMbapreqPath); | 637 | BalExitOnNullWithLastError(pfnCreate, hr, "Failed to get PrereqBootstrapperApplicationCreate entry-point from: %ls", sczMbapreqPath); |
| 639 | 638 | ||
| 640 | hr = pfnCreate(&pState->prereqData, pEngine, pArgs, pResults); | 639 | hr = pfnCreate(&pState->prereqData, pEngine, pArgs, pResults); |
| 641 | ExitOnFailure(hr, "Failed to create prequisite bootstrapper app."); | 640 | BalExitOnFailure(hr, "Failed to create prequisite bootstrapper app."); |
| 642 | 641 | ||
| 643 | pState->hMbapreqModule = hModule; | 642 | pState->hMbapreqModule = hModule; |
| 644 | hModule = NULL; | 643 | hModule = NULL; |
| @@ -672,14 +671,14 @@ static HRESULT VerifyNET4RuntimeIsSupported( | |||
| 672 | { | 671 | { |
| 673 | ExitFunction1(hr = S_OK); | 672 | ExitFunction1(hr = S_OK); |
| 674 | } | 673 | } |
| 675 | ExitOnFailure(hr, "Failed to open registry key for .NET 4."); | 674 | BalExitOnFailure(hr, "Failed to open registry key for .NET 4."); |
| 676 | 675 | ||
| 677 | er = ::RegQueryValueExW(hKey, L"Release", NULL, NULL, reinterpret_cast<LPBYTE>(&dwRelease), &cchRelease); | 676 | er = ::RegQueryValueExW(hKey, L"Release", NULL, NULL, reinterpret_cast<LPBYTE>(&dwRelease), &cchRelease); |
| 678 | if (ERROR_FILE_NOT_FOUND == er) | 677 | if (ERROR_FILE_NOT_FOUND == er) |
| 679 | { | 678 | { |
| 680 | ExitFunction1(hr = S_OK); | 679 | ExitFunction1(hr = S_OK); |
| 681 | } | 680 | } |
| 682 | ExitOnWin32Error(er, hr, "Failed to get Release value."); | 681 | BalExitOnWin32Error(er, hr, "Failed to get Release value."); |
| 683 | 682 | ||
| 684 | if (NET452_RELEASE <= dwRelease) | 683 | if (NET452_RELEASE <= dwRelease) |
| 685 | { | 684 | { |
diff --git a/src/ext/Dependency/ca/wixdepca.cpp b/src/ext/Dependency/ca/wixdepca.cpp index e9278e04..87610420 100644 --- a/src/ext/Dependency/ca/wixdepca.cpp +++ b/src/ext/Dependency/ca/wixdepca.cpp | |||
| @@ -277,6 +277,7 @@ static HRESULT EnsureAbsentDependents( | |||
| 277 | DEPENDENCY* rgDependents = NULL; | 277 | DEPENDENCY* rgDependents = NULL; |
| 278 | UINT cDependents = 0; | 278 | UINT cDependents = 0; |
| 279 | PMSIHANDLE hDependencyRec = NULL; | 279 | PMSIHANDLE hDependencyRec = NULL; |
| 280 | BOOL fExists = FALSE; | ||
| 280 | 281 | ||
| 281 | // Skip the dependent check if the Wix4DependencyProvider table is missing (no dependency providers). | 282 | // Skip the dependent check if the Wix4DependencyProvider table is missing (no dependency providers). |
| 282 | hr = WcaTableExists(L"Wix4DependencyProvider"); | 283 | hr = WcaTableExists(L"Wix4DependencyProvider"); |
| @@ -338,11 +339,7 @@ static HRESULT EnsureAbsentDependents( | |||
| 338 | 339 | ||
| 339 | // Check the registry to see if the provider has any dependents registered. | 340 | // Check the registry to see if the provider has any dependents registered. |
| 340 | hr = DepCheckDependents(hkHive, sczProviderKey, iAttributes, sdIgnoredDependents, &rgDependents, &cDependents); | 341 | hr = DepCheckDependents(hkHive, sczProviderKey, iAttributes, sdIgnoredDependents, &rgDependents, &cDependents); |
| 341 | if (E_FILENOTFOUND == hr) | 342 | ExitOnPathFailure(hr, fExists, "Failed dependents check for %ls.", sczId); |
| 342 | { | ||
| 343 | hr = S_OK; | ||
| 344 | } | ||
| 345 | ExitOnFailure(hr, "Failed dependents check for %ls.", sczId); | ||
| 346 | } | 343 | } |
| 347 | 344 | ||
| 348 | if (E_NOMOREITEMS != hr) | 345 | if (E_NOMOREITEMS != hr) |
