Inno Setup supporte directement les interrupteurs avec la syntaxe /Name=Value
utilisant {param}
constant.
Vous pouvez utiliser la constante directement dans les sections, bien que cette utilisation soit assez limitée.
Un exemple:
[Registry]
Root: HKCU; Subkey: "Software\My Company\My Program\Settings"; ValueType: string; \
ValueName: "Mode"; ValueData: "{param:Mode|DefaultMode}"
Vous voulez plus susceptibles d'utiliser des commutateurs à Pascal Script.
Si votre commutateur a la syntaxe /Name=Value
, la façon la plus simple de lire sa valeur est d'utiliser ExpandConstant
function.
Par exemple:
if ExpandConstant('{param:Mode|DefaultMode}') = 'DefaultMode' then
begin
Log('Installing for default mode');
end
else
begin
Log('Installing for different mode');
end;
Si vous souhaitez utiliser une valeur de commutateur pour basculer les entrées dans les sections, vous pouvez utiliser Check
parameter et une fonction auxiliaire, comme:
[Files]
Source: "Client.exe"; DestDir: "{app}"; Check: SwitchHasValue('Mode', 'Client')
Source: "Server.exe"; DestDir: "{app}"; Check: SwitchHasValue('Mode', 'Server')
[Code]
function SwitchHasValue(Name: string; Value: string): Boolean;
begin
Result := CompareText(ExpandConstant('{param:' + Name + '}'), Value) = 0;
end;
Ironiquement, il est plus di difficile de vérifier la présence d'un simple interrupteur (sans valeur).
utilisation peut utiliser une fonction CmdLineParamExists
de @ réponse de TLama à Passing conditional parameter in Inno Setup
function CmdLineParamExists(const Value: string): Boolean;
var
I: Integer;
begin
Result := False;
for I := 1 to ParamCount do
if CompareText(ParamStr(I), Value) = 0 then
begin
Result := True;
Exit;
end;
end;
Vous pouvez évidemment utiliser la fonction de Pascal Script:
if CmdLineParamExists('/DefaultMode') then
begin
Log('Installing for default mode');
end
else
begin
Log('Installing for different mode');
end;
Mais vous pouvez même l'utiliser dans les sections, la plupart généralement en utilisant Check
paramètre:
[Files]
Source: "MyProg.hlp"; DestDir: "{app}"; Check: CmdLineParamExists('/InstallHelp')
Le code du préprocesseur est traité avant la compilation du programme d'installation. Il ne peut donc pas être utilisé pour vérifier les paramètres de ligne de commande du fichier setup.exe qui en résulte. – Otherside
Je sais, c'est pourquoi j'ai spécifié "scripts d'installation" et non le programme d'installation compilé. J'ai souvent eu besoin de faire cela, alors j'ai pensé que je mentionnerais cette possibilité. – Bernard