我试图使用{REG}常数DefaultDirName它引用包含大括号的路径包含括号注册表项:Inno Setup的参考使用{REG}不断
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返回任何内容并悬停在{代码:GetExistingInstallPath}返回“异常:无法计算‘代码’不变的,因为可能的副作用。 “经过几个小时试图让这个工作,我接近得出结论,Inno Setup不支持包含大括号的注册表位置。
请注意,我需要阅读此注册表项,因为该软件未由Inno Setup安装,并且这是一个替换文件的补丁程序,所以我需要知道它最初安装的位置。
我已经试过了,但我期待的结果是在运行调试器时显示%7d替代为大括号。当我用这种语法运行它时它确实编译了,但没有显示任何结果。现在已经检查了第50次所有内容,感谢您的建议,我刚刚注意到GUID中有一个不正确的字符(转置错误),事后看来,显然是我没有得到任何结果的原因!在这种情况下,我显然无法看到树木上的木材,只关注语法!非常感谢! – 2014-12-01 20:58:38
@Robert,你将不会看到这些字符在调试器中未被转义,因为它们是[内部扩展](https://github.com/jrsoftware/issrc/blob/is-5_5_5/Projects/Main.pas #L782)。 – TLama 2014-12-01 21:17:19