Inno设置:使用{#emit SetupSetting(" AppId")添加额外字符}

时间:2012-04-24 18:08:00

标签: inno-setup

我在使用以下代码时遇到问题,它正在添加额外的“{”。

例如:

[Setup]
AppID={{E643099E-1ECE-474F-B043-1E7A7CE405AA}

[Code]
const
  INSTALL_KEY = 'Software\Microsoft\Windows\CurrentVersion\Uninstall\{#emit SetupSetting("AppId")}_is1';

返回以下内容:

INSTALL_KEY = 'Software\Microsoft\Windows\CurrentVersion\Uninstall\{{E643099E-1ECE-474F-B043-1E7A7CE405AA}_is1';

显然无法使用RegKeyExists(HKLM,INSTALL_KEY)检测该密钥,因为额外的“{”不在实际路径中,如果删除[Setup]中的额外字符,脚本将无法编译因为那时它认为它是一个常数。

5 个答案:

答案 0 :(得分:2)

使用StringChange()删除额外的{

[Setup]
AppID={{E643099E-1ECE-474F-B043-1E7A7CE405AA}

[Code]
const INSTALL_KEY = '...\Uninstall\{#emit StringChange(SetupSetting("AppId"),"{{","{")}_is1';

答案 1 :(得分:1)

我认为解析器不允许使用{}字符所包含的自定义常量,因为它们被用作the constants的引导者,所以我认为你必须解决它。以下是其中一个选项:

[Setup]
AppID=E643099E-1ECE-474F-B043-1E7A7CE405AA

[code]
const
  INSTALL_KEY = '...\Uninstall\{{#emit SetupSetting("AppId")}}_is1';

我的猜测是你所描述的情况只是一个意外的错误,因为编译器会提示你在常量的开头使用双括号,但是当你发出这样的常量时,你会得到同样的双括号。

答案 2 :(得分:1)

此问题似乎在更高版本的Inno Setup(5.5.5)上得到解决。以下代码工作正常:

[Setup]

AppId={{********-****-****-****-********}
...

[code]

sAppId := ExpandConstant('{#emit SetupSetting("AppId")}_is1');
sUnInstPath := ExpandConstant('Software\Microsoft\Windows\CurrentVersion\Uninstall\') + sAppId;

答案 3 :(得分:1)

解决方案是使用ExpandConstant函数,正如其他人已经提到的那样。

[Setup]
AppId={{E643099E-1ECE-474F-B043-1E7A7CE405AA}
[Code]
var
  INSTALL_KEY: String;

function InitializeSetup(): Boolean;
begin
  INSTALL_KEY := ExpandConstant('Software\Microsoft\Windows\CurrentVersion\Uninstall\{#SetupSetting("AppId")}_is1');
  MsgBox(INSTALL_KEY, mbInformation, MB_OK);
end;

这是预期的行为,而不是错误。在[Code]部分,constantsscripted constants未展开,而emit preprocessor directives {#emit ...} / {#...}的值被ISPP替换。因此,您需要使用ExpandConstant函数将{{转换为{

在这种情况下,由于使用了INSTALL_KEY函数,因此无法将ExpandConstant定义为Pascal常量。

答案 4 :(得分:0)

您还可以将应用程序ID定义为常量,并使用它:

#define MyAppID "{{E643099E-1ECE-474F-B043-1E7A7CE405AA}"

[Setup]
AppId={#MyAppID}

[Code]
const INSTALL_KEY = '...\Uninstall\' + ExpandConstant('{#MyAppID}') + '_is1';