从Ant传递参数到NSIS

时间:2014-04-01 18:46:08

标签: ant nsis

我有一个现有的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 个答案:

答案 0 :(得分:1)

我遇到的问题是我的论点顺序。我的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}\*"

答案 1 :(得分:0)

Ant属性在build.xml文件之外不起作用。如果您希望在nsi文件中使用这些值,则可以创建模板文件,然后在使用nsi<filterset/>实体时将该模板文件复制到<filter/>。这将使用您指定的值替换参数:

nsi模板文件

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

然后复制nsi模板,如下所示:

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

现在,您可以使用新复制的nsi文件执行命令。确保您已定义各种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>