如何在 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")
为什么我不能为此使用通配符?
[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")