예제 #1
0
        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();
        }
예제 #2
0
 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);
     }
 }
예제 #3
0
        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();
            }
        }
예제 #4
0
        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();
            }
        }
예제 #5
0
        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);
            }
        }