我有一个带有一些标签的XML文件,比如DLL文件的名称。
我想要Inno Setup脚本代码只安装XML文件中声明的文件(我可以从XML文件中读取)。
我的问题是:如何嵌入所有DLL文件,根据XML文件,我只安装所需的文件。
这个想法我每个版本只需要一个XML,而且我从不更改DLL文件。
答案 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