procedure GetWindowsVersionEx(var Version: TWindowsVersion);
Возвращает расширенную информацию о версии Windows в виде структуры.
Объявление структуры TWindowsVersion:
TWindowsVersion = record Major: Cardinal; // Номер старшей версии Minor: Cardinal; // Номер младшей версии Build: Cardinal; // Номер сборки ServicePackMajor: Cardinal; // Номер старшей версии пакета обновления ServicePackMinor: Cardinal; // Номер младшей версии пакета обновления NTPlatform: Boolean; // True, если платформа на базе NT ProductType: Byte; // Тип продукта (см. ниже) SuiteMask: Word; // Установленные компоненты продукта (см. ниже) end;
Поле ProductType может принимать одно из следующих значений:
VER_NT_WORKSTATION VER_NT_DOMAIN_CONTROLLER VER_NT_SERVER
Также может быть равно нулю, если тип продукта не был определён (что маловероятно). Значение VER_NT_WORKSTATION указывает на не серверную редакцию системы Windows (например, Рабочая станция, Профессиональная или Домашняя).
Поле SuiteMask может быть комбинацией следующих значений:
VER_SUITE_BACKOFFICE VER_SUITE_BLADE VER_SUITE_DATACENTER VER_SUITE_ENTERPRISE VER_SUITE_EMBEDDEDNT VER_SUITE_PERSONAL VER_SUITE_SINGLEUSERTS VER_SUITE_SMALLBUSINESS VER_SUITE_SMALLBUSINESS_RESTRICTED VER_SUITE_TERMINAL
Например, значение VER_SUITE_PERSONAL указывает на Домашнюю редакцию системы Windows XP, а значение VER_SUITE_BLADE говорит о Веб редакции системы Windows Server 2003.
Следующий пример демонстрирует, как можно запретить установку на некоторых выпусках Windows и проверить уровень пакета обновления для нескольких версий операционной системы. (Ни одну из этих проверок невозможно выполнить с помощью директивы MinVersion в секции [Setup].)
function InitializeSetup: Boolean; var Version: TWindowsVersion; S: String; begin GetWindowsVersionEx(Version); // Запрещаем установку на Windows редакции Home if Version.SuiteMask and VER_SUITE_PERSONAL <> 0 then begin SuppressibleMsgBox('Эта программа не поддерживает Windows Home.', mbCriticalError, MB_OK, IDOK); Result := False; Exit; end; // Запрещаем установку на контроллерах домена if Version.ProductType = VER_NT_DOMAIN_CONTROLLER then begin SuppressibleMsgBox('Эта программа не поддерживает контроллеры домена.', mbCriticalError, MB_OK, IDOK); Result := False; Exit; end; Result := True; end;