Inno脚本生成器 - 无法创建注册表项

时间:2011-12-09 19:47:38

标签: registry inno-setup

我正在运行InnoScriptGenerator 1.0.3.1来创建安装脚本。 除注册表创建外,一切都有效。我想创建两个条目......

HKEY_LOCAL_MACHINE\SOFTWARE\DocAssist
HKEY_LOCAL_MACHINE\SOFTWARE\DocAssist\InstallDir   - which has my install directory

我的脚本行如下:

[注册表]

Root: HKLM; Subkey: SOFTWARE\DocAssist; ValueType: none; Permissions: admins-full; Flags: uninsdeletekey createvalueifdoesntexist;
Root: HKLM; Subkey: SOFTWARE\DocAssist; ValueType: string; ValueName: InstallDir; ValueData: {app}; Permissions: admins-full; Flags: uninsdeletekey createvalueifdoesntexist

脚本运行,不会出错,但也不会在注册表中创建条目。

当我从InnoScript Generator运行它时,调试日志显示

Screen Install Log

我以管理员用户身份运行此操作。它在Windows 7 64位上运行。 另一个有趣的信息是,在我的应用程序中,当它访问注册表时,(通过Delphi)我必须将注册表定义为......

MyRegistry := TRegistry.Create(KEY_READ OR KEY_WOW64_64KEY);

,因为

MyRegistry := TRegistry.Create();

只是没有工作......

2 个答案:

答案 0 :(得分:2)

Inno(除非你已经另有说明)将把这个值写入注册表的32位视图。 然后你告诉你的应用程序(使用KEY_WOW64_64KEY标志)阅读64bit视图格式。

听起来你的应用程序实际上是一个32位应用程序,只需使用HKLM,并忘记任何64位标记。 这将导致值在32位视图中正确写入HKEY_LOCAL_MACHINE\SOFTWARE\DocAssist(在64位视图中为HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\DocAssist。)

有关详细信息,请参阅Microsoft网站上的various articles

答案 1 :(得分:1)

像这样设置注册表部分工作正常:

[registry]
Root: HKLM; Subkey: SOFTWARE\DocAssist; ValueType: none; Flags: uninsdeletekey       createvalueifdoesntexist;
Root: HKLM; Subkey: SOFTWARE\DocAssist; ValueType: string; ValueName: InstallDir;     ValueData: {app}; Permissions: admins-full; Flags: uninsdeletekey createvalueifdoesntexist

您无法在非现有密钥上设置延迟。您也可以考虑使用HKCU而不是HKLM,因为您不会有任何管理员权限问题。这是自Vista和UAC以来使用注册表的正确方法。