Программирование: GetWindowsVersionEx

Прототип

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;