Как определить ОС Win7 Home Premium, Win7 Professional, Win7 Enterprise или Win7 Ultimate? - PullRequest
3 голосов
/ 19 ноября 2009

Как определить ОС Win7 Home Premium, Win7 Professional, Win7 Enterprise или Win7 ultimate?

Ответы [ 9 ]

3 голосов
/ 19 ноября 2009

Определение версии и издания для Windows

Проверьте это сообщение Определите версию ОС и посмотрите, поможет ли это. Это для XP, но это должно помочь вам немного.

Проверьте это тоже http://andrewensley.com/2009/06/c-detect-windows-os-part-1/ и это для Vista .

1 голос
/ 28 января 2011

В Delphi я бы использовал этот метод для Windows XP и выше, он кажется наиболее простым, и этот ключ реестра должен существовать всегда

var 
  Reg : TRegistry
begin
  Reg := TRegistry.Create();
  Reg.RootKey := HKEY_LOCAL_MACHINE;
  Reg.OpenKey('Software\Microsoft\Windows NT\CurrentVersion', false);
  Caption := Reg.ReadString('ProductName');
  Reg.Free;
end

Вам потребуется включить Реестр как единое целое в ваше приложение

1 голос
/ 19 ноября 2009

Я использую ключ "Edition" в HKEY_LOCAL_MACHINE \ Software \ Microsoft \ Windows NT \ CurrentVersion для определения версии Windows, я не знаю, уникальна ли она? Спасибо.

EditionID = окончательный EditionID = Enterprise EditionID = Профессиональный EditionID = Premium

1 голос
/ 19 ноября 2009

Он отметил вопрос с помощью win32 api.

GetVersionEx () и др. это то, что вам нужно. Посмотрите этот пример кода для более подробного примера.

0 голосов
/ 12 января 2017

Я пришел сюда в поисках того же, но для powershell, и нашел это самым простым:

(gwmi -class Win32_OperatingSystem).name

, которая возвращает строку вроде:

Microsoft Windows 7 Enterprise |C:\Windows|\Device\Harddisk0\Partition2

если вам нужны номера версий и т. Д., Используйте подробную форму, например

gwmi -class Win32_OperatingSystem | FL *

и выберите то, что вам нужно

0 голосов
/ 23 ноября 2009

Вы можете использовать GetVersionEx, чтобы определить версию основной ОС, но этот метод запутывается, сталкиваясь с несколькими продуктами, которые используют общее ядро, и я не думаю, что вы можете программно декодировать эту информацию до уровня определенного SKU. Лучшее, что вы можете избежать - найти строку и позволить пользователю увидеть это. Некоторые простые отображения OSVERSIONINFOEX показаны в разделе примечаний документации здесь

Прочитайте эту публикацию в блоге Microsoft , чтобы узнать, что происходит по этой теме. По сути, все сводится к использованию GetProcAddress для поиска API, который вы пытаетесь использовать, и изящному ухудшению.

0 голосов
/ 20 ноября 2009

Использование подхода, такого как проверка номера версии, на мой взгляд, неверно. Я читал статью о передовом опыте (потерял ссылку), и в нем четко говорилось, что никогда не используйте эти номера версий, которые Microsoft может изменить в будущих обновлениях для определения версии Windows.

Windows Vista - это версия 6.0, а Windows 7 - 6.1, которая в идеале должна была быть 7. Это совсем не надежно.

Лучший способ - проверить наличие функций, характерных для каждой версии Windows. Например, в Windows Vista / 7 Home Basic вы не найдете опыт работы с аэро. Точно так же, как и в конечном итоге, поставляется с BitLocker и т. Д., А для дома премиум-класса - нет.

MSDN подробно расскажет, какие функции доступны в каждой версии и как запросить, доступна ли она. На основании этого вы можете решить, что является базовой версией Windows. Также вы можете использовать запрос информации о версии из системных библиотек для определения точной даты сборки Windows и т. Д.

В Windows 7 были добавлены новые DLL в system32 по сравнению с Vista. Поэтому, когда вы будете искать конкретные библиотеки DLL, вы будете знать, является ли их система Windows 7 или старые версии, такие как xp / vista.

0 голосов
/ 19 ноября 2009

Я собирался предложить посмотреть на коробку, в которой он был отправлен;)

0 голосов
/ 19 ноября 2009

Попробуйте WMI: хост localhost, пространство имен root\cimv2 (это значения по умолчанию) SELECT Caption FROM Win32_OperatingSystem

...