Ejemplo n.º 1
0
        public override List <ApplicationResponseItem> GetInstalledApplications()
        {
            var lines = RunTerminalProcess(APT_METHOD, APT_PARAMETERS);

            var applications = new List <ApplicationResponseItem>();

            foreach (var line in lines)
            {
                var split = line.Split(' ');

                var item = new ApplicationResponseItem();

                for (var x = 0; x < split.Length; x++)
                {
                    var element = split[x];

                    switch (x)
                    {
                    case 0:
                        item.Name = element.Split('/')[0];
                        break;

                    case 1:
                        item.Version = element;
                        break;

                    default:
                        continue;
                    }
                }

                applications.Add(item);
            }

            return(applications);
        }
Ejemplo n.º 2
0
        private List <ApplicationResponseItem> GetApps(string registryKeyPath)
        {
            var results = new ConcurrentDictionary <string, ApplicationResponseItem>();

            var hives = new RegistryHive[] {
                RegistryHive.CurrentUser,
                RegistryHive.LocalMachine
            };

            var views = new RegistryView[] {
                RegistryView.Registry32,
                RegistryView.Registry64
            };

            foreach (var hive in hives)
            {
                foreach (var view in views)
                {
                    RegistryKey key = null,
                         basekey    = null;

                    try
                    {
                        basekey = RegistryKey.OpenBaseKey(hive, view);
                        key     = basekey.OpenSubKey(registryKeyPath);
                    }
                    catch (Exception ex) {
                        LogDebug($"Error when attempting to obtain base key and key: {ex}");

                        continue;
                    }

                    if (basekey == null || key == null)
                    {
                        LogDebug($"Could not obtain base key or key - skipping");

                        continue;
                    }

                    Parallel.ForEach(key.GetSubKeyNames(), subKeyName =>
                    {
                        try
                        {
                            using (var subKey = key.OpenSubKey(subKeyName))
                            {
                                if (subKey == null)
                                {
                                    return;
                                }

                                var displayNameValue = subKey.GetValue("DisplayName");

                                if (displayNameValue == null || string.IsNullOrEmpty(displayNameValue.ToString()))
                                {
                                    LogDebug($"{subKeyName} had an empty Name - ignoring");

                                    return;
                                }

                                var item = new ApplicationResponseItem
                                {
                                    Name    = ASCIIEncode(displayNameValue.ToString()),
                                    Version = ParseVersion(subKey.GetValue("Version")?.ToString(),
                                                           subKey.GetValue("DisplayVersion")?.ToString(), subKey.GetValue("VersionMajor")?.ToString(),
                                                           subKey.GetValue("VersionMinor")?.ToString()),
                                    Vendor          = ASCIIEncode(subKey.GetValue("Publisher")?.ToString()),
                                    InstallLocation = ASCIIEncode(subKey.GetValue("InstallLocation")?.ToString()),
                                    InstallDate     = ParseDate(subKey.GetValue("InstallDate")?.ToString())
                                };

                                if (item.InstallDate == null && !string.IsNullOrEmpty(item.InstallLocation) && Directory.Exists(item.InstallLocation))
                                {
                                    try
                                    {
                                        var directoryInfo = new DirectoryInfo(item.InstallLocation);

                                        item.InstallDate = directoryInfo?.CreationTime;

                                        LogDebug($"Obtained install date from {item.InstallLocation} ({item.InstallDate ?? null})");
                                    }
                                    catch (Exception iex)
                                    {
                                        LogError($"Error when getting the install date from ({item.InstallLocation}): {iex}");
                                    }
                                }

                                results.TryAdd(item.Name, item);
                            }
                        }
                        catch (Exception ex)
                        {
                            LogError($"Error when parsing {subKeyName}: {ex}");
                        }
                    });
                }
            }

            return(results.Values.ToList());
        }