代码之家  ›  专栏  ›  技术社区  ›  codemonkey

从Ant向NSIS传递参数

  •  1
  • codemonkey  · 技术社区  · 12 年前

    我有一个现有的Ant脚本,它调用MakeNSIS并成功创建了一个安装程序文件。我希望在Ant中更改输出路径,然后传递给NSIS。目前,我已尝试通过以下方式致电NSIS:

        <exec executable="${nsis_exe.dir}/makensis.exe">
            <arg value="${installer.dir}/installer.nsi" />
            <arg value="/DTEST=myvalue"/>
            <arg value="/DBUILD_VERSION_LABEL=${build.version.label}"/>
        </exec>
    

    但我无法在nsi文件中检索此值。我不能使用 this 解决方案,因为我想在File命令中使用参数,它需要一个符号而不是变量才能正常工作。

    我在nsi文件中使用了以下内容:

    DetailPrint ${TEST}
    DetailPrint ${DTEST}
    DetailPrint ${BUILD_VERSION_LABEL}
    File /r "C:\DTU\Build\${BUILD_VERSION_LABEL}\*" 
    

    我收到的错误是:

    [exec] warning: unknown variable/constant "{TEST}" detected, ignoring (../Solution/third_party/NSIS_Build/dtu_installer.nsi:184)
    [exec] DetailPrint: "${TEST}"
    [exec] warning: unknown variable/constant "{DTEST}" detected, ignoring (../Solution/third_party/NSIS_Build/dtu_installer.nsi:185)
    [exec] DetailPrint: "${DTEST}"
    [exec] warning: unknown variable/constant "{BUILD_VERSION_LABEL}" detected, ignoring (../Solution/third_party/NSIS_Build/dtu_installer.nsi:186)
    [exec] DetailPrint: "${BUILD_VERSION_LABEL}"
    [exec] File: Returning to: "C:\DTU\Build\${BUILD_VERSION_LABEL}"
    [exec] File: "C:\DTU\Build\${BUILD_VERSION_LABEL}\*" -> no files found.
    

    你知道我能用什么吗?我做错了什么?

    2 回复  |  直到 9 年前
        1
  •  1
  •   codemonkey    12 年前

    我遇到的问题是我的论点顺序。我的ANT脚本中有以下内容:

    <exec executable="${nsis_exe.dir}/makensis.exe">
            <arg value="${installer.dir}/installer.nsi" />
            <arg value="/DTEST=myvalue"/>
            <arg value="/DBUILD_VERSION_LABEL=${build.version.label}"/>
    </exec>
    

    但显然我无法以这种方式看到nsi文件中的/D参数。如果我将其更改为nsi文件是最后一个参数,它会工作:

    <exec executable="${nsis_exe.dir}/makensis.exe">
            <arg value="/DTEST=myvalue"/>
            <arg value="/DBUILD_VERSION_LABEL=${build.version.label}"/>
            <arg value="${installer.dir}/installer.nsi" />
    </exec>
    

    然后我可以按原样访问nsi文件中的参数:

    DetailPrint ${TEST}
    DetailPrint ${BUILD_VERSION_LABEL}
    File /r "C:\DTU\Build\${BUILD_VERSION_LABEL}\*"
    
        2
  •  0
  •   David W.    12 年前

    蚂蚁财产在 build.xml 文件如果您希望在 nsi 文件,您可以创建一个模板文件,然后将该模板文件复制到 国家统计局 使用时 <filterset/> <filter/> 实体。这将用您指定的值替换参数:

    nsi模板文件

    DetailPrint @TEST@
    DetailPrint @DTEST@
    DetailPrint @BUILD_VERSION_LABEL@
    File /r "C:\DTU\Build\@BUILD_VERSION_LABEL@\*" 
    

    然后复制到 国家统计局 模板如下:

    <copy file="${NSI.TEMPLATE.DIR}/${NSI.TEMPLATE.FILE}"
         tofile="${NSI.DIR}/${NSI.FILE}">
         <filterset>
             <filter token="TEST"                 value="${TEST}"/>
             <filter token="DTEST"                value="${DTEST}"/>
             <filter token="BUILD_VERSION_LABEL"  value="${BUILD_VERSION_LABEL}"/>
         </filterset>
    </copy>
    

    现在,您可以使用新复制的 国家统计局 文件确保您已经定义了各种Ant财产,例如 ${TEST} ${DTEST} .


    补遗

    您可以使用 <concat/> 以生成文件。这可能更容易,因为您不需要先创建模板,然后使用 <filterset> :

    <target name="build.nsi.file">
        <concat destfile="${NSI.file}">DetailPrint ${TEST}
    DetailPrint ${DTEST}
    DetailPrint ${BUILD_VERSION_LABEL}
    File /r "C:\DTU\Build\${BUILD_VERSION_LABEL}\*"
    </concat>
    </target>
    
    推荐文章