Ваша fullJRE
"константа" на самом деле переменная препроцессора .
Вы можете использовать ее в любой директиве препроцессора для предварительной обработки сценария Inno Setup для просмотратак, как вам нужно.
В этом случае вы можете использовать #if
директиву :
[Icons]
#if fullJRE == "1"
Name: "{group}\My Program"
#endif
И вы должны сделать то же самое, даже для своегоupdateINI
код.Ваш текущий подход генерирует ненужный код, такой как:
function updateINI(): boolean;
begin
if (1 = 0) then
begin
DeleteFile(ExpandConstant('{app}\{#launcherName}.exe'));
end;
end;
Хотя вы действительно можете заставить препроцессор полностью удалить этот код, выполнив:
#if fullJRE == "0"
procedure CurStepChanged(CurStep: TSetupStep);
begin
if CurStep=ssPostInstall then
begin
updateINI();
end
end;
function updateINI(): boolean;
begin
DeleteFile(ExpandConstant('{app}\{#launcherName}.exe'));
end;
#endif
Добавьте SaveToFile
вызовите в самом конце вашего сценария Inno Setup, также посмотрите, что генерирует препроцессор:
#expr SaveToFile(AddBackslash(SourcePath) + "Preprocessed.iss")
См. Inno Setup: как посмотреть вывод(перевод) препроцессора установки Inno?
Кстати, в подобных сценариях принято определять «флаг», а не переменную со значением.
Таким образом, вместо /DfullJRE=1
, выполните /DfullJRE
и используйте директивы #ifdef
и #ifndef
.
[Icons]
#ifdef fullJRE
Name: "{group}\My Program"
#endif