Joh*_*ohn 4 inno-setup pascalscript
我觉得这一定是我所缺少的一些简单的东西 - 在 Inno Setup 中,如果我传入了指令变量,我如何在该[Code]部分中使用它?
假设我传入/DMYVAR=1Inno Setup 引擎。
在我的 .iss 文件中,我可以有类似的内容:
[Setup]
AppName=MyApp v{#MYVAR}
Run Code Online (Sandbox Code Playgroud)
在我的部分中,[Code]我希望能够像这样使用它:
[Setup]
AppName=MyApp v{#MYVAR}
Run Code Online (Sandbox Code Playgroud)
这不起作用:(
预处理器并不关心它的指令被扩展到哪里。
因此{#name}语法(内联预处理器指令调用)在任何地方都适用,包括 Pascal Script。
不过,如果您想将define值作为字符串进行比较,当然,您必须将其括在引号中以使其成为字符串。另请注意,您的== "1"语法是错误的,Pascal 使用单=引号。
function IsVersionOne(param: String): boolean;
begin
Result := '{#MYVAR}' = '1';
end;
#expr SaveToFile(AddBackslash(SourcePath) + "Preprocessed.iss")
Run Code Online (Sandbox Code Playgroud)
使用 运行编译器/DMYVAR=1,并检查生成的Preprocessed.iss. 它将显示:
function IsVersionOne(param: String): boolean;
begin
Result := '1' = '1';
end;
Run Code Online (Sandbox Code Playgroud)
由于该值是一个数字,因此您当然也可以使用数字比较:
function IsVersionOne(param: String): boolean;
begin
Result := {#MYVAR} = 1;
end;
Run Code Online (Sandbox Code Playgroud)
有关包含更详细信息的相关问题,请参阅Inno Setup Pascal Script 中的运行时评估预处理器宏。
虽然上面回答了您的字面问题,但您的function签名实际上表明您想要实现一个Check函数来测试编译时指令的值,例如:
[Files]
Source: "MYPROG.EXE"; DestDir: "{app}"; Check: IsVersionOne
Run Code Online (Sandbox Code Playgroud)
这是一种低效的矫枉过正。
请改用预处理器#if指令:
[Files]
#if MYVAR == "1"
Source: "MYPROG.EXE"; DestDir: "{app}"
#endif
#expr SaveToFile(AddBackslash(SourcePath) + "Preprocessed.iss")
Run Code Online (Sandbox Code Playgroud)
如果使用 运行编译器/DMYVAR=1,Preprocessed.iss将显示:
[Files]
Source: "MYPROG.EXE"; DestDir: "{app}"
Run Code Online (Sandbox Code Playgroud)
如果您使用不同的 值运行编译器DMYVAR,Preprocessed.iss将显示:
[Files]
Run Code Online (Sandbox Code Playgroud)
如果您需要在没有开关的情况下编译脚本/DMYVAR=,请在脚本顶部定义一个默认值,例如:
#ifndef MYVAR
#define MYVAR "0"
#endif
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3106 次 |
| 最近记录: |