private async void updateUIForPackageInstallation() { packageNameTextBlock.Text = packageInContext.DisplayName; await Task.Run(async() => { Task.Yield(); Stream stream = null; string text = null; if (packageInContext.Path.ToLower().EndsWith(".appx")) { using (ZipArchive archive = new ZipArchive((await packageInContext.OpenAsync(FileAccessMode.Read)).AsStreamForRead(), ZipArchiveMode.Read)) { foreach (ZipArchiveEntry entry in archive.Entries) { if (entry.FullName.ToString() == "AppxManifest.xml") { stream = entry.Open(); StreamReader reader = new StreamReader(stream); text = reader.ReadToEnd(); await Dispatcher.RunAsync(CoreDispatcherPriority.Normal, async() => { text = RemoveAllNamespaces(text); data = APx.XmlConverter.ToClass <APx.Package>(text); packageNameTextBlock.Text = data.Properties.DisplayName; }); } } bool jk = false; foreach (ZipArchiveEntry entry in archive.Entries) { await Dispatcher.RunAsync(CoreDispatcherPriority.Normal, async() => { if (text != null && data != null) { string srnam = null; if (entry.Name.ToString().Contains(".scale-")) { srnam = entry.Name.ToString().Substring(0, entry.Name.ToString().Length - 14); } else { srnam = entry.Name.ToString(); } if (data.Properties.Logo.Contains(srnam)) { stream = entry.Open(); BitmapImage bitmap = new BitmapImage(); using (var memStream = new MemoryStream()) { await stream.CopyToAsync(memStream); memStream.Position = 0; bitmap.SetSource(memStream.AsRandomAccessStream()); pkgi.Source = bitmap; } jk = true; } } }); if (jk) { break; } } } } else { bool xc = false; using (ZipArchive archive = new ZipArchive((await packageInContext.OpenAsync(FileAccessMode.Read)).AsStreamForRead(), ZipArchiveMode.Read)) { foreach (ZipArchiveEntry entry in archive.Entries) { await Dispatcher.RunAsync(CoreDispatcherPriority.Normal, async() => { if (entry.Name.ToLower().EndsWith("x86.appx".ToLower()) || entry.Name.ToLower().EndsWith("x64.appx".ToLower()) || entry.Name.ToLower().EndsWith("arm.appx".ToLower()) || entry.Name.ToLower().EndsWith("arm64.appx".ToLower()) || entry.Name.ToLower().EndsWith("x64_master.appx".ToLower()) || entry.Name.ToLower().EndsWith("x86_master.appx".ToLower()) || entry.Name.ToLower().EndsWith("arm_master.appx".ToLower()) || entry.Name.ToLower().EndsWith("arm64_master.appx".ToLower()) || entry.Name.ToLower().EndsWith("anycpu.appx".ToLower()) || entry.Name.ToLower().EndsWith("anycpu_master.appx".ToLower())) { xc = true; ZipArchive archive2 = new ZipArchive(entry.Open(), ZipArchiveMode.Read); foreach (ZipArchiveEntry entry2 in archive2.Entries) { if (entry2.FullName.ToString() == "AppxManifest.xml") { stream = entry2.Open(); StreamReader reader = new StreamReader(stream); text = reader.ReadToEnd(); await Dispatcher.RunAsync(CoreDispatcherPriority.Normal, async() => { text = RemoveAllNamespaces(text); data = APx.XmlConverter.ToClass <APx.Package>(text); packageNameTextBlock.Text = data.Properties.DisplayName; }); } } bool dy = false; foreach (ZipArchiveEntry entry2 in archive2.Entries) { await Dispatcher.RunAsync(CoreDispatcherPriority.Normal, async() => { if (text != null && data != null) { string srnam = null; if (entry2.Name.ToString().Contains(".scale-")) { srnam = entry2.Name.ToString().Substring(0, entry2.Name.ToString().Length - 14); } else { srnam = entry2.Name.ToString(); } if (data.Properties.Logo.Contains(srnam)) { stream = entry2.Open(); BitmapImage bitmap = new BitmapImage(); using (var memStream = new MemoryStream()) { await stream.CopyToAsync(memStream); memStream.Position = 0; bitmap.SetSource(memStream.AsRandomAccessStream()); pkgi.Source = bitmap; } dy = true; } } }); if (dy) { break; } } } }); if (xc) { break; } } } } }); var vp = new Version(data.Identity.Version); PackageManager PkgManager = new PackageManager(); var ListOfInstalledPackages = PkgManager.FindPackagesForUserWithPackageTypes("", PackageTypes.Main); List <Package> AllPackages = new List <Package>(); AllPackages = ListOfInstalledPackages.ToList(); Package PKG = null; foreach (var pkg in AllPackages) { if (pkg.Id.Name == data.Identity.Name) { PKG = pkg; } } if (PKG != null) { var vi = new Version(PKG.Id.Version.Major.ToString() + "." + PKG.Id.Version.Minor.ToString() + "." + PKG.Id.Version.Build.ToString() + "." + PKG.Id.Version.Revision.ToString()); if (vp > vi) { installButton.Content = "Update"; } else { installButton.Content = "Re-Install"; } } else { installButton.Content = "Install"; } loadFileButton.Content = "Load a different file"; }
/// <summary> /// Retreives an appx/appxbundle file using the file picker /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private async void loadFileButton_Click(object sender, RoutedEventArgs e) { var picker = new Windows.Storage.Pickers.FileOpenPicker(); picker.ViewMode = Windows.Storage.Pickers.PickerViewMode.List; picker.FileTypeFilter.Add(".appx"); picker.FileTypeFilter.Add(".appxbundle"); Windows.Storage.StorageFile file = await picker.PickSingleFileAsync(); if (file != null) { //UI changes to allow the user to install the package packageInContext = file; permissionTextBlock.Text = "Do you want to install this package?"; installButton.Visibility = Visibility.Visible; cancelButton.Content = "Cancel"; packageNameTextBlock.Text = packageInContext.DisplayName; await Task.Run(async() => { Task.Yield(); Stream stream = null; string text = null; if (packageInContext.Path.ToLower().EndsWith(".appx")) { using (ZipArchive archive = new ZipArchive((await packageInContext.OpenAsync(FileAccessMode.Read)).AsStreamForRead(), ZipArchiveMode.Read)) { foreach (ZipArchiveEntry entry in archive.Entries) { if (entry.FullName.ToString() == "AppxManifest.xml") { stream = entry.Open(); StreamReader reader = new StreamReader(stream); text = reader.ReadToEnd(); await Dispatcher.RunAsync(CoreDispatcherPriority.Normal, async() => { // Your UI update code goes here! //Debug.WriteLine("TEXT: " + text); //tt5.Text = text; text = RemoveAllNamespaces(text); data = APx.XmlConverter.ToClass <APx.Package>(text); packageNameTextBlock.Text = data.Properties.DisplayName; }); } } bool jk = false; foreach (ZipArchiveEntry entry in archive.Entries) { await Dispatcher.RunAsync(CoreDispatcherPriority.Normal, async() => { /* _ = Windows.ApplicationModel.Core.CoreApplication.MainView.CoreWindow.Dispatcher.RunAsync(CoreDispatcherPriority.Normal, * () => * { * Debug.WriteLine(packageNameTextBlock.Text); * } * );*/ if (text != null && data != null) { string srnam = null; if (entry.Name.ToString().Contains(".scale-")) { srnam = entry.Name.ToString().Substring(0, entry.Name.ToString().Length - 14); } else { srnam = entry.Name.ToString(); } if (data.Properties.Logo.Contains(srnam)) { stream = entry.Open(); BitmapImage bitmap = new BitmapImage(); //Debug.WriteLine("Done 2"); using (var memStream = new MemoryStream()) { await stream.CopyToAsync(memStream); memStream.Position = 0; bitmap.SetSource(memStream.AsRandomAccessStream()); pkgi.Source = bitmap; } jk = true; } } }); if (jk) { break; } } } } else { bool xc = false; using (ZipArchive archive = new ZipArchive((await packageInContext.OpenAsync(FileAccessMode.Read)).AsStreamForRead(), ZipArchiveMode.Read)) { foreach (ZipArchiveEntry entry in archive.Entries) { await Dispatcher.RunAsync(CoreDispatcherPriority.Normal, async() => { if (entry.Name.ToLower().EndsWith("x86.appx".ToLower()) || entry.Name.ToLower().EndsWith("x64.appx".ToLower()) || entry.Name.ToLower().EndsWith("arm.appx".ToLower()) || entry.Name.ToLower().EndsWith("arm64.appx".ToLower()) || entry.Name.ToLower().EndsWith("x64_master.appx".ToLower()) || entry.Name.ToLower().EndsWith("x86_master.appx".ToLower()) || entry.Name.ToLower().EndsWith("arm_master.appx".ToLower()) || entry.Name.ToLower().EndsWith("arm64_master.appx".ToLower()) || entry.Name.ToLower().EndsWith("anycpu.appx".ToLower()) || entry.Name.ToLower().EndsWith("anycpu_master.appx".ToLower())) { xc = true; ZipArchive archive2 = new ZipArchive(entry.Open(), ZipArchiveMode.Read); foreach (ZipArchiveEntry entry2 in archive2.Entries) { if (entry2.FullName.ToString() == "AppxManifest.xml") { stream = entry2.Open(); StreamReader reader = new StreamReader(stream); text = reader.ReadToEnd(); await Dispatcher.RunAsync(CoreDispatcherPriority.Normal, async() => { // Your UI update code goes here! //Debug.WriteLine("TEXT: " + text); //tt5.Text = text; text = RemoveAllNamespaces(text); data = APx.XmlConverter.ToClass <APx.Package>(text); packageNameTextBlock.Text = data.Properties.DisplayName; }); } } bool dy = false; foreach (ZipArchiveEntry entry2 in archive2.Entries) { await Dispatcher.RunAsync(CoreDispatcherPriority.Normal, async() => { /* _ = Windows.ApplicationModel.Core.CoreApplication.MainView.CoreWindow.Dispatcher.RunAsync(CoreDispatcherPriority.Normal, * () => * { * Debug.WriteLine(packageNameTextBlock.Text); * } * );*/ if (text != null && data != null) { string srnam = null; if (entry2.Name.ToString().Contains(".scale-")) { srnam = entry2.Name.ToString().Substring(0, entry2.Name.ToString().Length - 14); } else { srnam = entry2.Name.ToString(); } if (data.Properties.Logo.Contains(srnam)) { stream = entry2.Open(); BitmapImage bitmap = new BitmapImage(); //Debug.WriteLine("Done 2"); using (var memStream = new MemoryStream()) { await stream.CopyToAsync(memStream); memStream.Position = 0; bitmap.SetSource(memStream.AsRandomAccessStream()); pkgi.Source = bitmap; } dy = true; } } }); if (dy) { break; } } } }); if (xc) { break; } } } } }); var vp = new Version(data.Identity.Version); PackageManager PkgManager = new PackageManager(); //var inpkg = PkgManager.FindPackage(data.Identity.Name); var ListOfInstalledPackages = PkgManager.FindPackagesForUserWithPackageTypes("", PackageTypes.Main); List <Package> AllPackages = new List <Package>(); AllPackages = ListOfInstalledPackages.ToList(); Package PKG = null; foreach (var pkg in AllPackages) { if (pkg.Id.Name == data.Identity.Name) { PKG = pkg; } } if (PKG != null) { var vi = new Version(PKG.Id.Version.Major.ToString() + "." + PKG.Id.Version.Minor.ToString() + "." + PKG.Id.Version.Build.ToString() + "." + PKG.Id.Version.Revision.ToString()); if (vp > vi) { installButton.Content = "Update"; } else { installButton.Content = "Re-Install"; } } else { installButton.Content = "Install"; } loadFileButton.Content = "Load a different file"; } }