Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/sharepoint/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何用NSIS中脚本的输出替换文件中的字符串?_Nsis - Fatal编程技术网

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

如何用NSIS中脚本的输出替换文件中的字符串?,nsis,Nsis,我有一个与NSIS一起工作的安装程序,我正在更新它。在某些情况下,安装程序需要通过替换配置文件中的路径或值来配置包。这些配置文件中有占位符,这些占位符由我正在使用的任何部署工具(NSI用于此特定情况)替换 脚本大多是编写的PHP脚本,用于执行一些在NSIS中极其复杂的简单任务。出于某种原因,尽管我一直在让我的PHP脚本自己替换占位符,而不是在NSIS脚本中这样做,但这是不对的。 我的代码如下所示: nsExec::ExecToStack '"$INSTDIR\Php\php.exe" "$INS

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

脚本大多是编写的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"
如果我在上面的示例中使用$INSTDIR而不是$2,那么_replaceinfle宏就可以正常工作。在MessageBox中显示$2可以很好地显示端口号

我想我做错了什么,但我不知道是什么,调试NSIS是一件痛苦的事情


谢谢,

我想教训是,在责怪实用程序函数之前,始终要验证路径(使用是一个好主意,这样您就可以知道文件系统重定向是否有阻碍)


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

对我来说很好:…事实上,问题是路径错误:(感谢Process Monitor上的提示,我不知道该工具。我不使用$INSTDIR存储任何东西(NSIS为我存储的东西除外)。