【问题标题】:How do I replace strings in files with output from a script in NSIS?如何用 NSIS 中脚本的输出替换文件中的字符串?
【发布时间】:2012-03-09 00:03:13
【问题描述】:

我目前正在更新一个使用 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 进行调试很痛苦。

谢谢,

【问题讨论】:

标签: nsis


【解决方案1】:

我想教训是总是在指责实用程序函数之前验证路径(使用Process Monitor 是个好主意,这样你就可以判断文件系统重定向是否妨碍了)

我还想补充一点,使用$instdir 保存路径以外的任何内容都不是一个好主意,因为它会在你背后去除无效的路径字符。使用普通寄存器或自定义变量...

【讨论】:

  • 感谢进程监视器的提示,我不知道该工具。我没有使用 $INSTDIR 来存储任何东西(除了 NSIS 为我存储的东西)。
猜你喜欢
  • 1970-01-01
  • 2012-04-21
  • 1970-01-01
  • 2017-11-17
  • 2015-03-31
  • 1970-01-01
  • 2015-01-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多