首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我们可以使用Inno Setup 6.1中的新"Version“函数来简化脚本吗?

我们可以使用Inno Setup 6.1中的新"Version“函数来简化脚本吗?
EN

Stack Overflow用户
提问于 2020-11-17 09:02:07
回答 1查看 197关注 0票数 1

我的脚本中有几个处理版本号的地方:

  • 场景1

#定义AppVerText() \ GetVersionComponents(SourceDir + '\Meeting Schedule Assistant.exe,\ Local,Local1,Local2,Local3),\ Str(Local) + ".“.”+ Str(Local1) + ".“+ Str(Local2)”

  • 场景2

{安装的版本是否至少为14.14?}结果:= (主要< 14)或(主要< 14)和(次要< 14)或(次要= 14)和(Bld< 26429)或(Bld=26429和(Rbld <3);if (结果)

从注册表项中提取各种值。

  • 场景3

{请检查WindowsVersion }WindowsVersion := GetWindowsVersion;Log(格式( Windows版本:%x,WindowsVersion));(* Windows必须是Win 7 SP1 (6.1.7601)、Win 8.1 (6.3.9200)或更高版本,例如: Win 10 (10.0.10240)参见:http://www.jrsoftware.org/ishelp/index.php?topic=winvernotes Microsoft .Net Framework4.6.2只适用于这些操作系统。*如果(WindowsVersion < MakeVersion(6,1,7601))或(WindowsVersion >= MakeVersion(6,2,0)和(WindowsVersion< MakeVersion(6,3,0),则开始MakeVersion mbError,MB_OK);

这就要求:

函数MakeVersion(主要,次要,构建:基数):基数;开始结果:= (主shl 24) +(小shl 16) +构建;结束;

我只是想知道我们是否能够利用Inno Setup 6.1中引入的新的“版本”Pascal函数等等?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-11-17 09:24:29

您可以使用ComparePackedVersion function (与PackVersionComponents一起):

代码语言:javascript
复制
Result :=
  (ComparePackedVersion(
    PackVersionComponents(Major, Minor, Bld, Rbld),
    PackVersionComponents(14, 14, 26429, 3)) < 0);

在代码长度方面没有太大的改进。但它不那么容易出错,也更容易理解。

我相信直接比较打包版本数字是安全的(至少除非您的主要版本不高于2^15)。尽管PackVersionComponents不这么认为。

代码语言:javascript
复制
Result :=
  (PackVersionComponents(Major, Minor, Bld, Rbld) <
   PackVersionComponents(14, 14, 26429, 3));

相关问题:Compare version strings in Inno Setup

对于Windows测试,可以将其与GetWindowsVersionEx结合使用

代码语言:javascript
复制
GetWindowsVersionEx(WinVer);
WinVerPacked := PackVersionComponents(WinVer.Major, WinVer.Minor, WinVer.Build, 0);
if (ComparePackedVersion(WinVerPacked, PackVersionComponents(6, 1, 7601, 0)) < 0) or
   ((ComparePackedVersion(WinVerPacked, PackVersionComponents(6, 2, 0, 0)) >= 0) and
    (ComparePackedVersion(WinVerPacked, PackVersionComponents(6, 3, 0, 0)) < 0)) then
begin
  MsgBox(SetupMessage(msgWindowsVersionNotSupported), mbError, MB_OK);
  Result := False;
end;

与上述类似,这也应该是可行的:

代码语言:javascript
复制
if (WinVerPacked < PackVersionComponents(6, 1, 7601, 0)) or
   ((WinVerPacked >= PackVersionComponents(6, 2, 0, 0)) and
    (WinVerPacked < PackVersionComponents(6, 3, 0, 0))) then

在第一个场景中没有什么需要改进的。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64872170

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档