Получить версию ОС / понятное имя в C # - PullRequest
22 голосов
/ 13 июня 2011

Я сейчас работаю над проектом C #. Я хочу собирать статистику пользователей, чтобы лучше разрабатывать программное обеспечение. Я использую функцию Environment.OS в C #, но имя ОС отображается только как Microsoft Windows NT

То, что я хочу, чтобы получить - это фактическое известное имя ОС , например, Windows XP, Windows Vista or Windows 7 и т. Д.

Возможно ли это?

Ответы [ 6 ]

47 голосов
/ 13 июня 2011

Добавьте ссылку и используйте операторы для System.Management, затем:

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;
}
12 голосов
/ 28 ноября 2013

Вы действительно должны избегать WMI для локального использования.Это очень удобно, но вы платите дорого за это с точки зрения производительности.Подумайте, лень налог!

Ответ Кашиша о реестре работает не на всех системах.Код ниже должен, а также включает в себя пакет обновления:

    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 "";
    }
9 голосов
/ 06 декабря 2012

Добавить ссылку .NET на Microsoft.VisualBasic.Затем вызовите:

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

С MSDN :

Это свойство возвращает подробную информацию об имени операционной системы, если на компьютере установлена ​​Windows Management Instrumentation (WMI)компьютер.В противном случае это свойство возвращает ту же строку, что и свойство My.Computer.Info.OSPlatform, которое предоставляет менее подробную информацию, чем может предоставить WMI. Информация, которую может предоставить WMI.

4 голосов
/ 28 августа 2013
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"));

Я надеюсь, что вы найдете это полезным

4 голосов
/ 13 июня 2011
System.OperatingSystem osInfo = System.Environment.OSVersion;
2 голосов
/ 30 ноября 2015
public int OStype()
    {
        int os = 0;
        IEnumerable<string> list64 = Directory.GetDirectories(Environment.GetEnvironmentVariable("SystemRoot")).Where(s => s.Equals(@"C:\Windows\SysWOW64"));
        IEnumerable<string> 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;
    }
...