Компилятор (или технически препроцессор ) имеет /D
ключ командной строки , который можно использовать для установки переменной препроцессора.
Например, это ...
ISCC.exe Example1.iss /DBinaryName=MyProg.exe
... имеет тот же эффект, как если бы вы использовали директиву #define
в самом скрипте, например:
#define BinaryName "MyProg.exe"
Таким образом, вы можете использовать его таким же образом в сценарии:
[Files]
Source: "{#BinaryName}"; DestDir: "{app}"
Вы можете использовать переменную даже в условиях , например:
ISCC.exe Example1.iss /DMode=Install
#if Mode == "Install"
[Files]
Source: "MyProg.exe"; DestDir: "{app}"
#elif Mode == "Delete"
[InstallDelete]
Type: files; Name: "{app}\MyProg.exe"
#else
#error Unknonn mode
#endif
Хотя для того же эффекта вы можете использовать только переменную существования , например:
ISCC.exe Example1.iss /DInstall /DDelete
#ifdef Install
[Files]
Source: "MyProg.exe"; DestDir: "{app}"
#endif
#ifdef Delete
[InstallDelete]
Type: files; Name: "{app}\MyProg.exe"
#endif
Это также рассматривается в следующих вопросах:
Вы можете использовать директивы препроцессора в любом месте, даже в разделе [Code]
.
procedure CurStepChanged(CurStep: TSetupStep);
begin
if CurStep = ssDone then
begin
#ifdef Delete
DeleteFile(ExpandConstant('{app}')+'\Locale\C4Union.UKR');
DeleteFile(ExpandConstant('{app}')+'\Locale\C4Union.ENU');
#endif
end;
end;
или даже:
#ifdef Delete
procedure CurStepChanged(CurStep: TSetupStep);
begin
if CurStep = ssDone then
begin
DeleteFile(ExpandConstant('{app}')+'\Locale\C4Union.UKR');
DeleteFile(ExpandConstant('{app}')+'\Locale\C4Union.ENU');
end;
end;
#endif
Препро cesor не волнует, он начинает как первый шаг и рассматривает файл .iss
как простой текстовый файл. Очень похоже на препроцессор C / C ++ . Это не заботится (много) о разделах или структуре кода. Вы можете даже к таким вещам, как:
DeleteFile(
ExpandConstant(
#ifdef DeleteFromUserData
'{userappdata}\MyProg'
#else
'{app}'
#endif
)+'\Locale\C4Union.UKR');
Добавьте SaveToFile
в конец скрипта , чтобы увидеть сгенерированный код.