commit a1a14469351e5773d0e44ba9c2efb16f2b296663
parent 4dc7647644d4c0a2176a466832f8cd486ac30e27
Author: yao-msft <50888816+yao-msft@users.noreply.github.com>
Date: Wed, 13 Dec 2023 16:54:22 -0800
Include framework packages during installed packages enumeration (#3975)
Diffstat:
1 file changed, 18 insertions(+), 5 deletions(-)
diff --git a/src/AppInstallerRepositoryCore/Microsoft/PredefinedInstalledSourceFactory.cpp b/src/AppInstallerRepositoryCore/Microsoft/PredefinedInstalledSourceFactory.cpp
@@ -74,7 +74,7 @@ namespace AppInstaller::Repository::Microsoft
else
{
// TODO: Consider if Optional packages should also be enumerated
- packages = packageManager.FindPackagesForUserWithPackageTypes({}, PackageTypes::Main);
+ packages = packageManager.FindPackagesForUserWithPackageTypes({}, PackageTypes::Main | PackageTypes::Framework);
}
// Reuse the same manifest object, as we will be setting the same values every time.
@@ -157,11 +157,24 @@ namespace AppInstaller::Repository::Microsoft
manifest.Installers[0].PackageFamilyName = familyName;
- // Use the full name as a unique key for the path
- auto manifestId = index.AddManifest(manifest, std::filesystem::path{ packageId.FullName().c_str() });
+ try
+ {
+ // Use the full name as a unique key for the path
+ auto manifestId = index.AddManifest(manifest, std::filesystem::path{ packageId.FullName().c_str() });
- index.SetMetadataByManifestId(manifestId, PackageVersionMetadata::InstalledType,
- Manifest::InstallerTypeToString(Manifest::InstallerTypeEnum::Msix));
+ index.SetMetadataByManifestId(manifestId, PackageVersionMetadata::InstalledType,
+ Manifest::InstallerTypeToString(Manifest::InstallerTypeEnum::Msix));
+ }
+ catch (const wil::ResultException& resultException)
+ {
+ if (HRESULT_FROM_WIN32(ERROR_ALREADY_EXISTS) == resultException.GetErrorCode() && package.IsFramework())
+ {
+ // There may be multiple packages with same package family name for framework packages.
+ continue;
+ }
+
+ throw;
+ }
}
}