首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何用NSIS中脚本的输出替换文件中的字符串?

问如何用NSIS中脚本的输出替换文件中的字符串?
EN

Stack Overflow用户
提问于 2012-03-09 08:03:14
回答 1查看 2.1K关注 0票数 0

我有一个使用NSIS的安装程序,目前正在更新。在某些情况下,安装程序需要通过替换配置文件中的路径或值来配置包。这些配置文件中有占位符,这些占位符被我使用的任何部署工具(在此特定情况下为NSIS)所替换。

脚本大多是PHP脚本,用于完成一些在NSIS中极其复杂的简单任务。但是出于某些原因,我总是让我的PHP脚本自己替换占位符,而不是在NSIS脚本中这样做,这是不正确的。我的代码看起来像这样:

代码语言:javascript
复制
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是一件痛苦的事情。

谢谢,

EN

回答 1

Stack Overflow用户

发布于 2012-03-12 14:20:24

我想教训是总是在指责实用程序函数之前验证路径(使用Process Monitor是一个好主意,这样您就可以知道文件系统重定向是否会成为障碍)

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

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9627002

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档