public RegistryData() { const string REGISTRY_KEY = @"SOFTWARE\Microsoft"; MsMachineKey = Registry.LocalMachine.OpenSubKey(REGISTRY_KEY); if (MsMachineKey == null) { NoVisualStudio = true; return; } var vsKeyNames = MsMachineKey .GetSubKeyNames() .Where(sk => sk.StartsWith("VisualStudio", StringComparison.Ordinal)) .ToArray(); if (vsKeyNames.Length == 0) { NoVisualStudio = true; return; } VsPre2017MachineKey = MsMachineKey.OpenSubKey("VisualStudio"); VsPre2017KeyNames = VsPre2017MachineKey?.GetSubKeyNames() ?? new string[0]; VsPost2015Data = vsKeyNames .Where(kn => kn.StartsWith("VisualStudio_")) .Select(kn => new VsPost2017Data(MsMachineKey.OpenSubKey(kn))) .ToArray(); }
public void Dispose() { MsMachineKey?.Dispose(); VsPre2017MachineKey?.Dispose(); foreach (var vsPost2015DataItem in VsPost2015Data) { vsPost2015DataItem.Dispose(); } }
public RegistryData(FileVersionInfo thisAssemblyVersion) { _thisAssemblyVersion = thisAssemblyVersion; const string REGISTRY_KEY = @"SOFTWARE\Microsoft"; MsMachineKey = Registry.LocalMachine.OpenSubKey(REGISTRY_KEY); if (MsMachineKey == null) { ErrorMessage = $"Unable to open the '{REGISTRY_KEY}' registry key"; NoVisualStudio = true; return; } var vsKeyNames = MsMachineKey .GetSubKeyNames() .Where(sk => sk.StartsWith("VisualStudio", StringComparison.Ordinal)) .ToArray(); if (vsKeyNames.Length == 0) { ErrorMessage = $@"Unable to find any '{REGISTRY_KEY}\VisualStudio' registry keys from which to determine your Visual Studio install paths"; NoVisualStudio = true; return; } VsPre2017MachineKey = MsMachineKey.OpenSubKey("VisualStudio"); VsPre2017KeyNames = VsPre2017MachineKey?.GetSubKeyNames() ?? new string[0]; VsPost2015Data = vsKeyNames .Where(kn => kn.StartsWith("VisualStudio_")) .Select(kn => new VsPost2017Data(MsMachineKey.OpenSubKey(kn))) .GroupBy(d => d.InstallPath) .Select(grp => grp.First()) .ToArray(); }