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";
            }
        }