Inno Setup无法使用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

可以在here上看到完整的appveyor控制台输出包括一些实用信息)。

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

可以看到here的完整传送器YML。

为什么会在本地运行但在appveyor上失败?

解决方法

尽管您有其他主张,但您仍在使用5.5.9:

编译器版本:Inno Setup 5.5.9(u)

仅从issue thread开始支持 104.192.143.1 bitbucket.org 104.192.143.2 bitbucket.org 18.205.93.0 bitbucket.org 指令中的通配符。

尽管您的脚本似乎已安装6.0.5。由于它是不同的主要版本,因此它的路径不同,Wizard*ImageFile而不是C:\Program Files (x86)\Inno Setup 6\Inno Setup 5.6,这可能是为什么当需要运行构建脚本时,会执行5.5.9的原因。尝试使用C:\Program Files (x86)\Inno Setup 5\的完整路径来确保您正在运行正确的Inno Setup主版本。