2016-02-02 33 views
1

所以問題出現在我有大量的安裝,其中大多數的一切都是相同的,除了安裝文件。我有一套不同的包含文件。我可以使用Inno Setup安裝程序中的腳本和命令行參數來選擇#include路徑嗎?

所以我想,「嘿,只需添加一個命令行參數來指定要包含的文件。」我可以從Pascal代碼中的命令行參數中獲取信息。

問題出在我嘗試使用#include中的信息時。預處理器似乎對帕斯卡腳本一無所知。這是有道理的,只是我希望它知道。例如,我不能做到這一點:

[Files] 
#include "{code:GetMyArgument}" 

或本:

​​

所以真正的問題是:如何設置一個#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> 

如果您使用的是不支持設置編譯器的命令行參數(如英諾腳本工作室)的Inno Setup的IDE,可以立足包含腳本的文件名上的一些安裝程序的選項,如AppIdAppNameOutputBaseFilename

例如基於該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標識符:「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

相關問題