Что такое атрибут wix 'KeyPath'?

Что такое атрибут Wix ' KeyPath? В частности, как это применимо к следующему:

<Component Id="ProgramMenuDir" Guid="*">
  <RemoveFolder Id="ProgramMenuDir" On="uninstall" />
  <RegistryValue Root="HKCU" Key="Software\CompName\AppName" 
                 Type="string" Value="" KeyPath="yes" />
</Component>

Ответ 1

Как объясняется Робом Меншигом:

KeyPath для компонента - это единственный ресурс, который Windows Установщик использует, чтобы определить, Компонент "существует" на машине.

Это означает, что, когда установщик Windows решает, устанавливать ли ваш компонент, он сначала посмотрит, присутствует ли ресурс keypath. Если это так, ни один из ресурсов в компоненте не установлен.

Наличие ресурса keypath также определяет, был ли компонент поврежден или пропал без вести, когда вы "исправляете" MSI.

Когда ресурс keypath - файл с версией, установщик Windows считает, что он существует, только если он находит файл с равной или более высокой версией.

В вашем конкретном примере у вас есть компонент, который удаляет папку при удалении. Этот компонент будет установлен только в том случае, если данный раздел реестра еще не существует. Добавление ключа реестра для использования в качестве ключевого пути является распространенным трюком, когда вам нужен ключ-путь для компонента, который устанавливает ресурсы, которые не могут использоваться как сами по себе пути, такие как shortcut.