private void GetManifestInfo(IAppxManifestReader manifestReader) { uint hr; IAppxManifestPackageId packageId; hr = manifestReader.GetPackageId(out packageId); ThrowIfFailed(hr); hr = packageId.GetPackageFullName(out packageFullName); ThrowIfFailed(hr); Console.WriteLine("Read package full name: " + packageFullName); IAppxManifestApplicationsEnumerator appEnumerator; hr = manifestReader.GetApplications(out appEnumerator); ThrowIfFailed(hr); bool hasCurrent; hr = appEnumerator.GetHasCurrent(out hasCurrent); ThrowIfFailed(hr); if (hasCurrent) { IAppxManifestApplication app; hr = appEnumerator.GetCurrent(out app); ThrowIfFailed(hr); app.GetAppUserModelId(out appUserModelId); Console.WriteLine("Read app user model ID: " + appUserModelId); } }
/// <summary> /// Initializes a new instance of the AppxMetadata class for an appx package. /// </summary> /// <param name="filePath">the path to the appx file</param> public AppxMetadata(string filePath) { if (string.IsNullOrEmpty(filePath)) { throw new ArgumentNullException("filePath"); } if (!File.Exists(filePath)) { throw new FileNotFoundException(string.Format("{0} not found", filePath)); } this.FilePath = filePath; IStream packageStream = StreamUtils.CreateInputStreamOnFile(this.FilePath); IAppxFactory packageFactory = (IAppxFactory) new AppxFactory(); this.AppxReader = packageFactory.CreatePackageReader(packageStream); this.BlockmapStream = this.AppxReader.GetBlockMap().GetStream(); IAppxManifestReader appxManifestReader = this.AppxReader.GetManifest(); this.ManifestStream = appxManifestReader.GetStream(); IAppxManifestPackageId packageId = appxManifestReader.GetPackageId(); this.PackageName = packageId.GetName(); this.PackageFamilyName = packageId.GetPackageFamilyName(); this.PackageFullName = packageId.GetPackageFullName(); this.Publisher = packageId.GetPublisher(); this.Version = new VersionInfo(packageId.GetVersion()); IAppxManifestProperties packageProperties = appxManifestReader.GetProperties(); string displayName; packageProperties.GetStringValue("DisplayName", out displayName); this.DisplayName = displayName; string publisherDisplayName; packageProperties.GetStringValue("PublisherDisplayName", out publisherDisplayName); this.PublisherDisplayName = publisherDisplayName; // Get the min versions IAppxManifestReader3 appxManifestReader3 = (IAppxManifestReader3)appxManifestReader; IAppxManifestTargetDeviceFamiliesEnumerator targetDeviceFamiliesEnumerator = appxManifestReader3.GetTargetDeviceFamilies(); while (targetDeviceFamiliesEnumerator.GetHasCurrent()) { IAppxManifestTargetDeviceFamily targetDeviceFamily = targetDeviceFamiliesEnumerator.GetCurrent(); this.TargetDeviceFamiliesMinVersions.Add( targetDeviceFamily.GetName(), new VersionInfo(targetDeviceFamily.GetMinVersion())); targetDeviceFamiliesEnumerator.MoveNext(); } this.MinOSVersion = this.TargetDeviceFamiliesMinVersions.OrderBy(t => t.Value).FirstOrDefault().Value; this.PopulateCommonFields(); }
public AppxMetadata(IRandomAccessStream randomAccessStream) { if (randomAccessStream == null) { throw new ArgumentNullException("file is null"); } Guid guid = new Guid("0000000c-0000-0000-C000-000000000046"); IStream packageStream = StreamUtils.CreateStreamOverRandomAccessStream(randomAccessStream, ref guid); IAppxFactory packageFactory = (IAppxFactory) new AppxFactory(); packageFactory.CreatePackageReader(packageStream); this.AppxReader = packageFactory.CreatePackageReader(packageStream); this.BlockmapStream = this.AppxReader.GetBlockMap().GetStream(); IAppxManifestReader appxManifestReader = this.AppxReader.GetManifest(); this.ManifestStream = appxManifestReader.GetStream(); IAppxManifestPackageId packageId = appxManifestReader.GetPackageId(); this.PackageName = packageId.GetName(); this.PackageFamilyName = packageId.GetPackageFamilyName(); this.PackageFullName = packageId.GetPackageFullName(); this.Publisher = packageId.GetPublisher(); this.Version = new VersionInfo(packageId.GetVersion()); IAppxManifestProperties packageProperties = appxManifestReader.GetProperties(); string displayName; packageProperties.GetStringValue("DisplayName", out displayName); this.DisplayName = displayName; string publisherDisplayName; packageProperties.GetStringValue("PublisherDisplayName", out publisherDisplayName); this.PublisherDisplayName = publisherDisplayName; // Get the min versions IAppxManifestReader3 appxManifestReader3 = (IAppxManifestReader3)appxManifestReader; IAppxManifestTargetDeviceFamiliesEnumerator targetDeviceFamiliesEnumerator = appxManifestReader3.GetTargetDeviceFamilies(); while (targetDeviceFamiliesEnumerator.GetHasCurrent()) { IAppxManifestTargetDeviceFamily targetDeviceFamily = targetDeviceFamiliesEnumerator.GetCurrent(); this.TargetDeviceFamiliesMinVersions.Add( targetDeviceFamily.GetName(), new VersionInfo(targetDeviceFamily.GetMinVersion())); targetDeviceFamiliesEnumerator.MoveNext(); } this.MinOSVersion = this.TargetDeviceFamiliesMinVersions.OrderBy(t => t.Value).FirstOrDefault().Value; this.PopulateCommonFields(); }
/// <summary> /// Initializes this instance of the AppxMetadata class from an msix stream. /// </summary> /// <param name="packageStream">the msix package stream.</param> private void Initialize(IStream packageStream) { IAppxFactory packageFactory = (IAppxFactory) new AppxFactory(); this.AppxReader = packageFactory.CreatePackageReader(packageStream); this.BlockmapStream = this.AppxReader.GetBlockMap().GetStream(); IAppxManifestReader appxManifestReader = this.AppxReader.GetManifest(); this.ManifestStream = appxManifestReader.GetStream(); IAppxManifestPackageId packageId = appxManifestReader.GetPackageId(); this.PackageName = packageId.GetName(); this.PackageFamilyName = packageId.GetPackageFamilyName(); this.PackageFullName = packageId.GetPackageFullName(); this.Publisher = packageId.GetPublisher(); this.Version = new VersionInfo(packageId.GetVersion()); IAppxManifestProperties packageProperties = appxManifestReader.GetProperties(); string displayName; packageProperties.GetStringValue("DisplayName", out displayName); this.DisplayName = displayName; string publisherDisplayName; packageProperties.GetStringValue("PublisherDisplayName", out publisherDisplayName); this.PublisherDisplayName = publisherDisplayName; // Get the min versions IAppxManifestReader3 appxManifestReader3 = (IAppxManifestReader3)appxManifestReader; IAppxManifestTargetDeviceFamiliesEnumerator targetDeviceFamiliesEnumerator = appxManifestReader3.GetTargetDeviceFamilies(); while (targetDeviceFamiliesEnumerator.GetHasCurrent()) { IAppxManifestTargetDeviceFamily targetDeviceFamily = targetDeviceFamiliesEnumerator.GetCurrent(); this.TargetDeviceFamiliesMinVersions.Add( targetDeviceFamily.GetName(), new VersionInfo(targetDeviceFamily.GetMinVersion())); targetDeviceFamiliesEnumerator.MoveNext(); } this.MinOSVersion = this.TargetDeviceFamiliesMinVersions.OrderBy(t => t.Value).FirstOrDefault().Value; this.PopulateCommonFields(); }
private void GetManifestInfo(IAppxManifestReader manifestReader) { uint hr; IAppxManifestPackageId packageId; hr = manifestReader.GetPackageId(out packageId); ThrowIfFailed(hr); hr = packageId.GetPackageFullName(out packageFullName); ThrowIfFailed(hr); Console.WriteLine("Read package full name: " + packageFullName); IAppxManifestApplicationsEnumerator appEnumerator; hr = manifestReader.GetApplications(out appEnumerator); ThrowIfFailed(hr); bool hasCurrent; hr = appEnumerator.GetHasCurrent(out hasCurrent); ThrowIfFailed(hr); if (hasCurrent) { IAppxManifestApplication app; hr = appEnumerator.GetCurrent(out app); ThrowIfFailed(hr); app.GetAppUserModelId(out appUserModelId); Console.WriteLine("Read app user model ID: " + appUserModelId); } }
//Get uwp application details from package public static AppxDetails UwpGetAppxDetailsFromAppPackage(Package appPackage) { IStream inputStream = null; IAppxFactory appxFactory = (IAppxFactory) new AppxFactory(); AppxDetails appxDetails = new AppxDetails(); try { //Get detailed information from app package string appFamilyName = appPackage.Id.FamilyName; appxDetails.FullPackageName = appPackage.Id.FullName; appxDetails.InstallPath = appPackage.InstalledLocation.Path; string manifestPath = appxDetails.InstallPath + "/AppXManifest.xml"; //Debug.WriteLine("Reading uwp app manifest file: " + manifestPath); //Open the uwp application manifest file SHCreateStreamOnFileEx(manifestPath, STGM_MODES.STGM_SHARE_DENY_NONE, 0, false, IntPtr.Zero, out inputStream); if (inputStream != null) { IAppxManifestReader appxManifestReader = appxFactory.CreateManifestReader(inputStream); IAppxManifestApplication appxManifestApplication = appxManifestReader.GetApplications().GetCurrent(); //Get and set the application executable name appxManifestApplication.GetStringValue("Executable", out string executableName); appxDetails.ExecutableName = Path.GetFileName(executableName); //Get and set the family name identifier appxManifestApplication.GetStringValue("Id", out string appIdentifier); appxDetails.FamilyNameId = appFamilyName + "!" + appIdentifier; //Get and set the application display name appxManifestApplication.GetStringValue("DisplayName", out string displayName); appxDetails.DisplayName = UwpGetMsResourceString(appIdentifier, appxDetails.FullPackageName, displayName); //Get all the available application logo images appxManifestApplication.GetStringValue("Square30x30Logo", out appxDetails.Square30x30Logo); appxManifestApplication.GetStringValue("Square70x70Logo", out appxDetails.Square70x70Logo); appxManifestApplication.GetStringValue("Square150x150Logo", out appxDetails.Square150x150Logo); appxManifestApplication.GetStringValue("Square310x310Logo", out appxDetails.Square310x310Logo); appxManifestApplication.GetStringValue("Wide310x150Logo", out appxDetails.Wide310x150Logo); //Check the largest available square logo if (!string.IsNullOrWhiteSpace(appxDetails.Square310x310Logo)) { appxDetails.SquareLargestLogoPath = Path.Combine(appxDetails.InstallPath, appxDetails.Square310x310Logo); } else if (!string.IsNullOrWhiteSpace(appxDetails.Square150x150Logo)) { appxDetails.SquareLargestLogoPath = Path.Combine(appxDetails.InstallPath, appxDetails.Square150x150Logo); } else if (!string.IsNullOrWhiteSpace(appxDetails.Square70x70Logo)) { appxDetails.SquareLargestLogoPath = Path.Combine(appxDetails.InstallPath, appxDetails.Square70x70Logo); } else if (!string.IsNullOrWhiteSpace(appxDetails.Square30x30Logo)) { appxDetails.SquareLargestLogoPath = Path.Combine(appxDetails.InstallPath, appxDetails.Square30x30Logo); } string originalSquareLargestLogoPath = appxDetails.SquareLargestLogoPath; appxDetails.SquareLargestLogoPath = UwpGetImageSizePath(appxDetails.SquareLargestLogoPath); //Check if the file can be accessed try { if (!string.IsNullOrWhiteSpace(appxDetails.SquareLargestLogoPath)) { FileStream fileStream = File.OpenRead(appxDetails.SquareLargestLogoPath); fileStream.Dispose(); } else { appxDetails.SquareLargestLogoPath = originalSquareLargestLogoPath; } } catch { //Debug.WriteLine("No permission to open: " + appxDetails.SquareLargestLogoPath); appxDetails.SquareLargestLogoPath = originalSquareLargestLogoPath; } //Check the largest available wide logo if (!string.IsNullOrWhiteSpace(appxDetails.Wide310x150Logo)) { appxDetails.WideLargestLogoPath = Path.Combine(appxDetails.InstallPath, appxDetails.Wide310x150Logo); } string originalWideLargestLogoPath = appxDetails.WideLargestLogoPath; appxDetails.WideLargestLogoPath = UwpGetImageSizePath(appxDetails.WideLargestLogoPath); //Check if the file can be accessed try { if (!string.IsNullOrWhiteSpace(appxDetails.WideLargestLogoPath)) { FileStream fileStream = File.OpenRead(appxDetails.WideLargestLogoPath); fileStream.Dispose(); } else { appxDetails.WideLargestLogoPath = originalWideLargestLogoPath; } } catch { //Debug.WriteLine("No permission to open: " + appxDetails.WideLargestLogoPath); appxDetails.WideLargestLogoPath = originalWideLargestLogoPath; } } } catch (Exception ex) { Debug.WriteLine("Failed reading details from uwp manifest: " + appPackage.Id.FamilyName + "/" + ex.Message); } Marshal.ReleaseComObject(inputStream); Marshal.ReleaseComObject(appxFactory); return(appxDetails); }