winget-cli

Unnamed repository; edit this file 'description' to name the repository.
Log | Files | Refs | README | LICENSE

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:
Msrc/AppInstallerRepositoryCore/Microsoft/PredefinedInstalledSourceFactory.cpp | 23++++++++++++++++++-----
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; + } } }