Inno Setup打包脚本区分Windows系统版本
前言
使用Inno Setup打包Windows桌面程序,有时候可能需要根据系统版本不同来处理对应的流程, 比如安装不同的驱动,或者执行不同的脚本等等,本文主要阐述如何在打包脚本中添加函数去判断不同的系统版本。
正文
直接上代码:
//Func: Get Windows Version
function MyGetWindowsVersion:String;
var
osInfo: RTL_OSVERSIONINFOW;
begin
osInfo.dwOSVersionInfoSize := SizeOf(osInfo);
RtlGetVersion(osInfo);
//test
//MsgBox(Format('Get windows Version : Major %d,Minor %d,Build %d', [osInfo.dwMajorVersion, osInfo.dwMinorVersion, osInfo.dwBuildNumber]), mbInformation, MB_OK);
//windows11 Windows 11的主版本号是10,次版本号是0,内部版本号大于等于22000
if(osInfo.dwMajorVersion = 10) and (osInfo.dwMinorVersion = 0) and (osInfo.dwBuildNumber >= 22000) then
begin
Result:='WIN11';
Exit;
end;
//windows10
if(osInfo.dwMajorVersion = 10) and (osInfo.dwMinorVersion = 0) then
begin
Result:='WIN10';
Exit;
end;
//windows8.1
if(osInfo.dwMajorVersion = 6) and (osInfo.dwMinorVersion = 3) then
begin
Result:='WIN81';
Exit;
end;
//windows8
if(osInfo.dwMajorVersion = 6) and (osInfo.dwMinorVersion = 2) then
begin
Result:='WIN8';
Exit;
end;
//Windows 7
if(osInfo.dwMajorVersion = 6) and (osInfo.dwMinorVersion = 1) then
begin
Result:='WIN7';
Exit;
end;
//Windows XP
if(osInfo.dwMajorVersion = 5) and (osInfo.dwMinorVersion = 10) then
begin
Result:='WINXP';
Exit;
end;
//其它
Result:='OTHER';
end;
function MySystemIs(WinVers: String): Boolean;
begin
Result := (MyGetWindowsVersion = Uppercase(WinVers));
end;
调用也很简单,比如需要在执行安装过程中判断系统来安装某个附加程序:
[Run]
Filename: "{app}\{#VCName}"; Parameters: "/S"; StatusMsg: "Installing VC++ redistributables..."; Check: MySystemIs('WIN11');
通过调用 MySystemIs
传入系统版本名称,即可判断当前是否为想要的系统了。