public UWPApplication(IAppxManifestApplication manifestApp, UWP package) { if (manifestApp == null) { throw new ArgumentNullException(nameof(manifestApp)); } var hr = manifestApp.GetAppUserModelId(out var tmpUserModelId); UserModelId = AppxPackageHelper.CheckHRAndReturnOrThrow(hr, tmpUserModelId); hr = manifestApp.GetAppUserModelId(out var tmpUniqueIdentifier); UniqueIdentifier = AppxPackageHelper.CheckHRAndReturnOrThrow(hr, tmpUniqueIdentifier); hr = manifestApp.GetStringValue("DisplayName", out var tmpDisplayName); DisplayName = AppxPackageHelper.CheckHRAndReturnOrThrow(hr, tmpDisplayName); hr = manifestApp.GetStringValue("Description", out var tmpDescription); Description = AppxPackageHelper.CheckHRAndReturnOrThrow(hr, tmpDescription); hr = manifestApp.GetStringValue("BackgroundColor", out var tmpBackgroundColor); BackgroundColor = AppxPackageHelper.CheckHRAndReturnOrThrow(hr, tmpBackgroundColor); hr = manifestApp.GetStringValue("EntryPoint", out var tmpEntryPoint); EntryPoint = AppxPackageHelper.CheckHRAndReturnOrThrow(hr, tmpEntryPoint); Package = package ?? throw new ArgumentNullException(nameof(package)); DisplayName = ResourceFromPri(package.FullName, DisplayName); Description = ResourceFromPri(package.FullName, Description); logoUri = LogoUriFromManifest(manifestApp); Enabled = true; CanRunElevated = IfApplicationcanRunElevated(); }
internal string LogoUriFromManifest(IAppxManifestApplication app) { if (_logoKeyFromVersion.TryGetValue(Package.Version, out var key)) { var hr = app.GetStringValue(key, out var logoUriFromApp); _ = AppxPackageHelper.CheckHRAndReturnOrThrow(hr, logoUriFromApp); return(logoUriFromApp); } else { return(string.Empty); } }
public void InitializeAppInfo(string installedLocation) { Location = installedLocation; var path = Path.Combine(installedLocation, "AppxManifest.xml"); var namespaces = XmlNamespaces(path); InitPackageVersion(namespaces); const uint noAttribute = 0x80; const Stgm exclusiveRead = Stgm.Read; var hResult = NativeMethods.SHCreateStreamOnFileEx(path, exclusiveRead, noAttribute, false, null, out IStream stream); if (hResult == Hresult.Ok) { var apps = new List <UWPApplication>(); List <IAppxManifestApplication> appsViaManifests = AppxPackageHelper.GetAppsFromManifest(stream); foreach (var appInManifest in appsViaManifests) { var app = new UWPApplication(appInManifest, this); apps.Add(app); } Apps = apps.Where(a => { var valid = !string.IsNullOrEmpty(a.UserModelId) && !string.IsNullOrEmpty(a.DisplayName) && a.AppListEntry != "none"; return(valid); }).ToArray(); if (Marshal.ReleaseComObject(stream) > 0) { Log.Error("AppxManifest.xml was leaked", MethodBase.GetCurrentMethod().DeclaringType); } } else { var e = Marshal.GetExceptionForHR((int)hResult); ProgramLogger.Exception("Error caused while trying to get the details of the UWP program", e, GetType(), path); Apps = new List <UWPApplication>().ToArray(); } }
public void InitializeAppInfo(string installedLocation) { Location = installedLocation; AppxPackageHelper _helper = new AppxPackageHelper(); var path = Path.Combine(installedLocation, "AppxManifest.xml"); var namespaces = XmlNamespaces(path); InitPackageVersion(namespaces); IStream stream; const uint noAttribute = 0x80; const Stgm exclusiveRead = Stgm.Read | Stgm.DenyWrite; var hResult = SHCreateStreamOnFileEx(path, exclusiveRead, noAttribute, false, null, out stream); if (hResult == Hresult.Ok) { var apps = new List <Application>(); List <AppxPackageHelper.IAppxManifestApplication> _apps = _helper.getAppsFromManifest(stream); foreach (var _app in _apps) { var app = new Application(_app, this); apps.Add(app); } Apps = apps.Where(a => { var valid = !string.IsNullOrEmpty(a.UserModelId) && !string.IsNullOrEmpty(a.DisplayName) && a.AppListEntry != "none"; return(valid); }).ToArray(); } else { var e = Marshal.GetExceptionForHR((int)hResult); ProgramLogger.LogException($"|UWP|InitializeAppInfo|{path}" + "|Error caused while trying to get the details of the UWP program", e); Apps = new List <Application>().ToArray(); } }
internal string LogoUriFromManifest(IAppxManifestApplication app) { var logoKeyFromVersion = new Dictionary <PackageVersion, string> { { PackageVersion.Windows10, "Square44x44Logo" }, { PackageVersion.Windows81, "Square30x30Logo" }, { PackageVersion.Windows8, "SmallLogo" }, }; if (logoKeyFromVersion.ContainsKey(Package.Version)) { var key = logoKeyFromVersion[Package.Version]; var hr = app.GetStringValue(key, out var logoUri); _ = AppxPackageHelper.CheckHRAndReturnOrThrow(hr, logoUri); return(logoUri); } else { return(string.Empty); } }