InnoSetup:在 [Code] 部分获取 AppName

Posted

技术标签:

【中文标题】InnoSetup:在 [Code] 部分获取 AppName【英文标题】:InnoSetup: Getting AppName in [Code] section 【发布时间】:2010-12-27 22:10:44 【问题描述】:

我正在使用InnoSetup 创建一个安装程序,并在[Code] 部分编写一些自定义处理程序。在其中一个处理程序中,我希望能够检索在[Setup] 部分中定义的AppName 的值(或者,可能是其他参数的值)。我有办法做到这一点吗?我查看了documentation,但我没有找到任何可以让我这样做的东西。我们的 InnoSetup 文件实际上是由我们的构建过程生成的,它将我们所有程序之间共有的片段和特定于程序的片段拼接在一起,因此必须在代码中为每个程序定义常量会很不方便。有什么方便的方法吗?

我正在寻找类似的东西

MyString := ExpandConstant('AppName');

除了AppName 不是定义的常量。有什么方法可以查询[Setup] 部分中定义的参数吗?

【问题讨论】:

【参考方案1】:

受 Craig 的回答启发,我查看了 Inno Setup Preprocessor 文档(在 ISTool 中,据我所知,在网上不可用),并在预处理器中发现了 SetupSetting 函数。

可以这样使用:

MyString := '#SetupSetting("AppName")';

只要[Setup]部分出现在使用它的地方之前(ISPP似乎只有一次通过),并且包含AppName的定义,这将给出我想要的结果,而不必为我们要提取的每个设置定义一个额外的宏。

【讨论】:

我只是在查看我的一个脚本,发现我用过这个(实际上我用过#emit SetupSetting("AppId"),但足够接近)。我来更新我的答案,但我看到你已经打败了我!【参考方案2】:

它是构建时间常数,而不是安装时间值。所以你可以使用Inno Setup Preprocessor 插件来定义这样的常量。 (您可以通过QuickStart pack 轻松安装)。

定义常量:

#define AppName "Excellent Foo App"

使用[Setup]中的常量:

AppName=#AppName

在 Pascal 代码中,我不完全确定语法,但类似于:

MyString := #AppName

更新:我意识到我的一个脚本使用了#emit SetupSetting("AppId"),这更容易。 Brian's solution也发现了这个方法,而且更好。

【讨论】:

嗯。我宁愿不必将每个 AppName 定义为宏,然后使用该宏在每个程序中定义真正的 AppName。但这是一个开始。

以上是关于InnoSetup:在 [Code] 部分获取 AppName的主要内容,如果未能解决你的问题,请参考以下文章

inno setup静默安装的问题

inno setup 怎样检测程序已安装

innosetup解压进度

Inno Setup 系列之先卸载之后再安装

猎豹MFC--InnoSetup制作安装程序

如何在 Inno Setup 中获取已执行程序的输出?