我有一个安装NSIS的安装程序,我正在更新。在几个点上,安装程序需要通过替换配置文件中的路径或值来配置程序包。这些配置文件中的占位符由我正在使用的任何部署工具替换(NSIS针对此特定情况)。
脚本主要是PHP脚本,用于执行一些在NSIS中非常复杂的简单任务。出于某种原因,虽然我继续让我的PHP脚本自己替换占位符,而不是在NSIS脚本中进行,这是不对的。 我的代码如下:
nsExec::ExecToStack '"$INSTDIR\Php\php.exe" "$INSTDIR\Apache\tools\findport.php"'
pop $1 ; return code
pop $2 ; port number
!insertmacro _ReplaceInFile "Apache\conf\httpd.conf" "APACHE_PORT" "$2"
_ReplaceInFile宏来自http://nsis.sourceforge.net/ReplaceInFile,如果我在上面的示例中使用$ INSTDIR而不是$ 2,则效果很好。在MessageBox中显示$ 2显示端口号就好了。
我想我做错了但我无法弄清楚它是什么,调试对NSIS来说是一种痛苦。
谢谢,
答案 0 :(得分:2)
我想我的教训是在指责实用程序函数之前始终验证路径(使用Process Monitor是一个好主意,这样你就可以判断文件系统重定向是否会妨碍)
我还想补充说,使用$instdir
来保存除路径之外的任何东西都不是一个好主意,因为它会删除背后的无效路径字符。使用普通寄存器或自定义变量......