我有一个使用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是一件痛苦的事情。
谢谢,
发布于 2012-03-12 14:20:24
我想教训是总是在指责实用程序函数之前验证路径(使用Process Monitor是一个好主意,这样您就可以知道文件系统重定向是否会成为障碍)
我还想补充的是,使用$instdir来保存路径以外的任何内容都不是一个好主意,因为它会在背后剥离无效的路径字符。使用普通寄存器或自定义变量...
https://stackoverflow.com/questions/9627002
复制相似问题