在Inno Setup中,我有一个主要脚本是“核心系统”,这意味着我们的软件完全需要安装/运行所需的一切。另外,我正在为每个主要功能编写脚本文件,这些功能可能会也可能不会编译到安装程序中。在主脚本文件的顶部,我包含其他脚本文件...
#include "AdditionalOption.iss"
#include "AnotherOption.iss"
编译此主脚本时,编辑人员可以选择是否在安装程序中编译这些特定选项(由于各种原因而备用文件大小)。
当主脚本中的特定代码依赖于其中一个附加脚本中的某些内容时,会出现问题。例如......
procedure InitializeWizard();
begin
//Creates custom wizard page only if "AdditionalOption.iss" is compiled
CreatePageForAdditionalOption;
//Creates custom wizard page only if "AnotherOption.iss" is compiled
CreatePageForAnotherOption;
end;
InitializeWizard
只能定义一次,但我需要有条件地调用代码,具体取决于是否包含其他脚本。这些过程驻留在相应的脚本文件中,因此如果用户排除了其他脚本文件,它们当然不存在。
在Delphi中,我可以使用这样的条件:
{$DEFINE ADD_OPT}
{$DEFINE ANO_OPT}
procedure InitializeWizard();
begin
{$IFDEF ADD_OPT}
CreatePageForAdditionalOption;
{$ENDIF}
{$IFDEF ANO_OPT}
CreatePageForAnotherOption;
{$ENDIF}
end;
当然这不是Delphi。我怎么能在Inno Setup中做这样的事情?
答案 0 :(得分:5)
Inno Setup有一个预处理器,可让您使用#ifdef
,#else
和#endif
,您可以通过iscc.exe
/D
命令行设置PARAM(一个或多个)。您可以定义多个#ifdef
并通过多个/D
设置它们。
; Command line param => /DADD_OPT
#ifdef ADD_OPT
...
#else
...
#endif
我用它们来覆盖默认值:
; Command line param => /DENVIRONMENT=Prod
#ifdef ENVIRONMENT
#define Environment ENVIRONMENT
#else
#define Environment "Beta"
#endif
答案 1 :(得分:2)
稍微挖掘一下,我想出来了。就像我上面的例子......
{$DEFINE ADD_OPT}
{$DEFINE ANO_OPT}
procedure InitializeWizard();
begin
{$IFDEF ADD_OPT}
CreatePageForAdditionalOption;
{$ENDIF}
{$IFDEF ANO_OPT}
CreatePageForAnotherOption;
{$ENDIF}
end;
它可以在Inno Setup中复制,就像这样......
#define Public ADD_OPT
#define Public ANO_OPT
procedure InitializeWizard();
begin
#ifdef ADD_OPT
CreatePageForAdditionalOption;
#endif
#ifdef ANO_OPT
CreatePageForAnotherOption;
#endif
end;