Как определить установленную версию Windows с помощью .net

StackOverflow https://stackoverflow.com/questions/1636711

  •  06-07-2019
  •  | 
  •  

Вопрос

System.Environment.Не отображается версия операционной системы, указывающая, какая версия Windows 2003 установлена (Стандартная, корпоративная, центр обработки данных).

Есть ли какой-либо способ получить доступ к этой информации, используя только управляемый код?

Я знаю, что могу использовать P / Invoke для вызова GetVersionEx и изучить OSVERSIONINFOEX.wSuiteMask, чтобы получить эту информацию, но я ищу более простое решение.

Обновить

Использование WMI выглядит как правильный путь, хотя свойство OSProductSuite Win32_OperatingSystem выглядит более надежным, чем свойство Name .Вот пример кода:

ManagementScope scope = new ManagementScope();
ObjectQuery query = new ObjectQuery("SELECT name, csdversion, description, OperatingSystemSKU, OSProductSuite FROM Win32_OperatingSystem");

using (ManagementObjectSearcher searcher = new ManagementObjectSearcher(scope, query))
{
    using (ManagementObjectCollection resultCollection = searcher.Get())
    {
        foreach (ManagementObject result in resultCollection)
        {
            foreach (PropertyData propertyData in result.Properties)
            {
                Debug.WriteLine(
                    propertyData.Name + ": " +
                    ((propertyData.Value == null) ? "" : propertyData.Value.ToString())
                    );
            }
        }
    }
}
Это было полезно?

Решение

Вы могли бы выполнить следующий запрос WMI:

ВЫБЕРИТЕ имя Из Win32_OperatingSystem

Он возвращает что-то вроде этого:

Microsoft Windows Server 2003 Standard Edition|C:\WINDOWS|\Device\Harddisk0\Partition1

Эта статья объясняет, как выполнять запросы WMI с помощью .NET.

Другие советы

Я не знаю ни одного способа сделать это, используя только управляемый код.

Там есть какой-то код здесь используя Получениеversionex тем не менее, это должно хорошо инкапсулировать информацию для вас.

Я просто хотел добавить меньший фрагмент кода для всех, кому это нужно.

    private static string GetOSName()
    {
        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;
    }
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top