inno-setup - 如何在 Inno Setup 中为 OutputBaseFilename 填充版本组件

标签 inno-setup

我有 Inno Setup 6.1.2 安装脚本,其中版本 main.sub.batch是这样形成的:

#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])
稍后在安装部分,我使用它作为安装包的名称:
[Setup]
OutputBaseFilename=app.{#AppVerText}.x64
生成的文件名将是 app.1.0.2.x64.exe ,这很好。为了使它完美,我想以表格 app.1.00.002.x64.exe 结束。带有零填充组件。
我没有找到类似 PadLeft 的东西在文档中。不幸的是,我也无法理解如何在这种情况下使用我自己的 Pascal 函数。我可以在 Code 中定义一个函数吗?这个部分?

最佳答案

一种快速而肮脏的解决方案来填充 Inno Setup preprocessor 中的数字:

#define AppVerText() \
  GetVersionComponents('..\app\bin\Release\app.exe', \
    Local[0], Local[1], Local[2], Local[3]), \
    Str(Local[0]) + "." + \
      (Local[1] < 10 ? "0" : "") + Str(Local[1]) + "." + \
      (Local[2] < 100 ? "0" : "") + (Local[2] < 10 ? "0" : "") + Str(Local[2])

如果您想要填充的通用函数,请使用以下命令:
#define PadStr(S, C, L) Len(S) < L ? C + PadStr(S, C, L - 1) : S
像这样使用它:
#define AppVerText() \
  GetVersionComponents('MyProg.exe', \
    Local[0], Local[1], Local[2], Local[3]), \
    Str(Local[0]) + "." + PadStr(Str(Local[1]), "0", 2) + "." + \
      PadStr(Str(Local[1]), "0", 3)

帕斯卡脚本 Code (如 this one )在这里没有帮助,因为它在安装时运行,而您在编译时需要它。所以预处理器是唯一的方法。

关于inno-setup - 如何在 Inno Setup 中为 OutputBaseFilename 填充版本组件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65345534/

相关文章:

inno-setup - 在 Inno Setup 中将命令行参数值保存到文本文件

installation - Inno 安装程序 : how to make a change option on "Uninstall or change a program"

inno-setup - Inno Setup到底如何强制重启

inno-setup - 如何在 inno setup 中为 TNewStaticText 中的文本添加不同的颜色

inno-setup - 如何在 InnoSetup 中更改 {app} 变量

windows - Inno Setup 在安装时在目标目录中创建的临时 tmp 文件

inno-setup - 使用 Inno Installer 安装 MS SQL Server Express 2017

windows - 如何从 Batch 脚本上的 Exec 调用获取 ResultCode?

batch-file - Inno Setup - 从外部源(文件或文件夹内容)创建组件/类型的动态列表

inno-setup - 当指定路径不存在时设置默认图标