4

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

例如:

[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] 中的额外字符,脚本将无法编译,因为那时它认为这是一个常数。

4

5 回答 5

1

用于StringChange()删除多余的{

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

[Code]
const INSTALL_KEY = '...\Uninstall\{#emit StringChange(SetupSetting("AppId"),"{{","{")}_is1';
于 2013-09-25T14:37:28.453 回答
1

我认为解析器不允许使用由{}字符包围的自定义常量,因为它们被用作 的介绍器the constants,所以我认为你必须解决它。这是选项之一:

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

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

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

于 2012-04-24T19:32:06.403 回答
1

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

[Setup]

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

[code]

sAppId := ExpandConstant('{#emit SetupSetting("AppId")}_is1');
sUnInstPath := ExpandConstant('Software\Microsoft\Windows\CurrentVersion\Uninstall\') + sAppId;
于 2015-09-02T21:21:38.650 回答
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]部分中,常量脚本常量不会扩展,同时发出预处理器指令 {#emit ...}/{#...}由 ISPP 替换为它们的值。所以需要使用 ExpandConstant 函数转换{{{.

在这种情况下,您不能在使用函数时将其定义INSTALL_KEY为 Pascal 常量。ExpandConstant

于 2019-11-20T02:09:43.263 回答
0

您还可以将您的应用程序 ID 定义为常量并像这样使用它:

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

[Setup]
AppId={#MyAppID}

[Code]
const INSTALL_KEY = '...\Uninstall\' + ExpandConstant('{#MyAppID}') + '_is1';
于 2017-06-05T20:39:47.560 回答