Пример #1
0
        public Task <bool> RemovePackageAsync(Presenter.Progress.ProgressPresenter progressPresenter, string packageFamilyName)
        {
            return(Task.Factory.StartNew <bool>(() =>
            {
                var success = false;
                try
                {
                    progressPresenter.SetDetailsText(true, "Removing {0}", packageFamilyName);
                    var packageManager = new Windows.Management.Deployment.PackageManager();

                    var deploymentTask = packageManager.RemovePackageAsync(packageFamilyName);

                    success = UpdateProgressForDeploymentTask(progressPresenter, deploymentTask);
                }
                catch (Exception ex)
                {
                    progressPresenter.SetDetailsText(true, "RemovePackageSample failed, error message: {0}", ex.Message);
                    progressPresenter.SetDetailsText(true, "Full Stacktrace: {0}", ex.ToString());
                    Logger.Log(ex, "Remove appx package");
                    success = false;
                }

                if (success)
                {
                    progressPresenter.SetDetailsText(true, "Success.  Tile will appear until signoff");
                }

                return success;
            }));
        }
Пример #2
0
        private static IEnumerable <Windows.ApplicationModel.Package> getPackages(Windows.Management.Deployment.PackageManager pman, string packageFamilyName)
        {
            if (userSID == null)
            {
                userSID = System.Security.Principal.WindowsIdentity.GetCurrent().User?.ToString();
            }

            if (userSID == null)
            {
                return(Enumerable.Empty <Windows.ApplicationModel.Package>());
            }

            try
            {
                if (string.IsNullOrEmpty(packageFamilyName))
                {
                    return(pman.FindPackagesForUser(userSID));
                }

                return(pman.FindPackagesForUser(userSID, packageFamilyName));
            }
            catch
            {
                return(Enumerable.Empty <Windows.ApplicationModel.Package>());
            }
        }
Пример #3
0
        public async Task <bool> RunAppAsync(string appDisplayName)
        {
            try
            {
                Windows.Management.Deployment.PackageManager   packageManager = new Windows.Management.Deployment.PackageManager();
                IEnumerable <Windows.ApplicationModel.Package> packages       = (IEnumerable <Windows.ApplicationModel.Package>)packageManager.FindPackagesForUser("");

                var app = packages.FirstOrDefault(p => !p.IsFramework && p.DisplayName == appDisplayName);
                if (app == null)
                {
                    Logger.Instance.LogMessage(TracingLevel.ERROR, $"RunAppAsync could not find UWC app {appDisplayName}. Total apps: {packages.ToList().Count}");
                    return(false);
                }

                var runner = await app.GetAppListEntriesAsync();

                if (runner.Count > 0)
                {
                    _ = runner[0].LaunchAsync();
                    return(true);
                }
                else
                {
                    Logger.Instance.LogMessage(TracingLevel.ERROR, $"RunAppAsync GetAppListEntriesAsync returned 0 entries for UWC app {appDisplayName}.");
                    return(false);
                }
            }
            catch (Exception ex)
            {
                Logger.Instance.LogMessage(TracingLevel.ERROR, $"RunAppAsync Exception: {ex}");
            }
            return(false);
        }
        public List <UWPPackageInfo> GetUWCApps(bool forceReload = false)
        {
            if (apps.Count > 0 && !forceReload)
            {
                return(apps);
            }

            apps = new List <UWPPackageInfo>();
            Windows.Management.Deployment.PackageManager   packageManager = new Windows.Management.Deployment.PackageManager();
            IEnumerable <Windows.ApplicationModel.Package> packages       = (IEnumerable <Windows.ApplicationModel.Package>)packageManager.FindPackagesForUser("");

            foreach (var package in packages.Where(p => !p.IsFramework).OrderBy(p => p.DisplayName))
            {
                try
                {
                    var storage = package.InstalledLocation;
                    apps.Add(new UWPPackageInfo(package.DisplayName, storage.Path, package.Logo));
                }
                catch { }
            }

            Logger.Instance.LogMessage(TracingLevel.INFO, $"GetUWCApps returned {apps.Count} apps");
            apps = apps.OrderBy(a => a.Name).ToList();
            return(apps);
        }
