2012-03-09 27 views
0

我有一個安裝程序正在與我正在更新的NSIS一起工作。有幾點,安裝程序需要通過替換配置文件中的路徑或值來配置軟件包。這些配置文件的佔位符由我正在使用的任何部署工具(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的一個痛苦。

感謝,

+1

正常工作對我來說:http://pastebin.com/LC1J8WXk ... – Anders 2012-03-09 16:16:23

+0

事實上,問題是一個錯誤的路徑:( – GomoX 2012-03-09 19:53:01

回答

2

我猜的教訓是要責備實用功能之前,請務必確認路徑(使用Process Monitor是一個好主意,這樣你就可以告訴我們,如果文件系統重定向的方式獲得)

我還想補充說,使用$instdir來保存路徑以外的任何東西都不是一個好主意,因爲它會去掉背後的無效路徑字符。使用普通的寄存器或自定義變量...

+1

感謝您的進程監視器尖端,我不知道這個工具,我沒有使用$ INSTDIR來存儲任何東西(除了NSIS爲我存儲的東西外)。 – GomoX 2012-03-12 15:31:31

相關問題