正在检查 Windows Server 2003

Checking for Windows Server 2003

我创建了这些函数用于在 windows 服务器 2003 上安装一些文件,我想知道这是否是正确的方法。

function IsServer: Boolean;
var
  ver: TWindowsVersion;
begin
  GetWindowsVersionEx(ver);
  Result := UsingWinNT and (ver.Major = 5) and (ver.Minor >= 2) and Not IsWin64;
end;

function IsServer64: Boolean;
var
  ver: TWindowsVersion;
begin
  GetWindowsVersionEx(ver);
  Result := UsingWinNT and (ver.Major = 5) and (ver.Minor >= 2) and IsWin64;
end;

您没有向我们展示 UsingWinNT 的作用 - 尽管您绝对不需要检查 "NT" - Inno Setup 制作的安装程序甚至不会在非 NT 系统上启动。


IsServer64 即使在 Windows XP Professional x64 Edition, as it also has 5.2 version.

上也会 return 为真

为了区分这些,测试ver.ProductType = VER_NT_SERVER
参见 How to programmatically tell the difference between XP 64 bit and Server 2003 64 Bit


function IsWindowsServer2003_32Bit: Boolean;
var
  Ver: TWindowsVersion;
begin
  GetWindowsVersionEx(Ver);
  Result :=
    (Ver.ProductType = VER_NT_SERVER) and
    (Ver.Major = 5) and (Ver.Minor = 2) and (not IsWin64);
end;

function IsWindowsServer2003_64Bit: Boolean;
var
  Ver: TWindowsVersion;
begin
  GetWindowsVersionEx(Ver);
  Result :=
    (Ver.ProductType = VER_NT_SERVER) and
    (Ver.Major = 5) and (Ver.Minor = 2) and IsWin64;
end;

另见 Determine Windows version in Inno Setup