20

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

我正在寻找类似的东西

MyString := ExpandConstant('{AppName}');

except{AppName}不是一个定义的常量。有什么方法可以查询该[Setup]部分中定义的参数吗?

4

2 回答 2

24

受到克雷格回答的启发,我正在查看 Inno Setup Preprocessor 文档(在 ISTool 中,据我所知,在网上不可用),并SetupSetting在预处理器中遇到了该功能。

它可以这样使用:

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

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

于 2009-12-18T06:40:41.777 回答
16

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

定义常数:

#define AppName "Excellent Foo App"

在 中使用常量[Setup]

AppName={#AppName}

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

MyString := {#AppName}

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

于 2009-12-18T04:54:44.330 回答