我可以 select 在 Inno Setup 安装程序中使用脚本和命令行参数的 #include 路径吗?
Can I select an #include path using a script and command line args in an Inno Setup installer?
因此,问题出现在我有许多安装的地方,其中大部分内容都是相同的,当然除了安装中的文件。我有一套不同的包含文件。
所以我想,"Hey, lets simply add a command line argument to specify what file to include." 我可以从 Pascal 代码中的命令行参数中获取信息。
当我尝试使用 #include
中的信息时出现问题。预处理器似乎对 Pascal 脚本一无所知。这是有道理的,除了我想让它知道。例如,我不能这样做:
[Files]
#include "{code:GetMyArgument}"
或者这个:
[Files]
#include {param:foo|bar}
所以真正的问题是:如何设置 #include
以包含我在命令行参数中设置的路径文件?或其他一些动态方法......我能想到一个。我只是不喜欢我的方式:我不喜欢为此移动文件或动态更改文件内容的想法,我认为 my/this/these 解决方案有味道。有没有更好的方法?
我使用的是 Inno Setup 5.5.6(u) 版。
只需使用预处理器变量:
#include IncludePath
并在编译器的命令行中指定它的值:
ISCC.exe Example1.iss /DIncludePath=Other.iss
/D
switch的含义:
/D<name>[=<value>] Emulate #define public <name> <value>
如果您使用的 Inno Setup IDE 不支持设置编译器的命令行参数(例如 Inno Script Studio),您可以将包含的脚本的文件名基于某些安装程序的选项,例如 AppId
、AppName
、OutputBaseFilename
等
例如,对于基于 AppName
的名称,使用:
#include SetupSetting("AppName") + ".iss"
请注意,只有当 #include
指令和对 SetupSetting
preprocessor function 的调用位于相应的 [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]
部分以及其他指令和文件。
因此,问题出现在我有许多安装的地方,其中大部分内容都是相同的,当然除了安装中的文件。我有一套不同的包含文件。
所以我想,"Hey, lets simply add a command line argument to specify what file to include." 我可以从 Pascal 代码中的命令行参数中获取信息。
当我尝试使用 #include
中的信息时出现问题。预处理器似乎对 Pascal 脚本一无所知。这是有道理的,除了我想让它知道。例如,我不能这样做:
[Files]
#include "{code:GetMyArgument}"
或者这个:
[Files]
#include {param:foo|bar}
所以真正的问题是:如何设置 #include
以包含我在命令行参数中设置的路径文件?或其他一些动态方法......我能想到一个。我只是不喜欢我的方式:我不喜欢为此移动文件或动态更改文件内容的想法,我认为 my/this/these 解决方案有味道。有没有更好的方法?
我使用的是 Inno Setup 5.5.6(u) 版。
只需使用预处理器变量:
#include IncludePath
并在编译器的命令行中指定它的值:
ISCC.exe Example1.iss /DIncludePath=Other.iss
/D
switch的含义:
/D<name>[=<value>] Emulate #define public <name> <value>
如果您使用的 Inno Setup IDE 不支持设置编译器的命令行参数(例如 Inno Script Studio),您可以将包含的脚本的文件名基于某些安装程序的选项,例如 AppId
、AppName
、OutputBaseFilename
等
例如,对于基于 AppName
的名称,使用:
#include SetupSetting("AppName") + ".iss"
请注意,只有当 #include
指令和对 SetupSetting
preprocessor function 的调用位于相应的 [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]
部分以及其他指令和文件。