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 довольно сложен.:) Надеюсь это поможет.