我使用maven,我有一个版本为X.Y.Z-SNAPSHOT的maven项目,我使用maven-nsis-plugin。因为版本格式为X.Y.Z-SNAPSHOT,所以我必须删除此后缀并用0重新命名。
maven插件maven-nsis-plugin生成一个project.nsh:
!define PROJECT_VERSION "4.23.9-SNAPSHOT"
在我的setup.nsi中使用:
!include target\project.nsh
Section VersionReplace
Push "${PROJECT_VERSION}"
Push "-SNAPSHOT"
Push "0"
Call StrRep
Pop $0
!define VERSION_SHORT $0
SectionEnd
Name "Installer ${VERSION_SHORT}"
(...)
VIProductVersion ${VERSION_SHORT}
问题:在控制台中,我可以看到:
Name: "Installer $0"
(...)
VIAddVersionKey: "ProductVersion" "$0"
所以$ 0不会被替换。 我做错了什么?
使用的替换功能:StrRep
答案 0 :(得分:1)
这可以使用!searchreplace命令完成,该命令在编译时运行
!searchreplace PROJECT_VERSION_SHORT ${PROJECT_VERSION} "-SNAPSHOT" ".0"
答案 1 :(得分:0)
Name
和VIProductVersion
是安装程序属性,在编译时在创建.exe
StrRep
函数将在传入VersionReplace
部分时在运行时调用,更改Name
或VIProductVersion
为时已晚。
顺便说一句:如果你想在运行时定义一些值,就像你的!define VERSION_SHORT $0
语句一样,用Var
语句创建一个变量并修改变量(用StrCpy
)。 !define
是在编译期间定义的字符串替换,无法更改。您实际写的是VERSION_SHORT
是$0
的别名。