将版本号传递给Inno Setup编译器

JNH*_*JNH 1 inno-setup

我希望使用命令行构建Inno Setup脚本,并且希望将产品版本号作为参数传递。我正在尝试像这样实现它:

[setup]
VersionInfoVersion={param:version|0.0.0.0}
Run Code Online (Sandbox Code Playgroud)

但是,编译器会通知我这对于该指令无效。我已阅读关于如何在自定义参数传递的命令行后,并假设我应该能够在像经过:

compil32 /cc "c:\isetup\samples\my script.iss" /version=1.0.0.0
Run Code Online (Sandbox Code Playgroud)

我也尝试了这篇文章中的建议,并尝试执行以下操作:

#define PathToMyBinary "C:\bin\x64\Release"
#define ApplicationVersion GetFileVersion('#PathToMyBinary\MyBinary.dll')

VersionInfoVersion={#ApplicationVersion}
Run Code Online (Sandbox Code Playgroud)

但是它似乎没有返回任何东西。这两种方法对我来说似乎都是有效的,所以我希望有人可以解释我要去哪里。

Mar*_*ryl 6

假设您通过预处理器变量定义版本,例如:

[Setup]
VersionInfoVersion={#ApplicationVersion}
Run Code Online (Sandbox Code Playgroud)

要在命令行上设置版本,您必须使用ISCC.exe命令行编译器及其/D开关

ISCC.exe Example1.iss /DApplicationVersion=1.2.3.4
Run Code Online (Sandbox Code Playgroud)

要从二进制文件读取版本,请正确使用GetFileVersion预处理器功能

但是您组成路径的语法是错误的。
正确的语法是PathToMyBinary + '\MyBinary.dll',例如:

#define PathToMyBinary "C:\bin\x64\Release"
#define ApplicationVersion GetFileVersion(PathToMyBinary + '\MyBinary.dll')
Run Code Online (Sandbox Code Playgroud)

请参阅Inno Setup预处理程序:表达式语法

  • 我现在正在使用预处理器函数 GetFileVersion 设置版本,现在我使用了正确的语法,它正在工作,谢谢。 (2认同)