我正在使用InnoSetup创建安装程序,并在[Code]
部分编写一些自定义处理程序。在其中一个处理程序中,我希望能够检索AppName
部分中定义的[Setup]
(或者可能是其他参数的值)的值。有没有办法让我这样做?我看过documentation,但我没有找到任何可以让我这样做的东西。我们的InnoSetup文件实际上是由我们的构建过程生成的,它将所有程序和程序特定的片段拼接在一起,因此必须在代码中为每个程序定义常量是不方便的。有没有方便的方法呢?
我正在寻找像
这样的东西MyString := ExpandConstant('{AppName}');
除{AppName}
不是定义的常量。有没有办法查询[Setup]
部分中定义的参数?
答案 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也发现了这种方法,并且更好。