如何在Inno Setup中根据条件(外部配置文件)仅安装文件

时间:2016-09-21 11:24:00

标签: installer inno-setup

我有一个带有一些标签的XML文件,比如DLL文件的名称。

我想要Inno Setup脚本代码只安装XML文件中声明的文件(我可以从XML文件中读取)。

我的问题是:如何嵌入所有DLL文件,根据XML文件,我只安装所需的文件。

这个想法我每个版本只需要一个XML,而且我从不更改DLL文件。

1 个答案:

答案 0 :(得分:1)

使用Check parameter以编程方式确定是否应安装某个文件:

[Files]
Source: "Dll1.dll"; DestDir: "{app}"; Check: ShouldInstallDll1
Source: "Dll2.dll"; DestDir: "{app}"; Check: ShouldInstallDll2

[Code]

function ShouldInstallDll1: Boolean;
begin
  Result := ???;
end;

function ShouldInstallDll2: Boolean;
begin
  Result := ???;
end;

如果它更适合您的逻辑,您也可以使用单个"检查"函数并使用CurrentFileName magic变量来测试,如果要安装的文件是您要真正安装的文件:

[Files]
Source: "Dll1.dll"; DestDir: "{app}"; Check: ShouldInstallDll
Source: "Dll2.dll"; DestDir: "{app}"; Check: ShouldInstallDll

[Code]

var
  FileToInstall: string;

function InitializeSetup(): Boolean;
begin
  FileToInstall := ??? { 'Dll1.dll' or 'Dll2.dll' based on the XML file }
  Result := True;
end;

function ShouldInstallDll: Boolean;
var
  Name: string;
begin
  Name := ExtractFileName(CurrentFileName);
  Result := (CompareText(Name, FileToInstall) = 0);
end;

即使使用通配符打包文件,也可以使用后一种方法:

[Files]
Source: "*.dll"; DestDir: "{app}"; Check: ShouldInstallDll