【问题标题】:How to pad version components with zeroes for OutputBaseFilename in Inno Setup如何在 Inno Setup 中为 OutputBaseFilename 填充版本组件为零
【发布时间】:2020-12-17 17:25:28
【问题描述】:

我有 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


    【解决方案1】:

    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)
    

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

    【讨论】:

    • 我正在简要调查 Str 记录的位置,以查找 freepascal 中是否有类似 AddChar 的内容,但空白。无论如何,SO 上的 InnoSetup 社区再次为我提供了解决方案,谢谢!
    猜你喜欢
    • 2019-03-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多