在 Inno Setup 脚本中使用 Inno Setup 编译器命令行上指定的路径/值

问题描述 投票:0回答:2

我想将路径(通过命令行 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"
inno-setup
2个回答
2
投票

首先,

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"

1
投票

来自“Inno Setup Preprocessor:命令行编译器执行”的文档我可以使用

"MyCustomParam"
选项定义一个名为
/D
的命令行参数,如下所示:

.\ISCC.exe /DMyCustomParam=MyParamValue "MySetupScript.iss"

然后我编写了如下所示的设置脚本,它获取为命令行上的参数定义的值:

[Setup]
AppName={#MyCustomParam}
© www.soinside.com 2019 - 2024. All rights reserved.