我正在运行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运行它时,调试日志显示
我以管理员用户身份运行此操作。它在Windows 7 64位上运行。 另一个有趣的信息是,在我的应用程序中,当它访问注册表时,(通过Delphi)我必须将注册表定义为......
MyRegistry := TRegistry.Create(KEY_READ OR KEY_WOW64_64KEY);
,因为
MyRegistry := TRegistry.Create();
只是没有工作......
答案 0 :(得分:2)
Inno(除非你已经另有说明)将把这个值写入注册表的32位视图。
然后你告诉你的应用程序(使用KEY_WOW64_64KEY
标志)阅读64bit视图格式。
听起来你的应用程序实际上是一个32位应用程序,只需使用HKLM,并忘记任何64位标记。
这将导致值在32位视图中正确写入HKEY_LOCAL_MACHINE\SOFTWARE\DocAssist
(在64位视图中为HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\DocAssist
。)
答案 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以来使用注册表的正确方法。