Каков атрибут Wix 'KeyPath'? В частности, как делает это относится к следующему:
<Component Id="ProgramMenuDir" Guid="*">
<RemoveFolder Id="ProgramMenuDir" On="uninstall" />
<RegistryValue Root="HKCU" Key="Software\CompName\AppName"
Type="string" Value="" KeyPath="yes" />
</Component>
Как объяснил Роб Меншинг:
Ключевой путь для компонента - это единственный ресурс, который Windows Инсталлятор использует для определения Компонент "существует" на машине.
Это означает, что когда Windows Installer решает, устанавливать ли вашу компоненту, он сначала посмотрит, присутствует ли уже ресурс клавиатуры. Если это так, то ни один из ресурсов в компоненте не установлен.
Наличие ресурса клавиатуры также определяет, был ли компонент поврежден или пропал, когда вы "восстанавливаете" MSI.
Когда ресурс клавиатуры является версионным файлом, инсталлятор Windows будет считать его существующим только в том случае, если найдет файл равной или большей версии.
В вашем конкретном примере, у вас есть компонент, который удаляет папку при деинсталляции. Этот компонент будет установлен только в том случае, если данный ключ реестра еще не существует. Добавление ключа реестра для использования в качестве пути к ключу - обычная уловка, когда вам нужен путь к компоненту, устанавливающему ресурсы, которые сами по себе не могут быть использованы в качестве пути к ключу, например, shortcut.
.