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传入系统版本名称,即可判断当前是否为想要的系统了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

luoyayun361

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值