Пример #5
0
        // returns [icon, color]
        public static string[] GetAppIcon(string appUserModelId)
        {
            string[] pkgAppId          = appUserModelId.Split('!');
            string   packageFamilyName = pkgAppId[0];
            string   appId             = pkgAppId[1];
            string   returnIcon        = "";
            string   returnColor       = "";

            Windows.Management.Deployment.PackageManager   pman     = new Windows.Management.Deployment.PackageManager();
            IEnumerable <Windows.ApplicationModel.Package> packages = pman.FindPackagesForUser(System.Security.Principal.WindowsIdentity.GetCurrent().User.ToString(), packageFamilyName);

            foreach (Windows.ApplicationModel.Package package in packages)
            {
                string path = "";

                // need to catch a system-thrown exception...
                try
                {
                    path = package.InstalledLocation.Path;
                }
                catch
                {
                    continue;
                }

                XmlDocument         manifest     = getManifest(path);
                XmlNamespaceManager xmlnsManager = getNamespaceManager(manifest);

                foreach (XmlNode app in manifest.SelectNodes("/ns:Package/ns:Applications/ns:Application", xmlnsManager))
                {
                    // get specific app in package

                    if (app.SelectSingleNode("@Id", xmlnsManager).Value == appId)
                    {
                        // return values
                        returnIcon = getIconPath(path, app, xmlnsManager);

                        if (returnIcon.EndsWith("_altform-unplated.png"))
                        {
                            returnColor = defaultColor;
                        }
                        else
                        {
                            returnColor = getPlateColor(app, xmlnsManager);
                        }

                        break;
                    }
                }
            }

            return(new string[] { returnIcon, returnColor });
        }
Пример #6
0
        public Task <IEnumerable <PackageInformation> > GetInstalledPackagesAsync()
        {
            return(Task.Factory.StartNew <IEnumerable <PackageInformation> >(() =>
            {
                var listOfApps = new List <PackageInformation>();
                try
                {
                    var packagesDirectory = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData), Constants.DirectoryNames.Name);
                    var packageManager = new Windows.Management.Deployment.PackageManager();
                    var packages = packageManager.FindPackagesForUser(System.Security.Principal.WindowsIdentity.GetCurrent().User.Value);
                    if (packages != null && packages.Any())
                    {
                        foreach (var package in packages)
                        {
                            try
                            {
                                var app = new PackageInformation()
                                {
                                    AppVersion = new Version(package.Id.Version.Major, package.Id.Version.Minor, package.Id.Version.Build, package.Id.Version.Revision),
                                    DataDirectory = Path.Combine(packagesDirectory, package.Id.FamilyName),
                                    FamilyName = package.Id.FamilyName,
                                    FullName = package.Id.FullName,
                                    Name = package.Id.Name,
                                    Publisher = package.Id.PublisherId,
                                };

                                try
                                {
                                    if (null != package.InstalledLocation)
                                    {
                                        app.InstallationDirectory = package.InstalledLocation.Path;
                                    }
                                }
                                catch (Exception)
                                {
                                    Logger.Log(Logger.LogSeverity.Warning, "App package has no install location: ({0})", package.Id.FullName);
                                }
                                listOfApps.Add(app);
                            }
                            catch (Exception ex)
                            {
                                Logger.Log(ex, "Error while loading information for package: ({0})", package.Id.FullName);
                            }
                        }
                    }
                }
                catch (Exception ex)
                {
                    Logger.Log(ex, "Exception while loading list of installed packages");
                }
                return listOfApps;
            }));
        }
Пример #7
0
        private static void DisplayPackageUsers(Windows.Management.Deployment.PackageManager packageManager, Windows.ApplicationModel.Package package)
        {
            IEnumerable <Windows.Management.Deployment.PackageUserInformation> packageUsers = packageManager.FindUsers(package.Id.FullName);

            Console.Write("Users: ");

            foreach (var packageUser in packageUsers)
            {
                Console.Write("{0} ", SidToAccountName(packageUser.UserSecurityId));
            }

            Console.WriteLine();
        }
Пример #8
0
 public Task <bool> AddPackageAsync(Uri packageLocation, IEnumerable <Uri> dependencyPaths, Presenter.Progress.ProgressPresenter progressPresenter)
 {
     return(Task.Factory.StartNew <bool>(() =>
     {
         bool success = false;
         try
         {
             if (packageLocation != null && progressPresenter != null)
             {
                 progressPresenter.SetDetailsText(true, "Adding package {0}", packageLocation.AbsolutePath);
                 if (dependencyPaths != null && dependencyPaths.Any())
                 {
                     var pathsAsText = String.Join(System.Environment.NewLine, dependencyPaths);
                     progressPresenter.SetDetailsText(true, "Will add dependencies:{0}{1}", Environment.NewLine, pathsAsText);
                 }
                 if (File.Exists(packageLocation.AbsolutePath))
                 {
                     var packageManager = new Windows.Management.Deployment.PackageManager();
                     var deploymentTask = packageManager.AddPackageAsync(packageLocation, dependencyPaths, Windows.Management.Deployment.DeploymentOptions.None);
                     success = UpdateProgressForDeploymentTask(progressPresenter, deploymentTask);
                     //packageManager.RegisterPackageAsync(
                 }
                 else
                 {
                     progressPresenter.SetDetailsText(true, "{0} does not exist.", packageLocation);
                 }
             }
             else
             {
                 progressPresenter.SetDetailsText(true, "Null parameters");
             }
         }
         catch (Exception ex)
         {
             Logger.Log(ex, "Add appx package");
             progressPresenter.SetDetailsText(true, "AddPackageAsync failed, error message: {0}", ex.Message);
             progressPresenter.SetDetailsText(true, "Full Stacktrace: {0}", ex.ToString());
         }
         return success;
     }));
 }
Пример #9
0
        public static IEnumerable <AppPackage> GetPackages()
        {
            Windows.Management.Deployment.PackageManager packageManager = new Windows.Management.Deployment.PackageManager();
            var appDataFolderPath = System.IO.Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData), @"Packages");
            var appDataFolders    = Directory.EnumerateDirectories(System.IO.Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData), @"Packages"));
            var register          = Registry.CurrentUser.OpenSubKey(@"SOFTWARE\Classes\Extensions\ContractId\Windows.Launch\PackageId");

            //TestingCode();

            return(from package in packageManager.FindPackagesForUser(System.Security.Principal.WindowsIdentity.GetCurrent().User.Value)
                   let name = Extract(register, package.Id.FullName)
                              let image = Extract(register, package.Id.FullName, "Icon")
                                          let description = Extract(register, package.Id.FullName, "Description")
                                                            let vendor = Extract(register, package.Id.FullName, "Vendor")
                                                                         let appDataPath = System.IO.Path.Combine(appDataFolderPath, package.Id.FamilyName)
                                                                                           let appDataExists = Directory.Exists(appDataPath)
                                                                                                               let installedLocation = SafeDirectory(package)?.Path
                                                                                                                                       orderby name
                                                                                                                                       select new AppPackage
            {
                AppDataFolderExists = appDataExists,
                AppDataFolderPath = appDataPath,
                Architecture = package.Id.Architecture.ToString(),
                DisplayName = name,
                Icon = image,
                Id = new AppId
                {
                    FamilyName = package.Id.FamilyName,
                    FullName = package.Id.FullName,
                    Name = package.Id.Name,
                    PublisherId = package.Id.PublisherId,
                    PublisherName = package.Id.Publisher
                },
                InstalledDate = package.InstalledDate.DateTime,
                InstalledLocation = installedLocation,
                Version = new Version(package.Id.Version.Major, package.Id.Version.Minor, package.Id.Version.Build, package.Id.Version.Revision)
            });
        }
Пример #10
0
        private Task <bool> AttemptToRegisterPackageAsync(string packageName, Presenter.Progress.ProgressPresenter progressPresenter)
        {
            return(Task.Factory.StartNew <bool>(() =>
            {
                bool success = false;
                try
                {
                    if (progressPresenter != null)
                    {
                        string predictedManifestPath = Path.Combine(
                            Environment.GetFolderPath(Environment.SpecialFolder.ProgramFiles),
                            Constants.DirectoryNames.WindowsApps,
                            packageName,
                            Constants.FileNames.AppxManifest);

                        if (File.Exists(predictedManifestPath))
                        {
                            var manifestLocation = new Uri(predictedManifestPath);
                            var packageManager = new Windows.Management.Deployment.PackageManager();
                            var task = packageManager.RegisterPackageAsync(manifestLocation, null, Windows.Management.Deployment.DeploymentOptions.None);
                            success = UpdateProgressForDeploymentTask(progressPresenter, task);
                        }
                        else
                        {
                            progressPresenter.SetDetailsText(true, "Manifest does not exist at {0}. Please register manually", predictedManifestPath);
                        }
                    }
                }
                catch (Exception ex)
                {
                    progressPresenter.SetDetailsText(true, "Exception: {0}", ex.Message);
                    success = false;
                    Logger.Log(ex, "Attempt to register appx package");
                }
                return success;
            }));
        }
