当前位置: 首页 > news >正文

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

相关文章:

  • Proser:重大更新,新增数据检视功能
  • 使用 Arduino 和 Wi-Fi 的 Web 控制伺服
  • ceph运维硬件规划技巧
  • HashMap的理解和原理
  • eclipse运行配置,希望带参数该怎么配置
  • PWM变流器的LCL滤波器设计及其有源阻尼策略
  • 文生图网站推荐(2025.3)
  • leetcode501-二叉搜索树中的众数
  • 烽火HG680-KA_海思HI3798MV310_安卓9.0_U盘强刷固件包及注意点说明
  • 整除分块 (+例题变形K-取模 2022年天梯赛(GPLT)上海理工大学校内选拔赛)
  • 最长公共子序列(动态规划法+优化)
  • NL2SQL 优化之 Schema 编写标准
  • 单词翻转(信息学奥赛一本通-1144)
  • AI视觉测试工具实战评测:以Applitools为例的技术解析与行业应用
  • CoreData 调试警告:多个 NSEntityDescriptions 声明冲突的解决
  • JSON 数据详解
  • 【再读】R1-Onevision通过跨模态形式化为复杂多模态推理任务提供了系统性解决方案
  • 盘库吧--搜索
  • 开源模型中的 Function Call 方案深度剖析
  • 【Linux系统】进程地址空间详解
  • 玉林一河段出现十年最大洪水,一村民被冲走遇难
  • 专利申请全球领先!去年我国卫星导航与位置服务产值超5700亿
  • 打造信息消费新场景、新体验,上海信息消费节开幕
  • 新城市志|GDP万亿城市,一季度如何挑大梁
  • 时隔三年,俄乌直接谈判重启
  • 上海国际碳中和博览会下月举办,首次打造民营经济专区