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

82
11

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

спросил(а) 2009-11-19T10:10:00+03:00 10 лет, 10 месяцев назад
1
Решение
57

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


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

ответил(а) 2009-11-19T10:34:00+03:00 10 лет, 10 месяцев назад
69

Определите версию и версию Windows


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

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

ответил(а) 2009-11-19T10:17:00+03:00 10 лет, 10 месяцев назад
58

В 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

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

ответил(а) 2011-01-28T13:30:00+03:00 9 лет, 8 месяцев назад
57

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

EditionID = конечный
EditionID = Предприятие
ИзданиеID = Профессиональное
EditionID = Premium

ответил(а) 2009-11-19T13:45:00+03:00 10 лет, 10 месяцев назад
41

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


(gwmi -class Win32_OperatingSystem).name

Что возвращает строка, например:


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

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


gwmi -class Win32_OperatingSystem | FL *

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

ответил(а) 2017-01-12T20:13:00+03:00 3 года, 8 месяцев назад
42

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


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

ответил(а) 2009-11-23T19:42:00+03:00 10 лет, 10 месяцев назад
40

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


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


Лучшим способом является проверка существования функций, характерных для каждой версии окон. Например, в Windows Vista/7 home basic вы не найдете опыт работы с аэродинамикой. Точно так же конечная версия поставляется с битлокатором и т.д., А домашняя премия не делает.


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


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

ответил(а) 2009-11-20T14:49:00+03:00 10 лет, 10 месяцев назад
41

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

ответил(а) 2009-11-19T10:19:00+03:00 10 лет, 10 месяцев назад
40

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

ответил(а) 2009-11-19T10:18:00+03:00 10 лет, 10 месяцев назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема