我正在尝试使用{reg}常量来设置DefaultDirName,其中包含大括号的路径:
DefaultDirName={reg:HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{3E4A76D9-EC0E-4806-915C-8BC2B3C0011B},InstallLocation}
然而,这种方法行不通,因为编译器认为路径中的GUID是一个常量。如果尝试用另一个大括号来转义原有大括号(如下所示),也不起作用,并会出现“无效的注册表常量”错误。
DefaultDirName={reg:HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{{3E4A76D9-EC0E-4806-915C-8BC2B3C0011B},InstallLocation}
我已经尝试了所有想到的组合,试图逃避这个问题并让编译器识别它,包括使用 %7d 强制闭合大括号,如文档中所建议的那样,但在这种情况下,似乎无法编译为闭合大括号。希望有人能够指导如何让编译器识别此注册表位置,或者告诉我是否正在尝试做一些不可能的事情。如果是这样,是否有其他方法可以尝试?鉴于我已经尝试过以下方法:
DefaultDirName={code:GetExistingInstallPath}
[Code]
function GetExistingInstallPath(Param: String): String;
begin
RegQueryStringValue(HKLM, 'SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{F34A6950-7E0E-4F92-8B0E-C552F4989DA}',
'InstallLocation', strExistingInstallPath);
Result := strExistingInstallPath;
end;
代码可以编译,但是strExistingInstallPath没有返回任何内容,并且悬停在 {code:GetExistingInstallPath} 上会返回“异常:由于可能的副作用无法评估‘code’常量”。经过几个小时的尝试,我接近得出结论:Inno Setup不支持包含大括号的注册表位置。
注意,我需要读取此注册表键,因为该软件未通过Inno Setup安装,并且这是一个替换文件的补丁,因此我需要知道它最初安装的位置。
内部扩展
了。 - TLama