Windows 10 NSIS 脚本版本字符串操作

Windows 10 NSIS script Version string Manipulation

我正在尝试让我的 NSIS 安装程序需要设置以下项目。但是,版本号必须采用 X.X.X.X 格式(不允许使用破折号)。我的版本号目前以 X.X.X-rXXXX 的形式传递给我,我如何让 nsis 将形式为 X.X.X-rXXXX 的版本号转换为 nsis 要求的形式 X.X.X.X ?

VIProductVersion "3.6.0.rXXXXX" 
VIAddVersionKey "ProductName?" "Witchcraft" 
VIAddVersionKey "CompanyName?" "Witchcraft, LLC" 
VIAddVersionKey "LegalCopyright?" "Copyright (c) 2015 Witchcraft, LLC" 
VIAddVersionKey "FileDescription?" "Witchcraft" 
VIAddVersionKey "FileVersion?" "3.6.0.0" 
VIAddVersionKey "ProductVersion?" "3.6.0.0" 

首先,我将解释 X.X.X.X 限制的来源。 VIProductVersion属性在版本信息资源的VS_FIXEDFILEINFO块中设置版本号,必须是4个16位数字。

VIAddVersionKey 添加一个字符串,名称和值可以是任何你想要的,但有一些你可能想要包含的 Microsoft 定义的名称(它们在 NSIS 帮助文件中列出)。

您可以使用 !searchreplace!searchparse 预处理器指令在编译时修改字符串:

!define VERSION "3.6.0-r12345" # This could be passed in with 'makensis /DVERSION=3.6.0-r12345 setup.nsi' etc

!searchreplace /ignorecase VERSION_NUMBERSONLY "${VERSION}" "r" ""
!searchreplace /ignorecase VERSION_NUMBERSONLY "${VERSION_NUMBERSONLY}" "-" "."

VIProductVersion "${VERSION_NUMBERSONLY}"
VIAddVersionKey "FileVersion" "${VERSION}" 
VIAddVersionKey "ProductVersion" "${VERSION}"