Какой самый простой способ провести различие между версиями Windows? - PullRequest
1 голос
/ 03 марта 2010

Как программно узнать, является ли моя ОС сервером Longhorn или Vista (клиент).

Кажется, что основная и вспомогательная версии одинаковы для обоих:
http://msdn.microsoft.com/en-us/library/ms724833.aspx

Итак, есть ли лучшая альтернатива?

Ответы [ 3 ]

4 голосов
/ 03 марта 2010

Разве та же страница, на которую вы ссылаетесь, не дает ответа?

Windows Server 2008  OSVERSIONINFOEX.wProductType != VER_NT_WORKSTATION
Windows Vista        OSVERSIONINFOEX.wProductType == VER_NT_WORKSTATION 

Просто сравните член wProductType с VER_NT_WORKSTATION

редактировать

Не похоже, что есть способ получить это без P / Invoke. System.Environment.OSVersion не раскрывает этот уровень детализации, и хотя в Microsoft.Win32 в mscorlib есть пространство internal static class Win32Native, насколько я могу судить по разборке, нет ничего, что использует, не говоря уже о разоблачениях 1016 *.

Я нашел (но не пытался) эту страницу на pinvoke.net .

1 голос
/ 26 августа 2011

Вы можете использовать WMI, чтобы узнать версию Windows, а также всякую другую системную информацию.

Вот как получить строку версии:

var osDetails = new System.Management.ManagementObjectSearcher("SELECT * FROM Win32_OperatingSystem").Get().OfType<System.Management.ManagementObject>().First();
string version = osDetails.GetPropertyValue("Caption") as string;

возвращает строку, которая выглядит примерно так: «Microsoft Windows XP Professional».

там есть и другие свойства, кроме Caption, которые можно использовать для получения номеров версий, версий, архитектуры и т. Д.

http://msdn.microsoft.com/en-us/library/aa394239(v=VS.85).aspx

1 голос
/ 03 марта 2010

для сервера

OSVERSIONINFOEX.wProductType != VER_NT_WORKSTATION

для рабочей станции

OSVERSIONINFOEX.wProductType == VER_NT_WORKSTATION
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...