Как определить установленную версию Windows с помощью .net
Вопрос
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;
}