Inno setup 从包含的文件中的设置部分发出值

Inno 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

我已经阅读了如何将设置发送到代码部分,以便在运行时使用。只要它在一个文件中,它就可以工作。然而,如果我有

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
并包括.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"

或者,正如您所发现的,使用预处理器变量