如何将文件的内容加载到NSIS中的变量/ define中?

时间:2013-03-26 08:08:22

标签: installer nsis

我有一个文件'releaseVersionNumber.txt',我在构建过程中读到了该文件;目前它是我的Mac版本的读取,但我想在我的Windows NSIS版本中阅读它以减少编辑位置的数量(重复是邪恶的)......

所以我试图取代:

!define VERSION 1.2.3

类似

FileOpen $4 "..\releaseVersionNumber.txt" r
FileRead $4 $1
FileClose $4
!define VERSION ${1}

但是我收到错误命令FileOpen在Section或Function 之外无效。将它包装在函数中我生成命令调用在Section或Function 之外无效,所以我似乎无法在安装程序设置中执行此操作,仅在运行时。

有没有办法实现我的目标?!

1 个答案:

答案 0 :(得分:13)

所有以!开头的命令都是compile time commands,因此它们会在编译时处理,远在程序运行之前。

  • 您可以尝试将VERSION声明为变量而不是定义:

    Var VERSION
    FileOpen $4 "..\releaseVersionNumber.txt" r
    FileRead $4 $VERSION
    FileClose $4
    
  • 如果您需要VERSION作为定义,则可以尝试!define中的/file参数。

    !define /file VERSION "..\releaseVersionNumber.txt"
    
  • 我喜欢只有define:

    version.nsh文件
    !define VERSION "2013-03-25:16:23:50"
    

    然后,我把它包括在内:

    !include /NONFATAL version.nsh
    # Default value in case no version.nsh is present
    !ifndef VERSION
        !define /date VERSION "%Y-%m-%d %H:%M:%S"
    !endif