如何在 Inno Setup 的 [CustomMessages] 部分使用通配符?

How to use wildcards in [CustomMessages] section of Inno Setup?

为什么我不能为此使用通配符?

[CustomMessages]

; ==================================================================
; Inno Download Plugin custom messages

#include ".\idplang\Arabic.iss"
#include ".\idplang\Bulgarian.iss"
#include ".\idplang\ChineseSimplified.iss"
#include ".\idplang\Croatian.iss"
#include ".\idplang\Czech.iss"
#include ".\idplang\Danish.iss"
#include ".\idplang\Finnish.iss"
#include ".\idplang\French.iss"
#include ".\idplang\German.iss"
#include ".\idplang\Hungarian.iss"
#include ".\idplang\Italian.iss"
#include ".\idplang\Japanese.iss"
#include ".\idplang\Polish.iss"
#include ".\idplang\PortugueseBrazil.iss"
#include ".\idplang\PortuguesePortugal.iss"
#include ".\idplang\Romanian.iss"
#include ".\idplang\Russian.iss"
#include ".\idplang\Spanish.iss"
#include ".\idplang\Turkish.iss"

我试过:

#include ".\idplang\*.iss"

不喜欢:

D:\My Programs19\MeetSchedAssist\Inno\MeetSchedAssist2019_v6.iss(660,1): error : Error on line 660: [ISPP] File not found: "D:\My Programs19\MeetSchedAssist\Inno\.\idplang\*.iss".

这是我的安装程序中的另一个示例(我在 [Registry] 部分中还有另一个示例):

#include AddBackslash(SourcePath) + ".\l.afk\CustomMessagesAfrikaans.txt"
#include AddBackslash(SourcePath) + ".\l.sqi\CustomMessagesAlbanian.txt"
#include AddBackslash(SourcePath) + ".\l.ara\CustomMessagesArabic.txt"
#include AddBackslash(SourcePath) + ".\l.hye\CustomMessagesArmenian.txt"
#include AddBackslash(SourcePath) + ".\l.bgr\CustomMessagesBulgarian.txt"
#include AddBackslash(SourcePath) + ".\l.chs\CustomMessagesChineseSimplified.txt"
#include AddBackslash(SourcePath) + ".\l.hrv\CustomMessagesCroatian.txt"
#include AddBackslash(SourcePath) + ".\l.csy\CustomMessagesCzech.txt"
#include AddBackslash(SourcePath) + ".\l.dan\CustomMessagesDanish.txt"
#include AddBackslash(SourcePath) + ".\l.nld\CustomMessagesDutch.txt"
#include AddBackslash(SourcePath) + ".\l.eti\CustomMessagesEstonian.txt"
#include AddBackslash(SourcePath) + ".\l.fin\CustomMessagesFinnish.txt"
#include AddBackslash(SourcePath) + ".\l.fra\CustomMessagesFrench.txt"
#include AddBackslash(SourcePath) + ".\l.deu\CustomMessagesGerman.txt"
#include AddBackslash(SourcePath) + ".\l.ell\CustomMessagesGreek.txt"
#include AddBackslash(SourcePath) + ".\l.hin\CustomMessagesHindi.txt"
#include AddBackslash(SourcePath) + ".\l.hun\CustomMessagesHungarian.txt"
#include AddBackslash(SourcePath) + ".\l.ind\CustomMessagesIndonesian.txt"
#include AddBackslash(SourcePath) + ".\l.ita\CustomMessagesItalian.txt"
#include AddBackslash(SourcePath) + ".\l.jpn\CustomMessagesJapanese.txt"
#include AddBackslash(SourcePath) + ".\l.plk\CustomMessagesPolish.txt"
#include AddBackslash(SourcePath) + ".\l.ptb\CustomMessagesPortuguese.txt"
#include AddBackslash(SourcePath) + ".\l.ptg\CustomMessagesPortuguesePortugal.txt"
#include AddBackslash(SourcePath) + ".\l.rom\CustomMessagesRomanian.txt"
#include AddBackslash(SourcePath) + ".\l.rus\CustomMessagesRussian.txt"
#include AddBackslash(SourcePath) + ".\l.slv\CustomMessagesSlovenian.txt"
#include AddBackslash(SourcePath) + ".\l.esp\CustomMessagesSpanish.txt"
#include AddBackslash(SourcePath) + ".\l.sve\CustomMessagesSwedish.txt"
#include AddBackslash(SourcePath) + ".\l.trk\CustomMessagesTurkish.txt"
#include AddBackslash(SourcePath) + ".\l.ukr\CustomMessagesUkrainian.txt"

您不能在 #include 指令中使用通配符。

但是您可以使用这样的预处理器代码:

#define IncludeFolder ".\idplang\"

#define FindHandle
#define FindResult

#sub IncludeFoundFile
  #include IncludeFolder + FindGetFileName(FindHandle)
#endsub

#for {FindHandle = FindResult = FindFirst(IncludeFolder + "*.iss", faAnyFile); \
      FindResult; FindResult = FindNext(FindHandle)} IncludeFoundFile
#expr FindClose(FindHandle)

另一种选择是实现递归预处理器函数。但它有大小限制。但另一方面,如果您需要在别处包含另一组文件,则可以重复使用它。它使实现递归包含变得更容易:

#define IncludeFileLine(Handle) \
    !FileEof(Handle) ? FileRead(Handle) + NewLine + IncludeFileLine(Handle) : ""

#define IncludeFile(Source) \
    Local[0] = FileOpen(Source), \
    Local[1] = IncludeFileLine(Local[0]), \
    FileClose(Local[0]), \
    Local[1]

#define IncludeFileInFolder(Source, FindResult, FindHandle) \
    FindResult \
        ? \
            Local[0] = FindGetFileName(FindHandle), \
            Local[1] = Source + "\" + Local[0], \
            (Local[0] != "." && Local[0] != ".." \
                ? (DirExists(Local[1]) ? \
                      IncludeFilesInFolder(Local[1]) : IncludeFile(Local[1])) \
                : "") + \
            IncludeFileInFolder(Source, FindNext(FindHandle), FindHandle) \
        : \
            ""

#define IncludeFilesInFolder(Source) \
    Local[0] = FindFirst(Source + "\*", faAnyFile), \
    Local[1] = IncludeFileInFolder(Source, Local[0], Local[0]), \
    FindClose(Local[0]), \
    Local[1]

像这样使用它:

#emit IncludeFilesInFolder(AddBackslash(SourcePath) + "idplang")