我已阅读in an answer by TLama如何将设置发布到代码部分,以便可以在运行时使用它。只要它在一个文件中,它就可以工作。但是,如果我有
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
以避免重复代码同一程序的不同版本。
答案 0 :(得分: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;
答案 1 :(得分:1)
关键是SetupSetting
documentation:
解析当前翻译
中的[设置]部分
"current translation" is defined为:
指的是ISPP的当前输出,脚本的翻译(预处理)部分直到ISPP当前正在处理的点(或行)。
当您#include
时,AppId
尚未定义。
解决方案是将#include
移到Setup
部分下方:
[Setup]
AppId={{87E1AD40-F32B-4EF7-A2FF-5B508814068A}
...
#include "include.iss"
或者,正如您自己发现的那样,使用预处理器变量。