2015-10-21 32 views
0

我已閱讀in an answer by TLama如何將設置發送到代碼段以便可以在運行時使用。只要它在一個文件中就可以工作。但是,如果我有從包含文件中的設置部分發射值

test.iss

#include "include.iss" 
[Setup] 
AppId={{87E1AD40-F32B-4EF7-A2FF-5B508814068A} 
AppName=My Program 
AppVersion=1.5 
DefaultDirName=My Program 

和include.iss

[Code] 
procedure InitializeWizard; 
var 
    S: string; 
begin 
    S := '{#SetupSetting("AppId")}'; 
    MsgBox(S, mbInformation, MB_OK); 
end; 

我得到一個空的消息框。 documentation on SetupSetting不是很詳細。

有沒有解決方案呢?我的設置有點大,我做了#include以避免同一程序的不同版本出現重複代碼。

回答

1

的關鍵是SetupSetting documentation這一部分:

解析[配置]部分在當前翻譯

"current translation" is defined爲:

指ISPP的電流輸出,該腳本的翻譯(預處理)部分到其ISPP當前正在處理點(或線)。

在您的#include處,AppId尚未定義。

一種解決方案是移動#includeSetup部分:

[Setup] 
AppId={{87E1AD40-F32B-4EF7-A2FF-5B508814068A} 
... 

#include "include.iss" 

或者,正如你已經發現自己,用預處理器變量。

1

可以通過爲AppId定義預處理器值來解決該問題,例如, APPGUID,然後用它來代替:

test.iss

#define AppGUID "{87E1AD40-F32B-4EF7-A2FF-5B508814068A}" 
#include "include.iss" 

[Setup] 
AppId={{#AppGUID} 
AppName=My Program 
AppVersion=1.5 
DefaultDirName=My Program 

include.iss

[Code] 
procedure InitializeWizard; 
var 
    S: string; 
begin 
    S := '{#AppGUID}'; 
    MsgBox(S, mbInformation, MB_OK); 
end; 
相關問題