Inno设置条件文件复制

时间:2017-01-15 10:11:31

标签: inno-setup

我想进行条件文件复制/安装,具体取决于{app}位置内给定.cfg(文本)文件的内容。该文件包含一个URL,该URL如下所示:“update.website.eu”,或“update.website.com”,或“update.worldoftanks.kr”,但也可以是“update.worldoftanks.kr/” “等等,有一些可能性。所以我需要一种能够检测网址的机制,让我为每个检测到的网址安装不同的文件。

目前我有这样的例子,但是因为我不是高级程序员(我只知道一些基础知识或多或少),我需要有一个很好的例子。

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]中调用某个程序?

我做了很少的尝试,但它总是在编译过程中给我一些不匹配的错误。

PS。忽略MsgBox,这只是一个例子,我不会显示那样的东西。我只需要复制文件。

1 个答案:

答案 0 :(得分: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;