2015-10-21 2 views
0

Я прочитал in an answer by TLama как исправить параметр в разделе кода, чтобы его можно было использовать во время выполнения. Это работает до тех пор, пока оно находится в одном файле. Однако, если у меня естьИспускать значение из раздела Setup во включенном файле

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:

разбирает [Setup] раздел в текущий перевод

Где "current translation" is defined как:

относится к токовому выходу ISPP, переведенной (предварительной обработки) части сценария до точки (или линии), которые в настоящее время ISPP обработки.

В точке вашего #include, AppId еще не определено.

Решение состоит в том, чтобы переместить #include ниже секции Setup:

[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; 
Смежные вопросы