簡體   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