Пример #11
0
        public static void GetPackages()
        {
            Windows.Management.Deployment.PackageManager packageManager = new Windows.Management.Deployment.PackageManager();

            try
            {
                IEnumerable <Windows.ApplicationModel.Package> packages = (IEnumerable <Windows.ApplicationModel.Package>)packageManager.FindPackages();

                int packageCount = 0;
                foreach (var package in packages)
                {
                    DisplayPackageInfo(package);
                    //DisplayPackageUsers(packageManager, package);

                    Console.WriteLine();
                    packageCount += 1;
                }

                if (packageCount < 1)
                {
                    Console.WriteLine("No packages were found.");
                }
            }
            catch (UnauthorizedAccessException)
            {
                Console.WriteLine("packageManager.FindPackages() failed because access was denied. This program must be run from an elevated command prompt.");

                return;
            }
            //catch (Exception ex)
            //{
            //	Console.WriteLine("packageManager.FindPackages() failed, error message: {0}", ex.Message);
            //	Console.WriteLine("Full Stacktrace: {0}", ex.ToString());

            //	return;
            //}
        }
Пример #12
0
        public static List <string[]> GetStoreApps()
        {
            List <string[]> ret = new List <string[]>();

            Windows.Management.Deployment.PackageManager   pman     = new Windows.Management.Deployment.PackageManager();
            IEnumerable <Windows.ApplicationModel.Package> packages = getPackages(pman);

            foreach (Windows.ApplicationModel.Package package in packages)
            {
                string path = "";

                // need to catch a system-thrown exception...
                try
                {
                    path = package.InstalledLocation.Path;
                }
                catch
                {
                    continue;
                }

                XmlDocument         manifest     = getManifest(path);
                XmlNamespaceManager xmlnsManager = getNamespaceManager(manifest);

                foreach (XmlNode app in manifest.SelectNodes("/ns:Package/ns:Applications/ns:Application", xmlnsManager))
                {
                    // packages can contain multiple apps

                    XmlNode showEntry = app.SelectSingleNode("uap:VisualElements/@AppListEntry", xmlnsManager);
                    if (showEntry == null || showEntry.Value == "true")
                    {
                        // App is visible in the applist

                        // return values
                        string appUserModelId = package.Id.FamilyName + "!" + app.SelectSingleNode("@Id", xmlnsManager).Value;
                        string returnName     = getDisplayName(package.Id.Name, path, app, xmlnsManager);
                        string returnIcon     = getIconPath(path, app, xmlnsManager);
                        string returnColor    = "";

                        if (returnIcon.EndsWith("_altform-unplated.png"))
                        {
                            returnColor = defaultColor;
                        }
                        else
                        {
                            returnColor = getPlateColor(app, xmlnsManager);
                        }

                        string[] toAdd  = new string[] { appUserModelId, returnName, returnIcon, returnColor };
                        bool     canAdd = true;
                        foreach (string[] added in ret)
                        {
                            if (added[0] == appUserModelId)
                            {
                                canAdd = false;
                                break;
                            }
                        }

                        if (canAdd)
                        {
                            ret.Add(toAdd);
                        }
                    }
                }
            }

            return(ret);
        }
