2016-09-21 88 views
1

我有一个XML文件,其中包含一些标签,如DLL文件的名称。如何在Inno Setup中仅根据条件(外部配置文件)安装文件

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

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

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

+0

请一次提出一个问题。这里至少有三个问题1)解析XML文件。 2)基于某些配置以编程方式安装DLL。 3)嵌入所有的dll文件。 –

+0

只有嵌入如何与他们合作 – user253008

+0

那么你有一个嵌入DLL的列表?或者你想从某个目录自动包含所有'* .dll',然后在安装时决定要安装哪些文件? –

回答

0

使用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魔变,进行测试,如果正在安装的文件,是要真正安装一个:

[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 
+0

这是静态代码! 但如果有超过2个dll文件,我该如何处理它? – user253008

+0

来吧,我问你,如果列表是静态的,或者如果你想嵌入所有* .dll文件。并且你回答说你有两个文件。 –

+0

查看我更新的答案。 –

相关问题