如何仅将三部分文件版本(没有第四个修订号)包含到 Inno Setup 中的 AppVersion 值中

Con*_*ist 3 inno-setup

我已经使用 Inno Setup 6.0 创建了 Windows 桌面 WPF/C# 应用程序的安装程序,并且运行良好。只是一个小装饰问题 - 我想使用“语义版本”。Windows 中的版本号有四个组成部分,major.minor.build.revision但我想介绍major.minor.patch. 第四个组件将由 CI 使用,与用户无关。在当前的脚本中,我有这个:

#define AppVersion GetFileVersion("..\app\bin\Release\app.exe")
... which later gets used as:
[Setup]
AppVersion=AppVersion
OutputBaseFilename=app.{#AppVersion}.x64
Run Code Online (Sandbox Code Playgroud)

结果是app.1.0.1.781.x64.exe由 Inno Setup 创建的,所以我正在寻找一种方法来切断最后一个版本组件 - .781. 到目前为止,我还没有弄清楚如何为此目的调用脚本函数。我可以在节中添加函数[Code],但它将在节之后定义[Setup],并且显然不能在[Setup]节中调用?

是否可以修改Pascal 脚本中的AppVersion和的值OutputBaseFilename,例如在 中InitializeSetup()

And*_*kle 5

您可以使用GetVersionComponents预处理器功能ParseVersion在Inno Setup 6.1之前):

#define AppVerText() \
   GetVersionComponents('..\app\bin\Release\app.exe', \
       Local[0], Local[1], Local[2], Local[3]), \
   Str(Local[0]) + "." + Str(Local[1]) + "." + Str(Local[2])
Run Code Online (Sandbox Code Playgroud)

然后您可以在您的部分中使用它[Setup]

AppVersion={#AppVerText}
Run Code Online (Sandbox Code Playgroud)

您也可以使用它OutputBaseFilename

OutputBaseFilename=app.{#AppVerText}.x64
Run Code Online (Sandbox Code Playgroud)