public static async Task <AppxPackage> ToAppxPackage(this InstalledPackage pkg, CancellationToken cancellationToken = default) { if (pkg.InstallLocation == null) { return(null); } var manifestReader = new AppxManifestReader(); IAppxFileReader reader; if (pkg.ManifestLocation == null || !File.Exists(pkg.ManifestLocation)) { reader = new PackageIdentityFileReaderAdapter(PackageContext.CurrentUser, pkg.PackageId); } else { reader = new FileInfoFileReaderAdapter(pkg.ManifestLocation); } using (reader) { return(await manifestReader.Read(reader, cancellationToken).ConfigureAwait(false)); } }
public async Task <AppxPackage> GetByIdentity(string packageName, PackageFindMode mode = PackageFindMode.CurrentUser, CancellationToken cancellationToken = default, IProgress <ProgressData> progress = default) { using var reader = new PackageIdentityFileReaderAdapter(mode == PackageFindMode.CurrentUser ? PackageContext.CurrentUser : PackageContext.AllUsers, packageName); var manifestReader = new AppxManifestReader(); // ReSharper disable once AccessToDisposedClosure var package = await Task.Run(() => manifestReader.Read(reader, true, cancellationToken), cancellationToken).ConfigureAwait(false); return(package); }
public async Task <AppxPackage> Read(IAppxFileReader fileReader, bool resolveDependencies, CancellationToken cancellationToken = default) { var result = await this.Read(fileReader, cancellationToken).ConfigureAwait(false); if (resolveDependencies) { foreach (var item in result.PackageDependencies) { cancellationToken.ThrowIfCancellationRequested(); using IAppxFileReader tempReader = new PackageIdentityFileReaderAdapter(PackageContext.CurrentUser, item.Name, item.Publisher, item.Version); try { item.Dependency = await this.Read(tempReader, cancellationToken).ConfigureAwait(false); } catch (Exception) { Logger.Warn("Could not read a dependency to {0} {2} by {1}", item.Name, item.Publisher, item.Version); } } } return(result); }