当前位置: 首页 > 知识库问答 >
问题:

如何在 Inno 安装程序中为输出基本文件名填充版本组件

微生啸
2023-03-14

我有Inno Setup 6.1.2安装脚本,其中版本main.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,这很好。为了使其完美,我想以带有零填充组件的formapp.1.00.002.x64.exe结束。

我在文档中没有找到类似于PadLeft的内容。不幸的是,我也无法理解如何在这种情况下使用我自己的Pascal函数。我可以在code部分为此定义一个函数吗?

共有1个答案

冀俊良
2023-03-14

在Inno Setup预处理器中填充数字的快速而肮脏的解决方案:

#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 脚本代码(像这个)在这里没有帮助,因为它在安装时运行,而你在编译时需要它。所以预处理器是唯一的方法。

 类似资料:
  • 我想首先将现有文件“我的程序旧”重命名为“我的程序v2”,但前提是“我的程序v2”还不存在。 然后我想将“我的程序”重命名为“我的程序旧”,但前提是“我的程序旧”不存在。 然后我想从安装程序安装‘我的程序',但前提是’我的程序‘还不存在。 我将非常感谢任何指导!

  • 问题内容: 如何从文本文件填充? 问题答案: 非常模糊的问题。您是说要每行输入一个吗?如果是这样,则要使用BufferedReader之类的东西,请读取所有行,并将它们保存为String数组。创建一个新的JComboBox传入该String构造函数。

  • 我有Inno安装程序(在我之前写的),它提取了一组VSTO文件并开始安装VSTO MS Office插件。它有一个问题,当将VSTO文件提取到临时文件夹并启动时,它会立即显示完成按钮。如果用户单击它,临时文件将被删除,并在中开始实际安装VSTO插件,然后导致“文件未找到”错误。我应该解决这个问题(理想情况下,只有当它生成的完成执行时,Inno安装程序中的完成按钮才会出现)。 VSTO包本身(“应用

  • 在我的< code>[Files]部分中,我有以下内容: 在部分我有: 最后,在部分,我有: 现在,在这个版本的程序中,我已经将这两个DLL文件的功能合并到另一组DLL文件中: 因此, DLL 文件。现在,我知道如果它们存在,我可以简单地删除它们: 但据我所知,这不会像 中那样触发 DLL 文件的注销。 我该怎么做?在安装过程中删除并注销DLL文件(如果存在)?

  • 驱动程序的fire中有一个bug。使用chrome驱动解决了这个问题。 代码 我试过联系搜索。clear()和click()方法,但输入仍然为空。代码来自https://web.whatsapp.com/登录后会出现一个名为“搜索”或“开始新聊天”的字段。我想在该字段中输入文本。