2016-02-02 5 views
1

Таким образом, проблема возникает там, где у меня есть множество установок, где большинство из них одинаково, за исключением, конечно, файлов в установке. У меня есть набор файлов include, которые отличаются.Могу ли я выбрать путь #include, используя скрипт и аргументы командной строки в установщике Inno Setup?

Итак, я подумал: «Эй, просто добавьте аргумент командной строки, чтобы указать, какой файл включить». Я могу получить информацию из аргумента командной строки в коде Pascal.

Проблема возникает, когда я пытаюсь использовать информацию в #include. Препроцессор, похоже, ничего не знает о скриптах Pascal. Это имеет смысл, за исключением того, что я хочу, чтобы он знал. например, я не могу это сделать:

[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 switch:

/D<name>[=<value>] Emulate #define public <name> <value> 

Если вы используете IDE Setup Inno, который не поддерживает настройку параметров командной строки компилятора (например, Inno Script Studio), вы можете основывать имя файла прилагающегося скрипта на опции некоторого монтажника, как AppId, AppName, OutputBaseFilename и т.д.

Например для имени на основе AppName, использование:

#include SetupSetting("AppName") + ".iss" 

Обратите внимание, что это работает только если #include директива, с вызовом SetupSetting preprocessor function, после соответствующей директивы [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] с другими директивами и файлами.

+0

Я получаю: Undeclaired Identifier: «IncludePath» при компиляции. – amalgamate

+0

Вы показали мне проблему ... Я думаю .. Кажется, что я достиг пределов Inno Script Studio. Кажется, что он работает в командной строке. (Спасибо) – amalgamate

+0

@amalgate: Возможно, вы можете попробовать инструменты Visual & Installer (www.visual-installer.com) или RAD & Installer (www.rad-installer.com) вместо Inno Script Studio. Это свойство командной строки полностью поддерживается. – Slappy