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

How to install only file based on condition (external configuration file) in Inno Setup

我有一个 XML 文件,其中包含一些标签,例如 DLL 文件的名称。

我想要一个 Inno Setup 脚本代码来仅安装 XML 文件中规定的文件(我可以从 XML 文件中读取)。

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

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

使用 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;

如果它更适合您的逻辑,您也可以使用单个 "check" 函数并使用 CurrentFileName 魔术变量,以测试正在安装的文件是否是您想要的文件真正安装:

[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