2

我使用 maven,我有一个版本为 XYZ-SNAPSHOT 的 maven-project,我使用maven-nsis-plugin。因为版本的格式是 XYZ-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

4

2 回答 2

1

这可以使用!searchreplace命令完成,该命令在编译时运行

!searchreplace PROJECT_VERSION_SHORT ${PROJECT_VERSION} "-SNAPSHOT" ".0"
于 2012-11-22T12:33:17.173 回答
0

NameVIProductVersion是在创建 .exe 时在编译时考虑的安装程序属性

StrRep函数将在运行时在传递到该部分时调用,并且更改或VersionReplace已来不及。NameVIProductVersion

顺便说一句:如果您想在运行时定义一些值,例如在您的!define VERSION_SHORT $0语句中,请使用该语句创建一个变量Var并修改该变量(使用StrCpy)。A!define是在编译期间定义的无法更改的字符串替换。您实际编写的VERSION_SHORT$0.

于 2012-11-22T12:13:56.723 回答