Inno Setup 无法在 AppVeyor 上使用掩码找到图像文件

Inno Setup can't find image files using mask on AppVeyor

我们有一个 OSS 项目,我正在尝试升级到 Inno Setup 6.0.5。当我在本地编译构建脚本时,它按预期工作。但是,当我尝试通过 AppVeyor 构建它时,它找不到文件。我都试过了:

  1. 使用完整路径(这适用于 5.6.1):

    #define BuildDir ExtractFileDir(ExtractFileDir(SourcePath)) + "\bin\"
    #define IncludesDir SourcePath + "Includes\"
    #define GraphicsDir SourcePath + "Graphics\"
    
    ...
    
    WizardSmallImageFile={#GraphicsDir}Rubberduck.Duck.Small.55x55.bmp, \
                         {#GraphicsDir}Rubberduck.Duck.Small.64x68.bmp, \
                         {#GraphicsDir}Rubberduck.Duck.Small.83x80.bmp, \
                         {#GraphicsDir}Rubberduck.Duck.Small.92x97.bmp, \
                         {#GraphicsDir}Rubberduck.Duck.Small.110x106.bmp, \
                         {#GraphicsDir}Rubberduck.Duck.Small.119x123.bmp, \
                         {#GraphicsDir}Rubberduck.Duck.Small.138x140.bmp
    
    WizardImageFile={#GraphicsDir}Rubberduck.Duck.164x314.bmp, \
                    {#GraphicsDir}Rubberduck.Duck.192x386.bmp, \
                    {#GraphicsDir}Rubberduck.Duck.246x459.bmp, \
                    {#GraphicsDir}Rubberduck.Duck.273x556.bmp, \
                    {#GraphicsDir}Rubberduck.Duck.328x604.bmp, \
                    {#GraphicsDir}Rubberduck.Duck.355x700.bmp
    
  2. 使用通配符:

    #define BuildDir ExtractFileDir(ExtractFileDir(SourcePath)) + "\bin\"
    #define IncludesDir SourcePath + "Includes\"
    #define GraphicsDir SourcePath + "Graphics\"
    #define WizardImageFilesDir GraphicsDir + "WizardImageFiles\"
    #define WizardSmallImageFilesDir GraphicsDir + "WizardSmallImageFiles\"
    
    ...
    
    WizardSmallImageFile={#WizardSmallImageFilesDir}Rubberduck.Duck.Small.*.bmp
    WizardImageFile={#WizardImageFilesDir}Rubberduck.Duck.*.bmp
    

文件存在于预期位置,并且是有效的位图。然而,在 AppVeyor 上我们得到这个错误:

Creating output directory: C:\projects\rubberduck\Rubberduck.Deployment\InnoSetup\Installers
Reading file (LicenseFile)
Reading file (WizardImageFile)
   File: C:\projects\rubberduck\Rubberduck.Deployment\InnoSetup\Graphics\WizardImageFiles\Rubberduck.Duck.*.bmp
Error on line 81 in C:\projects\rubberduck\Rubberduck.Deployment\InnoSetup\Rubberduck.Installer.Build.iss: Could not read "C:\projects\rubberduck\Rubberduck.Deployment\InnoSetup\Graphics\WizardImageFiles\Rubberduck.Duck.*.bmp".
Error: The filename, directory name, or volume label syntax is incorrect.
Compile aborted.

我们使用 Chocolately 安装 Inno Setup。我们发现我们必须明确指定版本;否则,它将使用 5.5.9 而不是 6.0.5:

原文:

  - cinst innosetup -version 5.6.1

修改:

  - cinst innosetup --version=6.0.5

可以看到完整的 AppVeyor 控制台输出(包括几个 pragma 消息)here

可以看到完整的 ISS 构建脚本 here

可以看到完整的 Appveyor YML here

为什么它可以在本地运行但在 Appveyor 上失败?

尽管您另有声明,但您仍在使用 5.5.9:

Compiler engine version: Inno Setup 5.5.9 (u)

Wizard*ImageFile 指令中的通配符受支持,因为仅 Inno Setup 5.6

虽然你的脚本似乎安装了 6.0.5。因为它是不同的主要版本,所以它在不同的路径中,C:\Program Files (x86)\Inno Setup 6\ 而不是 C:\Program Files (x86)\Inno Setup 5\AppVeyor comes with 5.5.9 preinstalled,这可能就是为什么当时间到了 运行 构建脚本时,反而执行了 5.5.9。尝试使用 iscc 的完整路径以确保您 运行 使用正确的 Inno Setup 主要版本。