Inno Script Generator - Невозможно создать записи реестра - PullRequest
1 голос
/ 09 декабря 2011

Я использую InnoScriptGenerator 1.0.3.1 для создания сценария установки. Все работает, кроме создания реестра. Я хочу создать две записи ...

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

Мои сценарии выглядят следующим образом:

[Registry]

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 ]

2 голосов
/ 12 декабря 2011

Inno (если вы не сказали иначе) запишет это значение в 32-битное представление реестра. Затем вы сказали своему приложению (используя флаг KEY_WOW64_64KEY) прочитать 64-битное представление.

Поскольку это звучит так, как будто ваше приложение на самом деле является 32-разрядным приложением, просто используйте HKLM исключительно и забудьте все 64-разрядные флаги. Это приведет к тому, что значение будет правильно записано в HKEY_LOCAL_MACHINE\SOFTWARE\DocAssist в 32-битном представлении (которое равно HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\DocAssist в 64-битном представлении.)

См. различные статьи на веб-сайтах Microsoft для получения дополнительной информации.

1 голос
/ 10 декабря 2011

Настройка раздела реестра, как это просто отлично работает:

[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.

...