繁体   English   中英

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

[英]How to use String Replace in NSIS

我使用maven,我有一个版本为XYZ-SNAPSHOT的maven项目,并且使用了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

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

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

NameVIProductVersion是安装程序属性,在创建.exe时会在编译时将其考虑在内

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM