Как заменить строки в файлах с выводом из скрипта в NSIS? - PullRequest
0 голосов
/ 09 марта 2012

У меня есть установщик, работающий с 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 в приведенном выше примере.Отображение $ 2 в MessageBox показывает номер порта просто отлично.

Я предполагаю, что я делаю что-то не так, но я не могу понять, что это такое, и отладка является проблемой с NSIS.

Спасибо,

1 Ответ

2 голосов
/ 12 марта 2012

Полагаю, урок состоит в том, чтобы всегда проверять пути, прежде чем обвинять служебные функции (использование Process Monitor - хорошая идея, чтобы вы могли определить, происходит ли перенаправление файловой системы)

Я также хотел бы добавить, что использование $instdir для хранения чего-либо, кроме пути, не является хорошей идеей, поскольку оно удалит недопустимые символы пути за вашей спиной. Используйте обычный регистр или пользовательскую переменную ...

...