InnoSetup:在[Code]部分获取AppName

时间:2009-12-18 03:49:10

标签: installer inno-setup pascalscript

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

我正在寻找像

这样的东西
MyString := ExpandConstant('{AppName}');

{AppName}不是定义的常量。有没有办法查询[Setup]部分中定义的参数?

2 个答案:

答案 0 :(得分:20)

受Craig的回答启发,我正在查看Inno Setup预处理器文档(在ISTool中,据我所见,在线无法使用),并且遇到了预处理器中的SetupSetting函数。

可以这样使用:

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

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

答案 1 :(得分:14)

它是构建时常量,而不是安装时值。因此,您可以使用Inno Setup Preprocessor加载项来定义此类常量。 (您可以通过QuickStart pack轻松安装。)

定义常量:

#define AppName "Excellent Foo App"

使用[Setup]中的常量:

AppName={#AppName}

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

MyString := {#AppName}

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