Можно ли выбрать путь #include, используя сценарий и аргументы командной строки в программе установки Inno Setup?
Таким образом, возникает проблема, когда у меня есть несколько установок, где большинство одинаковы, за исключением, конечно, файлов в установке. У меня есть набор включаемых файлов, которые отличаются.
Поэтому я подумал: "Эй, давайте просто добавим аргумент командной строки, чтобы указать, какой файл включить". Я могу получить информацию из аргумента командной строки в коде Паскаля.
Проблема возникает, когда я пытаюсь использовать информацию в #include
, Препроцессор, похоже, ничего не знает о скриптинге на Паскале. Это имеет смысл, за исключением того, что я хочу это знать. например, я не могу сделать это:
[Files]
#include "{code:GetMyArgument}"
или это:
[Files]
#include {param:foo|bar}
Так что вопрос на самом деле: как я могу установить #include
включить файл пути, который я установил в аргументах командной строки? или какой-то другой динамический метод... Я могу думать об одном. Мне просто не нравится мой путь: мне не нравится идея перемещения файлов или изменения содержимого файла на лету для этого, я думаю, что мои / эти / эти решения пахнут, я думаю. Есть ли способ лучше?
Я на версии 5.5.6(u) Inno Setup.
1 ответ
Просто используйте переменную препроцессора:
#include IncludePath
И укажите его значение в командной строке компилятора:
ISCC.exe Example1.iss /DIncludePath=Other.iss
Значение /D
переключатель:
/D<name>[=<value>] Emulate #define public <name> <value>
Если вы используете Inno Setup IDE, которая не поддерживает настройку аргументов командной строки компилятора (например, Inno Script Studio), вы можете основать имя файла включенного скрипта на некоторой опции установщика, например AppId
, AppName
, OutputBaseFilename
, так далее.
Например, для имени, основанного на AppName
, используйте:
#include SetupSetting("AppName") + ".iss"
Обратите внимание, что это работает, только если #include
директива, с призывом к SetupSetting
функция препроцессора, после соответствующего [Setup]
директива раздела.
Еще один вариант - отменить включение.
Основной .iss
зависит от проекта и включает в себя общий .iss
:
Проект конкретных .iss
:
; Project-specific settings
[Setup]
AppId=id
AppName=name
[Files]
; Project specific files
; Include shared script
#include "shared.iss"
Обратите внимание, что это нормально, если разделы повторяются. Итак shared.iss
может снова включить оба [Setup]
а также [Files]
разделы с другими директивами и файлами.