Wix: использование KeyPath для компонентов, каталогов, файлов, реестра и т. Д. И т. Д.

Прочитав этот ответ о подходе "один файл на компонент" при использовании WiX, мне было интересно узнать, каковы лучшие практики при использовании KeyPath атрибут на других элементах, включая Component, Directory, Registry и т. д.

Меня интересует любое общее предложение, но вот пара конкретных вопросов:

  • Если у меня есть пустой каталог, который должен создать установщик, я должен установить KeyPath="yes" на Directory или его родитель Component? Что если он не пустой?
  • Если файл имеет KeyPath="yes" В сценарии "файл на компонент" необходимо или целесообразно установить его на родительский компонент?
  • Я где-то читал, что вместо установки KeyPath для файла следует использовать ключ реестра для каждого файла и установить KeyPath="yes" на элемент реестра... Это действительно правда / необходимо?

Спасибо!

Правка № 1 - Разъяснение re: Directory

Мне было известно о том, что в каталоге нет KeyPath, но в моем вопросе это не было подробно или подробно. Главным образом, мне было любопытно использовать KeyPath для компонента, когда необходимо создать пустой каталог. Я вижу, что KeyPath="yes" в таком случае устанавливается на родительский компонент. Но достаточно ли этого для программы установки, чтобы обнаружить / исправить отсутствующую пустую папку? Или его следует использовать вместе с записью в реестре? Пример фрагмента:

<Directory Id="LOGS" Name="Logs">
  <Component Id="LogsDir" Guid="*" KeyPath="yes">
    <CreateFolder Directory="LOGS" />
  </Component>
</Directory>

1 ответ

Решение

В общем, вы должны основывать свое решение на основной идее KeyPath вариант. Из MSDN:

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

Таким образом, если вы создадите 1 файл для каждого компонента, вы не столкнетесь с ситуацией, когда вы случайно удалили файл, а восстановление не вернуло его. Если вы создаете N файлов для каждого компонента, вы в любом случае выберете один из них, чтобы KeyPath (и документы WiX побуждают вас делать это явно), или вы добавляете дополнительную запись реестра, и пусть это будет KeyPath,

Вернуться к вашим вопросам:

Если у меня есть пустой каталог, который должен создать установщик, я должен установить KeyPath="yes" в каталоге или

Элемент каталога не имеет KeyPath приписывать.

Если файл имеет KeyPath="yes" в сценарии "файл на компонент", необходимо или целесообразно установить его на родительский компонент?

Нет, в принципе, это не имеет смысла. Если компонент имеет KeyPath="yes", то каталог, в который устанавливается этот компонент, становится ключевым путем. Когда вы явно указываете его в файле, тогда файл, очевидно, является ключевым путем.

Я где-то читал, что вместо установки KeyPath для файла следует использовать ключ реестра для каждого файла и устанавливать KeyPath="yes" в элементе реестра... Это действительно так / необходимо?

Это звучит как чепуха. Опять же, исходя из общей необходимости KeyPath - обнаружить компонент. Зачем вам нужна дополнительная запись в реестре, чтобы определить, есть ли файл в файловой системе? Это может иметь смысл для N файлов на сценарий компонента, когда вы создаете 1 запись реестра на компонент (то есть N файлов) и позволяете установщику Windows судить по этой записи реестра, считается ли компонент "не поврежденным".

ОБНОВЛЕНИЕ: Вам не нужно вводить запись в реестре только для того, чтобы он служил в качестве ключевого пути, помогающего установщику отслеживать пустую папку. Достаточно добавить KeyPath='yes' в родительский компонент.

Не усложняй вещи. Установщик Windows довольно сложен.:) Надеюсь это поможет.

Другие вопросы по тегам