InnoSetup:在[Code]部分获取AppName

Bri*_*ell 19 installer inno-setup pascalscript

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

我正在寻找类似的东西

MyString := ExpandConstant('{AppName}');
Run Code Online (Sandbox Code Playgroud)

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

Bri*_*ell 21

受到Craig的回答的启发,我正在查看Inno Setup预处理器文档(在ISTool中,据我所见,在网上不可用),并且SetupSetting在预处理器中遇到了该函数.

它可以这样使用:

MyString := '{#SetupSetting("AppName")}';
Run Code Online (Sandbox Code Playgroud)

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

  • {#是{#emit的简写 (5认同)

Cra*_*een 15

它是构建时常量,而不是安装时值.因此,您可以使用Inno Setup Preprocessor附件来定义此类常量.(您可以通过QuickStart包轻松安装).

定义常量:

#define AppName "Excellent Foo App"
Run Code Online (Sandbox Code Playgroud)

使用常量[Setup]:

AppName={#AppName}
Run Code Online (Sandbox Code Playgroud)

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

MyString := {#AppName}
Run Code Online (Sandbox Code Playgroud)

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