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