Obtenga la versión del sistema operativo / nombre descriptivo en C #

Actualmente estoy trabajando en un proyecto C #. Quiero recostackr estadísticas de usuarios para desarrollar mejor el software. Estoy usando la característica Environment.OS de C # pero solo muestra el nombre del SO como algo parecido a Microsoft Windows NT

Lo que quiero recuperar es el nombre real del sistema operativo, como Windows XP, Windows Vista or Windows 7 etc.

es posible?

Agregue una referencia y use sentencias para System.Management , luego:

 public static string GetOSFriendlyName() { string result = string.Empty; ManagementObjectSearcher searcher = new ManagementObjectSearcher("SELECT Caption FROM Win32_OperatingSystem"); foreach (ManagementObject os in searcher.Get()) { result = os["Caption"].ToString(); break; } return result; } 

Deberías tratar de evitar WMI para uso local. Es muy conveniente, pero pagas caro por ello en términos de rendimiento. ¡Piensa en el impuesto a la pereza!

La respuesta de Kashish sobre el registro no funciona en todos los sistemas. El siguiente código debe incluir también el paquete de servicio:

  public string HKLM_GetString(string path, string key) { try { RegistryKey rk = Registry.LocalMachine.OpenSubKey(path); if (rk == null) return ""; return (string)rk.GetValue(key); } catch { return ""; } } public string FriendlyName() { string ProductName = HKLM_GetString(@"SOFTWARE\Microsoft\Windows NT\CurrentVersion", "ProductName"); string CSDVersion = HKLM_GetString(@"SOFTWARE\Microsoft\Windows NT\CurrentVersion", "CSDVersion"); if (ProductName != "") { return (ProductName.StartsWith("Microsoft") ? "" : "Microsoft ") + ProductName + (CSDVersion != "" ? " " + CSDVersion : ""); } return ""; } 

Agregue una referencia de .NET a Microsoft.VisualBasic. Luego llame:

 new Microsoft.VisualBasic.Devices.ComputerInfo().OSFullName 

Desde MSDN :

Esta propiedad devuelve información detallada sobre el nombre del sistema operativo si Windows Management Instrumentation (WMI) está instalado en la computadora. De lo contrario, esta propiedad devuelve la misma cadena que la propiedad My.Computer.Info.OSPlatform , que proporciona información menos detallada que la que WMI puede proporcionar. Información que WMI puede proporcionar.

 System.OperatingSystem osInfo = System.Environment.OSVersion; 
 String subKey = @"SOFTWARE\Wow6432Node\Microsoft\Windows NT\CurrentVersion"; RegistryKey key = Registry.LocalMachine; RegistryKey skey = key.OpenSubKey(subKey); Console.WriteLine("OS Name: {0}", skey.GetValue("ProductName")); 

Espero que encuentres esto útil

 public int OStype() { int os = 0; IEnumerable list64 = Directory.GetDirectories(Environment.GetEnvironmentVariable("SystemRoot")).Where(s => s.Equals(@"C:\Windows\SysWOW64")); IEnumerable list32 = Directory.GetDirectories(Environment.GetEnvironmentVariable("SystemRoot")).Where(s => s.Equals(@"C:\Windows\System32")); if (list32.Count() > 0) { os = 32; if (list64.Count() > 0) os = 64; } return os; }