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


125

Що таке атрибут Wix ' KeyPath '? Зокрема, як це застосовується до наступного:

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

112
OMG документація Wix є абсолютно марною. Документ wix каже для атрибута KeyPath, що якщо ви встановите його на "Так", то файл розглядається як ключовий шлях для компонента. Soooo корисний !!
Чесо

5
@RobMensching - цінуй свій дух і готовність внести свій внесок у співтовариство. Розповідати мені, як НЕ скаржитися, не так добре, як розповісти мені (та іншим), як ТО скаржитися. Якби я знав місце, де підняти помилку, два роки тому я б це зробив. Крім того, як ви бачите за результатами, очевидно, інші люди відчувають подібне. Можливо, настав час такого роду повідомлення: "Допоможіть покращити WiX! Підніміть відповідні помилки, натиснувши ТУТ ".
Cheeso

21
Зробимо, @Cheeso! Повідомте про помилки тут: wixtoolset.org/bugs
Rob Mensching

8
@Cheeso Основна концепція, яку потрібно зрозуміти, полягає в тому, що проект налаштування WiX створює пакет Windows Installer. Документи WiX не (і в основному не повинні) копіюють документи інсталятора Windows. Хоча ви часто можете використовувати конструкцію WiX, не розуміючи таблиць Windows Installer, які вона підтримує, якщо є питання, слід перевірити документи на MSDN. Для компонентів почніть тут .
Том Блоджет

30
@TomBlodget: Я б стверджував, що WiX ДОЛЖЕН дублювати документи Windows Installer. Для більшості користувачів розділення WiX / Windows просто викликає плутанину, і чим більше можна приховати кінцевого користувача, тим простіше використовувати загальний інструмент.
Скотт Стаффорд

Відповіді:


122

Як пояснив Роб Меншинг :

KeyPath для компонента - це єдиний ресурс, який інсталятор Windows використовує, щоб визначити, чи компонент "існує" на машині.

Це означає, що коли Windows Installer вирішить, чи встановлювати ваш компонент, він спочатку подивиться, чи вже присутній ресурс клавіатури. Якщо це так, жоден з ресурсів компонента не встановлений.

Наявність ресурсу keypath також визначає, пошкоджений чи зниклий компонент під час "ремонту" MSI.

Коли ресурсом клавіатури є файл з версією, інсталятор Windows вважатиме, що він існує лише у тому випадку, якщо він знайде файл з рівною або вищою версією.

У вашому конкретному прикладі у вас є компонент, який видаляє папку при видаленні. Цей компонент буде встановлений лише в тому випадку, якщо вказаний ключ реєстру ще не існує. Додавання ключа реєстру для використання в якості шляху до ключів - це загальна хитрість, коли вам потрібен шлях для компонента, який встановлює ресурси, які не можуть бути використані як шлях до клавіатури, як ярлик .


4
Тож у чому сенс явно надавати єдиному файлу компонента атрибут keypath = "no"?
Крістофер Б. Адкінс

4
@Adkins: це може придушити поведінку wix за замовчуванням, щоб прийняти цей файл як шлях. Як результат, в базу даних інсталятора для цього компонента не записується жоден шлях. Під час інсталяції Windows інсталятор буде використовувати папку призначення компонента в якості основного шляху. Ще один спосіб отримати таку поведінку - встановити "keypath = так" на самому компонентному елементі. У будь-якому випадку, це не здається мені гарною ідеєю.
Вім Коенен
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.