commit 06cb4896b94888844b755d6d9e74339ca4478595
parent f1f49570de5a5e92f51763bb09b8b0af658497ab
Author: JohnMcPMS <johnmcp@microsoft.com>
Date: Tue, 19 Sep 2023 10:25:20 -0700
Add try/catch when reading upgrade codes to prevent larger user impact than needed (#3637)
Diffstat:
1 file changed, 24 insertions(+), 13 deletions(-)
diff --git a/src/AppInstallerRepositoryCore/Microsoft/ARPHelper.cpp b/src/AppInstallerRepositoryCore/Microsoft/ARPHelper.cpp
@@ -77,28 +77,39 @@ namespace AppInstaller::Repository::Microsoft
AICLI_LOG(Repo, Info, << "Reading MSI UpgradeCodes");
std::map<std::string, std::string> upgradeCodes;
- // There is no UpgradeCodes key on the x86 view of the registry
- Registry::Key upgradeCodesKey = Registry::Key::OpenIfExists(HKEY_LOCAL_MACHINE, "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Installer\\UpgradeCodes", 0, KEY_READ | KEY_WOW64_64KEY);
-
- if (upgradeCodesKey)
+ try
{
- for (const auto& upgradeCodeKeyRef : upgradeCodesKey)
+ // There is no UpgradeCodes key on the x86 view of the registry
+ Registry::Key upgradeCodesKey = Registry::Key::OpenIfExists(HKEY_LOCAL_MACHINE, "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Installer\\UpgradeCodes", 0, KEY_READ | KEY_WOW64_64KEY);
+
+ if (upgradeCodesKey)
{
- auto upgradeCode = TryUnpackUpgradeCodeGuid(upgradeCodeKeyRef.Name());
- if (upgradeCode)
+ for (const auto& upgradeCodeKeyRef : upgradeCodesKey)
{
- auto upgradeCodeKey = upgradeCodeKeyRef.Open();
- for (const auto& productCodeValue : upgradeCodeKey.Values())
+ std::string keyName;
+
+ try
{
- auto productCode = TryUnpackUpgradeCodeGuid(productCodeValue.Name());
- if (productCode)
+ keyName = upgradeCodeKeyRef.Name();
+ auto upgradeCode = TryUnpackUpgradeCodeGuid(keyName);
+ if (upgradeCode)
{
- upgradeCodes[*productCode] = *upgradeCode;
+ auto upgradeCodeKey = upgradeCodeKeyRef.Open();
+ for (const auto& productCodeValue : upgradeCodeKey.Values())
+ {
+ auto productCode = TryUnpackUpgradeCodeGuid(productCodeValue.Name());
+ if (productCode)
+ {
+ upgradeCodes[*productCode] = *upgradeCode;
+ }
+ }
}
}
+ CATCH_LOG_MSG("Failed to read upgrade code: %hs", keyName.c_str());
}
}
- }
+ }
+ CATCH_LOG_MSG("Failed to read upgrade codes.");
return upgradeCodes;
}