Сбор файлов приводит к ошибке LGHT0231

Я использую последний Votive (Wix v3.5) и создал простой проект установки Wix VS 2010. Я добавил ссылку на свой сайт и установил Harvest вариант как true,

Теперь, так как мой INSTALLDIR указывает на папку под IISROOT, я получаю эту ошибку light.exe:

[filepath]: ошибка LGHT0231: у компонента 'cmp93982C4086FF8C75F07339DD7CEA8152' есть файл ключа с путем 'TARGETDIR\webdir...[имя файла].xml'. Поскольку этот путь не имеет корня в одном из стандартных каталогов (например, ProgramFilesFolder), этот компонент не соответствует критериям для автоматически созданного guid. (Эта ошибка также может возникать, если путь содержит вероятный стандартный каталог, например, вложенный каталог с именем "Common Files" в ProgramFilesFolder.)

Хотя я понимаю причину этой ошибки, я не обязательно согласен с ее рациональностью (возможно, я не понимаю врожденную работу генерации Wix MSI).

Как я могу устранить эту ошибку?


Чтобы обеспечить некоторый контекст:

Я пытаюсь настроить это вместе с Team Build. Я могу использовать устаревший формат и запустить задачу Heat/Harvest для папки, чтобы обойти эту проблему, но не хочу идти по устаревшему пути.

Я не играл достаточно с новым определением сборки на основе рабочего процесса, поэтому не уверен, как я могу включить эту пользовательскую задачу.

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

1 ответ

Решение

Проблема заключается в том, что компонент внедрен в TARGETDIR, который WiX не может использовать для автоматической генерации guid. Можете добавить Directory/@ComponentGuidGenerationSeed в каталог над этим компонентом, чтобы избежать проблемы. Добавив этот атрибут, вы теперь должны взять на себя ответственность за то, чтобы компонент не устанавливался в двух разных каталогах при обновлении.

В установщике Windows компоненты должны иметь руководство, которое не меняется между исправлениями, незначительными обновлениями и основными обновлениями. Для удобства WiX может сгенерировать UUID версии 5 для вас, используя иерархию каталогов компонента в качестве начального числа. Но, TARGETDIR не подходит для этого.

Я считаю, что причина в том, что TARGETDIR изменения между установками (он настроен на диск, на котором больше всего свободного места). Одно из правил компонента - " каждый компонент должен храниться в одной папке". Если TARGETDIR между основными обновлениями, вы можете попытаться установить тот же компонент во вторую папку.

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