/// <summary> /// Creates a new <see cref="RegistryValue"/> from a key path, the value name and view used to get the key /// </summary> /// <param name="keyPath">The full path of the key</param> /// <param name="valueName">The name of the value</param> /// <param name="view">The view used to get the key</param> public RegistryValue(string keyPath, string valueName, RegistryView view) { using (var key = RegistryHelpers.GetKeyFromFullPath(keyPath, view)) { Value = key.GetValue(valueName); ValueKind = key.GetValueKind(valueName); Name = valueName; KeyPath = key.Name; KeyView = key.View; } }
public override async Task <FileSystemPath?> LocateAsync() { FileSystemPath installDir; try { // Get the key path var keyPath = RegistryHelpers.CombinePaths(AppFilePaths.UninstallRegistryKey, $"Steam App {SteamID}"); using var key = RegistryHelpers.GetKeyFromFullPath(keyPath, RegistryView.Registry64); // Get the install directory if (!(key?.GetValue("InstallLocation") is string dir)) { Logger.Info("The {0} was not found under Steam Apps", Game); await Services.MessageUI.DisplayMessageAsync(Resources.LocateGame_InvalidSteamGame, Resources.LocateGame_InvalidSteamGameHeader, MessageType.Error); return(null); } installDir = dir; } catch (Exception ex) { Logger.Error(ex, "Getting Steam game install directory"); await Services.MessageUI.DisplayMessageAsync(Resources.LocateGame_InvalidSteamGame, Resources.LocateGame_InvalidSteamGameHeader, MessageType.Error); return(null); } // Make sure the game is valid if (!await IsValidAsync(installDir)) { Logger.Info("The {0} install directory was not valid", Game); await Services.MessageUI.DisplayMessageAsync(Resources.LocateGame_InvalidSteamGame, Resources.LocateGame_InvalidSteamGameHeader, MessageType.Error); return(null); } return(installDir); }
protected virtual IEnumerable <InstalledProgram> EnumerateRegistryUninstallPrograms() { Logger.Info("Getting installed programs from the Registry"); // Get 64-bit location if on 64-bit system var keys = Environment.Is64BitOperatingSystem ? new RegistryKey[] { RegistryHelpers.GetKeyFromFullPath(AppFilePaths.UninstallRegistryKey, RegistryView.Registry32), RegistryHelpers.GetKeyFromFullPath(AppFilePaths.UninstallRegistryKey, RegistryView.Registry64) } : new RegistryKey[] { RegistryHelpers.GetKeyFromFullPath(AppFilePaths.UninstallRegistryKey, RegistryView.Registry32), }; // Enumerate the uninstall keys foreach (var key in keys) { // Dispose key when done using RegistryKey registryKey = key; // Enumerate the sub keys foreach (string subKeyName in registryKey.GetSubKeyNames()) { // Make sure it's not a Windows update if (subKeyName.StartsWith("KB") && subKeyName.Length == 8) { continue; } // Open the sub key using RegistryKey subKey = registryKey.OpenSubKey(subKeyName); // Make sure the key is not null if (subKey == null) { continue; } // Make sure it is not a system component if (subKey.GetValue("SystemComponent") as int? == 1) { continue; } if (subKey.GetValue("WindowsInstaller") as int? == 1) { continue; } // Make sure it has an uninstall string if (subKey.GetValue("UninstallString") == null) { continue; } if (subKey.GetValue("ParentKeyName") != null) { continue; } // Make sure it has a display name if (subKey.GetValue("DisplayName") is not string dn) { continue; } // Make sure it has an install location if (subKey.GetValue("InstallLocation") is not string dir) { continue; } yield return(new InstalledProgram(dn, subKey.Name, dir)); } } }
/// <summary> /// Gets the key containing the value /// </summary> /// <param name="writable">True if the key should be writable</param> /// <returns>The key containing the value</returns> public RegistryKey GetKey(bool writable = false) => RegistryHelpers.GetKeyFromFullPath(KeyPath, KeyView, writable);
/// <summary> /// Gets the parent key /// </summary> /// <param name="registryKey">The registry key</param> /// <param name="writable">True if the key should be writable</param> /// <returns>The parent key</returns> public static RegistryKey GetParentKey(this RegistryKey registryKey, bool writable = false) { return(RegistryHelpers.GetKeyFromFullPath(RegistryHelpers.GetParentKeyPath(registryKey.Name), registryKey.View, writable)); }