Inno设置 - 替换子安装程序

时间:2017-01-10 11:58:58

标签: inno-setup

在Inno Setup脚本中,我运行一个安装自定义VB应用程序的VB可执行程序(这里没有问题)。

但是一旦完成,VB设置完成后,我需要复制一些文件来覆盖VB安装程序可执行文件创建的文件和文件夹。 这些'已更新'文件已由[Files]部分中的Inno Setup放置在其临时文件夹中,并且已成功部署到该文件夹​​中的目标PC。

问题在于,无论我尝试过什么,似乎都会忽略FileCopy命令。

所以我需要的步骤如下:

//复制必须运行的VB安装程序可执行文件并复制将在VB安装程序运行后更新VB设置的文件

[Files]
    Source: "C:\##Deploy\Titan\LABORATORY\BTLABSETUP.msi"   ; DestDir: "{app}\Temp"  ; Components: Laboratory ; Permissions: users-full
    Source: "C:\##Deploy\Titan\LABORATORY\BetolinkLAB\*.*"   ; DestDir: "{app}\Temp" ; Components: Laboratory ; Permissions: users-full ;  Flags: ignoreversion recursesubdirs 

然后我运行VB Setup(运行正常)

[Run]
    Filename: "msiexec.exe"; Parameters: "/i ""{app}\Temp\BTLABSETUP.msi" ; AfterInstall: CopyAllFiles

在VB可执行文件之后,我需要复制并覆盖文件。

所以我现在需要的是复制目标计算机,已复制到Temp文件夹的文件和文件夹,以替换VB可执行文件创建的同一目录结构中的文件。

因此,例如,从temp \ Configuration文件夹中获取所有文件,并覆盖{app} \ Configuration文件夹中现有的相同文件。

这就是为什么我在一个示例中使用了我发现的postinstall:调用了CopyAllFiles,这是我CopyAllFiles的代码

procedure CopyAllFiles;
begin

    MsgBox('About to Copy the files', mbInformation, MB_OK);

    FileCopy('{app}\Temp\*.*'                            , '{app}\*.*'                          , False)
    FileCopy('{app}\Temp\Configuration\*.*'              , '{app}\Configuration\*.*'            , False)
    FileCopy('{app}\Temp\Configuration\Korinthos\*.*'    , '{app}\Configuration\Korinthos\*.*'  , False)
    FileCopy('{app}\Temp\Configuration\Metamorfosi\*.*'  , '{app}\Configuration\Metamorfosi\*.*', False)
    FileCopy('{app}\Temp\Manual\*.*'                     , '{app}\Manual\*.*'                   , False)
    FileCopy('{app}\Temp\ScriptsUpload\*.*'              , '{app}\ScriptsUpload\*.*'            , False)
    FileCopy('{app}\Temp\Temp\*.*'                       , '{app}\Temp\*.*'                     , False)
    FileCopy('{app}\Temp\Templates\*.*'                  , '{app}\Templates\*.*'                , False)
    FileCopy('{app}\Temp\Temporary\*.*'                  , '{app}\Temporary\*.*'                , False)
end;

Temp源中的所有文件和文件夹都在那里,我已经检查过它们,没有遗漏任何东西。 我也尝试过没有通配符的目标,也没有用,在CurStepChanged尝试但没有更好。

从弹出的消息框中,我知道代码在VB可执行文件之后进入CopyAllFiles过程,但什么也没发生。

任何帮助或解决方法都非常受欢迎,需要为客户准备此设置并且已经很晚并且卡住...

谢谢你 雅尼斯

1 个答案:

答案 0 :(得分:1)

FileCopy只能复制一个文件。

要复制整个目录树,请参阅
Inno Setup: copy folder, subfolders and files recursively in Code section

虽然在您的情况下,在.msi部分处理之前,以编程方式安装[Files]会更合适(并且更容易实现)吗?然后让Files部分直接将文件安装到{app}