2009-12-18 23 views
17

我使用InnoSetup創建安裝程序,並在[Code]部分中編寫了一些自定義處理程序。在其中一個處理程序中,我希望能夠檢索[Setup]部分中定義的AppName(或可能是其他參數的值)的值。有沒有辦法讓我做到這一點?我查看了documentation,但我還沒有發現任何可以讓我這樣做的東西。我們的InnoSetup文件實際上是由我們的構建過程生成的,它將所有我們的程序之間共同使用的片段拼接在一起,並且這些片段都是程序特定的,所以不得不在每個程序的代碼中定義常量。有沒有方便的方法來做到這一點?InnoSetup:在[代碼]部分中獲取AppName部分

我正在尋找類似

MyString := ExpandConstant('{AppName}'); 

除了{AppName}不是一個定義的常量。有什麼方法可以查詢[Setup]部分中定義的參數嗎?

回答

13

這是一個構建時間常量,而不是安裝時間值。所以你可以使用Inno Setup Preprocessor加載項來定義這樣的常量。 (您可以通過QuickStart pack輕鬆安裝)。

定義常量:

#define AppName "Excellent Foo App" 

使用常數[Setup]

AppName={#AppName} 

而且在Pascal代碼中,我並不完全確定的語法,但類似:

MyString := {#AppName} 

更新:我意識到一個我的腳本使用{#emit SetupSetting("AppId")},這更容易。 Brian's solution也發現了這種方法,效果更好。

+0

嗯。我寧願不必將每個AppName定義爲一個宏,然後使用該宏在每個程序中定義真實的AppName。但這是一個開始。 – 2009-12-18 05:19:30

+0

我知道你的意思。但我不知道有任何其他方式來做到這一點。 – 2009-12-18 05:22:01

19

受到Craig的回答的啓發,我正在查看Inno Setup Preprocessor文檔(在ISTool中,根據我的發現,它不在線提供),並且遇到了預處理器中的SetupSetting函數。

它可以用作這樣:

MyString := '{#SetupSetting("AppName")}'; 

而且只要[Setup]部分,在那裏,這是所使用的地方之前出現(ISPP似乎只有一個通),並且包括定義爲AppName,這會給我想要的結果,而不必爲我們想要提取的每個設置定義一個額外的宏。

+0

我只是看着我的一個腳本,發現我用過這個(實際上我曾用過'{#Setup Setup(「AppId」)}'但足夠接近)。我來更新我的答案,但我看到你已經擊敗了我! – 2009-12-21 01:00:03

+3

{#是{#emit – mlaan 2010-03-26 11:37:44