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的主要内容,如果未能解决你的问题,请参考以下文章