ScpControl/Utilities/OsInfoHelper.cs (87 lines of code) (raw):

using System; using System.Reflection; using log4net; using Microsoft.Win32; namespace ScpControl.Utilities { public enum OsType { Invalid, Xp, Vista, Win7, Win8, Win81, Win10, Default }; /// <summary> /// Utility class to query current operating system information. /// </summary> public static class OsInfoHelper { private static readonly ILog Log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); public static bool IsVc2013Installed { get { return Registry.LocalMachine.OpenSubKey(@"SOFTWARE\Microsoft\DevDiv\vc\Servicing\12.0\RuntimeMinimum") != null; } } public static bool IsVc2010Installed { get { return !(Registry.LocalMachine.OpenSubKey(@"SOFTWARE\Microsoft\VisualStudio\10.0\VC\VCRedist") == null && Registry.LocalMachine.OpenSubKey(@"SOFTWARE\Wow6432Node\Microsoft\VisualStudio\10.0\VC\VCRedist") == null); } } public static string OsInfo { get { return string.Format("Microsoft {0} {1} ({2} {3})", OsVersionInfo.Name, OsVersionInfo.Edition, OsVersionInfo.Version, OsVersionInfo.OSBits); } } public static OsType OsParse(string info) { var valid = OsType.Invalid; var architecture = (Environment.GetEnvironmentVariable("PROCESSOR_ARCHITECTURE") ?? "UNKNOWN").ToUpper().Trim(); if (Environment.Is64BitOperatingSystem == Environment.Is64BitProcess && (architecture == "X86" || architecture == "AMD64")) { valid = OsType.Default; if (string.IsNullOrEmpty(info)) return valid; var token = info.Split(' '); if (token[0].ToUpper().Trim() != "MICROSOFT" || token[1].ToUpper().Trim() != "WINDOWS") return valid; switch (token[2].ToUpper().Trim()) { case "XP": if (!Environment.Is64BitOperatingSystem) valid = OsType.Xp; break; case "VISTA": valid = OsType.Vista; break; case "7": valid = OsType.Win7; break; case "8": valid = OsType.Win8; break; case "8.1": valid = OsType.Win81; break; case "10": valid = OsType.Win10; break; case "SERVER": switch (token[3].ToUpper().Trim()) { case "2008": valid = token[4].ToUpper().Trim() == "R2" ? OsType.Win7 : OsType.Vista; break; case "2012": valid = OsType.Win8; break; } break; } } return valid; } } }