Wix Toolset RegistrySearch не сохраняет раздел реестра
У меня есть приложение, которое сохраняет несколько разделов реестра при установке, чтобы гарантировать, что определенные варианты выбора, сделанные пользователем, сохраняются в приложении. Большинство этих клавиш работают правильно, но некоторые не записывают запись. Я делаю что-то неправильно? или есть ограничение на поиск реестра WiX? Я проверил документацию и не могу найти никаких ограничений. Я включил несколько примеров ниже:
Следующее работает правильно:
<Property Id="SERVER_NAME">
<RegistrySearch Id='rsSERVER_NAME' Root='HKLM' Key='SOFTWARE\CompanyName\ApplicationName' Name='ServerName' Type='raw' />
</Property>
Следующее не работает правильно:
<Property Id="SERVER_NAME">
<RegistrySearch Id='rsSERVER_NAME' Root='HKLM' Key='SOFTWARE\CompanyName\ApplicationName\ApplicationDetails\Servers' Name='ServerName' Type='raw' />
</Property>
Есть ли причина, по которой второй блок кода не будет работать?
2 ответа
ТЕСТ ОК. Я запустил тест, и оба значения были получены из 32-битного раздела реестра (HKLM\SOFTWARE\WOW6432Node
без проблем.
Вот документация поиска реестра WiX. И ниже приведены пути реестра, упомянутые Филом для 64-битных и 32-битных приложений - ваш код WiX определяет 32-битный, поэтому вы читаете из раздела WOW6432Node:
- HKLM \ SOFTWARE (для 64-битных приложений)
- HKLM \ SOFTWARE \ WOW6432Node (для 32-битных приложений - хотите верьте, хотите нет)
Мне интересно, если вы просто путаете пути в реестре? Вот откуда я читаю - конечно, в HKLM (я немного обрезал скриншот, чтобы он уместился на странице):
ОБНОВЛЕНИЕ: Теперь я проверил это чтение из 32-разрядных и 64-разрядных разделов реестра. Насколько я понимаю, это работает так, как ожидалось? Там должна быть ошибка в вашем пути реестра где-то?
Я использую однострочный VBScript, чтобы показать значение свойства после запуска RegistrySearch и получения свойств. Я могу обновить этот ответ, чтобы добавить этот код, если хотите.
Немного неясно, что вы имеете в виду, когда говорите, что приложение сохраняет несколько параметров реестра во время установки. Это пользовательское действие, которое вы выполняете, которое записывает эти ключи реестра, а затем ваша установка считывает их обратно?
Непонятно, как эти значения - что вы читаете обратно из реестра, используя RegistrySearch
- действительно записаны в реестр? Возможно, они из предыдущей версии вашего приложения или из другого приложения, и вы хотите их "скопировать"? Если да, можете ли вы проверить, являются ли они настройками HKCU или HKLM? Для настроек HKCU я бы предпочел сделать копию в самом приложении из соображений надежности.
Если вы хотите сохранить значения свойств из пользовательских настроек, может быть проще просто позволить WiX сделать это с помощью шаблона "запомнить свойство".
Непонятно, как вы сохраняете эти значения и извлекаете их, потому что нет никаких указаний на то, что вы сохраняете их в 32-битном или 64-битном расположении, или если вы используете параметр -arch для установки значения по умолчанию, поэтому он может будь то, что вы сохраняете или восстанавливаете их из разных местоположений битности (см. параметр RegistrySearch win64). Без этого контекста не ясно, будет ли этот поиск работать или нет. Это выглядит как 32-битный поиск при отсутствии Win64=yes, но ключ -arch меняет значение по умолчанию.