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; })); }
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>()); } }
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); }
// 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 }); }
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; })); }
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(); }
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; })); }
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) }); }
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; })); }
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; //} }
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); }
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}"); }
// 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 }); }