我想将路径(通过命令行 arg
/D
传递给脚本编译器)传递给我的可执行文件,让我的脚本使用 GetFileVersion
确定应用程序版本号,但我的语法不正确。如何将参数传递给 GetFileVersion
?
错误是:输入文件中存在非法字符:'#'(0x23)
#define srcpath SOURCEPATH
#define ApplicationVersion GetFileVersion(#srcpath)//error here!!!!!!
[Setup]
AppVersion={#ApplicationVersion}
[Files]
Source: "MyDllTesting.dll"; Flags: dontcopy
Source: "{srcpath}MyApplication1.exe"; DestDir: "{app}\MyApplication1"
首先,
SOURCEPATH
是一个Inno Setup预处理器预定义变量,因此您需要为命令行“变量”使用另一个名称。我将使用SOURCE_PATH
。
此外,
GetFileVersion
已重命名为GetVersionNumbersString
,所以我也将使用新名称。
其次,正确的语法是:
#define ApplicationVersion GetVersionNumbersString(SOURCE_PATH)
(即没有哈希)
为什么没有哈希,在我的回答中已涵盖
为什么预处理器在 #include 指令中的行为与 Inno Setup 脚本的 [Files] 部分中的行为不同
虽然道理基本是一样的,但是为什么你在
SOURCEPATH
之前不使用hash呢:
#define srcpath SOURCEPATH
相反,您在
[Files]
部分条目中缺少哈希。正确的语法是:
[Files]
Source: "{#srcpath}MyApplication1.exe"; DestDir: "{app}\MyApplication1"
并且不需要定义
srcpath
变量。 SOURCE_PATH
也是可变的。所以你可以直接在任何表达式中使用它:
#define ApplicationVersion GetVersionNumbersString(SOURCE_PATH)
[Files]
Source: "{#SOURCE_PATH}MyApplication1.exe"; DestDir: "{app}\MyApplication1"
来自“Inno Setup Preprocessor:命令行编译器执行”的文档我可以使用
"MyCustomParam"
选项定义一个名为/D
的命令行参数,如下所示:
.\ISCC.exe /DMyCustomParam=MyParamValue "MySetupScript.iss"
然后我编写了如下所示的设置脚本,它获取为命令行上的参数定义的值:
[Setup]
AppName={#MyCustomParam}