Inno setup 从包含的文件中的设置部分发出值
我已经阅读了如何将设置发送到代码部分,以便在运行时使用。只要它在一个文件中,它就可以工作。然而,如果我有 test.issInno setup 从包含的文件中的设置部分发出值,inno-setup,Inno Setup,我已经阅读了如何将设置发送到代码部分,以便在运行时使用。只要它在一个文件中,它就可以工作。然而,如果我有 test.iss #include "include.iss" [Setup] AppId={{87E1AD40-F32B-4EF7-A2FF-5B508814068A} AppName=My Program AppVersion=1.5 DefaultDirName=My Program #define AppGUID "{87E1AD40-F32B-4EF7-A2FF-5B508814
#include "include.iss"
[Setup]
AppId={{87E1AD40-F32B-4EF7-A2FF-5B508814068A}
AppName=My Program
AppVersion=1.5
DefaultDirName=My Program
#define AppGUID "{87E1AD40-F32B-4EF7-A2FF-5B508814068A}"
#include "include.iss"
[Setup]
AppId={{#AppGUID}
AppName=My Program
AppVersion=1.5
DefaultDirName=My Program
并包括.iss
[Code]
procedure InitializeWizard;
var
S: string;
begin
S := '{#AppGUID}';
MsgBox(S, mbInformation, MB_OK);
end;
[代码]
程序初始化;
变量
S:字符串;
开始
S:='{#SetupSetting(“AppId”)}';
MsgBox(S,mbInformation,MB_OK);
结束;
我收到一个空的留言框。这篇文章不是很冗长
有解决办法吗?我的设置稍微大一点,我会执行
#include
,以避免同一程序不同版本的代码重复。可以通过为AppId定义预处理器值(例如AppGUID)来解决此问题,然后改用它:
test.iss
#include "include.iss"
[Setup]
AppId={{87E1AD40-F32B-4EF7-A2FF-5B508814068A}
AppName=My Program
AppVersion=1.5
DefaultDirName=My Program
#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;
关键在于这一部分:
解析当前翻译中的[设置]部分
其中,as:
指ISPP的当前输出,即脚本到ISPP当前处理的点(或线)的翻译(预处理)部分
在您的#include
中,尚未定义AppId
解决方案是将#include
移动到设置
部分下方:
[Setup]
AppId={{87E1AD40-F32B-4EF7-A2FF-5B508814068A}
...
#include "include.iss"
或者,正如您所发现的,使用预处理器变量