Пример #13
0
        private static void TestingCode()
        {
            var str  = ExtractStringFromPRIFile("@{Microsoft.BioEnrollment_10.0.10240.16384_neutral__cw5n1h2txyewy?ms-resource://Microsoft.BioEnrollment/Resources/AppDisplayName}");
            var str2 = ExtractStringFromPRIFile("@{M6Web.M6_3.1.0.138_x64__ewak77gqn492e?ms-resource://M6Web.M6/resources/manifestAppDescription}");

            var str3 = str + str2;


            Windows.Management.Deployment.PackageManager manager = new Windows.Management.Deployment.PackageManager();
            var list              = manager.FindPackagesForUser("");
            var installedPackage  = list.ToList();
            var lala              = list.Select(package => package.Id.Name).ToList();
            var userAppsFullNames = (from j in installedPackage
                                     let id = j.Id.FullName
                                              orderby id
                                              select id).ToList();

            var userAppsGrouped = (from j in installedPackage
                                   let id = j.Id.Name
                                            orderby id
                                            select id).Distinct().ToList();
            var appDatalist = (from directory in Directory.EnumerateDirectories(System.IO.Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData), @"Packages"))
                               let dirName = System.IO.Path.GetFileName(directory)
                                             orderby dirName
                                             select dirName).ToList();

            var appDataListFullName = (from directoryName in appDatalist
                                       let fullName = (from installedPackageName in installedPackage
                                                       where installedPackageName.Id.FamilyName == directoryName
                                                       select installedPackageName.Id.FullName).FirstOrDefault()
                                                      where fullName != null
                                                      select fullName).ToList();

            var to = installedPackage.Select(x => x.Id.FamilyName).Distinct().ToList();

            var packageGrouped = (from package in installedPackage
                                  group package by package.Id.FamilyName into packageGroup
                                  where packageGroup.Count() > 1
                                  select packageGroup).ToList();


            var appDataListFullNameEmptied = (from package in installedPackage // inversé les deux listes
                                              where appDatalist.Contains(package.Id.FamilyName)
                                              select package).ToList();

            var register = Registry.CurrentUser.OpenSubKey(@"SOFTWARE\Classes\Extensions\ContractId\Windows.Launch\PackageId");
            var tables   = register.GetSubKeyNames();
            //@{Microsoft.BioEnrollment_10.0.10240.16384_neutral__cw5n1h2txyewy?ms-resource://Microsoft.BioEnrollment/Resources/AppDisplayName}

            var displayNameListFromRegister = (from appName in tables
                                               let realname = Extract(register, appName)
                                                              orderby realname
                                                              select realname).ToList();

            var displayNameListFromRegisterFilterByUserAppsCode = (from appName in tables
                                                                   where userAppsFullNames.Contains(appName)
                                                                   let realname = Extract(register, appName)
                                                                                  orderby realname
                                                                                  select realname).ToList();

            var displayNameListFromRegisterFilterByAppDataFolder = (from appName in tables
                                                                    where appDataListFullName.Contains(appName)
                                                                    let realname = Extract(register, appName)
                                                                                   orderby realname
                                                                                   select realname).ToList();

            var compared = (from id in displayNameListFromRegisterFilterByUserAppsCode
                            where !displayNameListFromRegisterFilterByAppDataFolder.Contains(id)
                            select id).ToList();

            var compared2 = (from id in displayNameListFromRegisterFilterByUserAppsCode
                             where !displayNameListFromRegisterFilterByAppDataFolder.Contains(id)
                             select id).ToList();

            var tato = register.OpenSubKey(@"10769UpdatePixels.CloudMangaReader_5.4.0.128_x64__jhqpz6nvs8dwt\ActivatableClassId\App.wwa").GetValue("Icon").ToString();

            ////using (Bitmap bmp = new System.Drawing.Icon(tato).ToBitmap())
            ////{
            ////    var stream = new MemoryStream();
            ////    bmp.Save(stream, System.Drawing.Imaging.ImageFormat.Png);
            ////    imageBox.Source = BitmapFrame.Create(stream);
            ////}

            ExtractStringFromPRIFile(tato);
            Windows.ApplicationModel.Resources.ResourceLoader.GetForViewIndependentUse().GetString("@{Microsoft.BioEnrollment_10.0.10240.16384_neutral__cw5n1h2txyewy?ms-resource://Microsoft.BioEnrollment/Resources/AppDisplayName}");
        }
Пример #14
0
        // returns [icon, color]
        public static string[] GetAppIcon(string appUserModelId, int size)
        {
            string[] pkgAppId          = appUserModelId.Split('!');
            string   packageFamilyName = "";
            string   appId             = "";
            string   returnIcon        = "";
            string   returnColor       = "";

            if (pkgAppId.Count() > 1)
            {
                packageFamilyName = pkgAppId[0];
                appId             = pkgAppId[1];
            }

            Windows.Management.Deployment.PackageManager   pman     = new Windows.Management.Deployment.PackageManager();
            IEnumerable <Windows.ApplicationModel.Package> packages = getPackages(pman, packageFamilyName);

            foreach (Windows.ApplicationModel.Package package in packages)
            {
                string path = "";

                // need to catch a system-thrown exception...
                try
                {
                    path = package.InstalledLocation.Path;
                }
                catch
                {
                    continue;
                }

                XmlDocument         manifest     = getManifest(path);
                XmlNamespaceManager xmlnsManager = getNamespaceManager(manifest);

                bool found = false;

                foreach (XmlNode app in manifest.SelectNodes("/ns:Package/ns:Applications/ns:Application", xmlnsManager))
                {
                    // get specific app in package

                    if (app.SelectSingleNode("@Id", xmlnsManager).Value == appId)
                    {
                        // return values
                        returnIcon = getIconPath(path, app, xmlnsManager, size);

                        if (returnIcon.EndsWith("_altform-unplated.png"))
                        {
                            returnColor = defaultColor;
                        }
                        else
                        {
                            returnColor = getPlateColor(app, xmlnsManager);
                        }

                        found = true;

                        break;
                    }
                }

                if (found)
                {
                    break;
                }
            }

            return(new string[] { returnIcon, returnColor });
        }