2017-01-15 4 views
2

Я хотел бы сделать копию/установку условного файла, в зависимости от того, что находится внутри данного .cfg (текстового) файла по адресу {app}. Этот файл содержит URL-адрес внутри, этот URL-адрес выглядит так: «update.website.eu» или «update.website.com» или «update.worldoftanks.kr», но также может быть «update.worldoftanks.kr/ »и так далее, есть несколько возможностей. Поэтому мне нужен механизм, который будет обнаруживать URL-адрес и позволять мне устанавливать разные файлы для каждого обнаруженного URL-адреса.Inno Setup Conditional File Copy

В настоящее время у меня есть что-то вроде этого в качестве примера, но с тех пор, как я не продвинутый программист (я знаю некоторые основы только более или менее), мне нужно иметь хороший пример.

if (CurPageID = wpPreparing) then 
begin 
    client_ver := 
    LoadValueFromXML(ExpandConstant('{app}\file.cfg'), '//info/patch_info_urls/item'); 
    if client_ver = 'http://update.website.eu/' then 
    if MsgBox(ExpandConstant('{cm:AreYouSure}'),mbConfirmation,MB_OKCANCEL) = IDCANCEL then 
     Result:=False; 
    end; 

Пример file.cfg:

<?xml version="1.0" encoding="UTF-8"?> 
<info version="3.1"> 
    <!-- ... --> 
    <patch_info_urls> 
     <item>http://update.website.eu/</item> 
    </patch_info_urls> 
</info> 

Во всяком случае я хотел бы использовать его в [Files] разделе, является то, что возможно, чтобы вызвать ее оттуда, чтобы вызвать процедуру или что-то в [Files]?

Я сделал несколько попыток, но он всегда дает мне некоторую ошибку несоответствия во время компиляции.

пс. проигнорируйте это MsgBox, это просто пример, я не буду показывать ничего подобного. Мне нужно только копировать файлы.

ответ

2

Используйте Check parameter:

[Files] 
Source: "file_for_url1"; DestDir: "{app}"; Check: IsURl1 
Source: "file_for_url2"; DestDir: "{app}"; Check: IsURl2 

[Code] 

var 
    ClientVer: string; 

procedure CurStepChanged(CurStep: TSetupStep); 
begin 
    if CurStep = ssInstall then 
    begin 
    ClientVer := 
     LoadValueFromXML(ExpandConstant('{app}\file.cfg'), '//info/patch_info_urls/item'); 
    Log(Format('Client version is %s', [ClientVer])); 
    end; 
end; 

function IsUrl1: Boolean; 
begin 
    Result := (ClientVer = 'http://update.website.eu/'); 
end; 

function IsUrl2: Boolean; 
begin 
    Result := (ClientVer = 'http://update.website.com/'); 
end; 
+0

Спасибо. Я попытался реализовать это, но не могу передать компиляцию. Это дает мне ошибку «Идентификатор ожидаемого» для столбца 1, который в этом случае является функцией IsUrl1. Я использую версию unicode, если это имеет значение. Я также попытался изменить строку на ansistring, но ошибка все еще существует. –

+0

Что вы подразумеваете под "column one"? На какой строке вы получаете ошибку? –

+0

Если я использую код из своего ответа, как есть, я не получаю никакой ошибки (конечно, если функция «LoadValueFromXML» определена до моего кода). Использование Inno Setup 5.5.9 Unicode. –