WiX: Как предотвратить удаление значения реестра при удалении? - PullRequest
15 голосов
/ 02 апреля 2009

Я хочу заявить, что после установки существует определенное значение реестра, поэтому я добавил следующий компонент:

<Component Id="RegistryEntryContextMenuOdt" Guid="4BA5BA24-4F65-4BDF-99EB-CB4B947F31A9" DiskId="1" KeyPath="yes">
    <RegistryKey Id="RegKeyOdt" Root="HKCR" Action="create" Key=".odt">
      <RegistryValue Type="string" Value="openDocument.WriterDocument.1" />
    </RegistryKey>
</Component>

Ключ / значение могут быть уже установлены перед установкой. Однако я хочу, чтобы значение было установлено на мое конкретное значение, т. Е. Оно будет перезаписано моим значением.

Моя проблема заключается в том, что это значение всегда удаляется при удалении моего продукта. Однако я хочу, чтобы значение было удалено только в том случае, если оно было добавлено моим установщиком. Если мой установщик только что изменил значение, предыдущее значение должно быть восстановлено (или, если это невозможно, мое значение должно остаться без изменений).

Обратите внимание, что сам ключ не удаляется при удалении. Кажется, это работает правильно, потому что я указал Action="create" для элемента RegistryKey.

Возможно, есть аналогичная настройка для RegistryValue, которая создаст значение, но не удалит его при установке?

ОБНОВЛЕНИЕ: Оба раздела реестра в HKCR настраиваются на уровне компьютера, т. Е. Они происходят из ветви реестра HKLM \ SOFTWARE \ Classes.

1 Ответ

25 голосов
/ 02 апреля 2009

Вы можете убедиться, что ваш компонент установлен только тогда, когда запись реестра не существует, используя атрибут NeverOverwrite элемента Component . Из документации wix для NeverOverwrite:

Если для этого атрибута установлено значение «да», установщик не устанавливает или переустановите компонент, если путь к ключу файл или запись реестра пути к ключу для компонент уже существует.

Вам также может потребоваться установить атрибут KeyPath в элементе Registry на yes, чтобы однозначно определить, что запись реестра является путем к ключу компонента.

Если вы хотите установить значение реестра, даже если оно уже существует, но не хотите удалять его при удалении, вы можете вместо этого использовать атрибут Permanent элемента Component.

...