2016-09-21 5 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

Это статический код! , но если есть более двух файлов dll, как я могу с ним справиться? – user253008

+0

Давай, я спросил вас, является ли этот список статичным или если вы хотите вставить все файлы * .dll. И вы ответили, что у вас есть два файла. –

+0

См. Мой обновленный ответ. –

 Смежные вопросы

  • Нет связанных вопросов^_^