因此,当我进行了多次安装时,问题就出现了,其中除了安装中的文件之外,大多数内容都是相同的。我有一套不同的包含文件。
所以我想,“嘿,让我们简单地添加一个命令行参数来指定要包含的文件。”我可以从 Pascal 代码中的命令行参数获取信息。
当我尝试使用
#include
中的信息时,问题就出现了。预处理器似乎对 Pascal 脚本一无所知。这是有道理的,只是我想让它知道。例如,我不能这样做:
[Files]
#include "{code:GetMyArgument}"
或者这个:
[Files]
#include {param:foo|bar}
所以问题确实是:如何设置
#include
来包含我在命令行参数中设置的路径文件?或者其他一些动态方法......我能想到一个。我只是不喜欢我的方式:我不喜欢为此移动文件或动态更改文件内容的想法,我认为我的/这个/这些解决方案有味道。有更好的办法吗?
我使用的是 Inno Setup 5.5.6(u) 版本。
只需使用预处理器变量:
#include IncludePath
并在编译器的命令行上指定其值:
ISCC.exe Example1.iss /DIncludePath=Other.iss
/D
开关的含义:
/D<name>[=<value>] Emulate #define public <name> <value>
如果您使用的 Inno Setup IDE 不支持设置编译器的命令行参数(如 Inno Script Studio),您可以将包含的脚本的文件名基于某些安装程序的选项,如
AppId
、AppName
、OutputBaseFilename
等等
例如,对于基于
AppName
的名称,请使用:
#include SetupSetting("AppName") + ".iss"
请注意,仅当
#include
指令(调用 SetupSetting
预处理器函数)位于相应的 [Setup]
节指令之后时才有效。
另一种选择是反转包含。
主要
.iss
是特定于项目的,它包括共享 .iss
:
特定于项目
.iss
:
; Project-specific settings
[Setup]
AppId=id
AppName=name
[Files]
; Project specific files
; Include shared script
#include "shared.iss"
请注意,如果这些部分重复,也完全没问题。因此
shared.iss
可以再次包含 [Setup]
和 [Files]
部分以及其他指令和文件。