如何在NSIS中使用字符串替换

时间:2012-11-22 11:44:14

标签: maven nsis

我使用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

2 个答案:

答案 0 :(得分:1)

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

!searchreplace PROJECT_VERSION_SHORT ${PROJECT_VERSION} "-SNAPSHOT" ".0"

答案 1 :(得分:0)

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

时会考虑这些属性

StrRep函数将在传入VersionReplace部分时在运行时调用,更改NameVIProductVersion为时已晚。

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