WIX добавить новый файл в общий компонент - PullRequest
5 голосов
/ 01 апреля 2009

У меня есть общая dll, мы назовем ее Utility.dll, которая устанавливается несколькими продуктами. В моем файле WIX я устанавливаю Utility.dll как отдельный компонент. Теперь версия 2.0 Utility.dll ссылается на дополнительную dll, UtilityUtility.dll, которая должна быть установлена ​​вместе с ней.

Для моей первой попытки интеграции UtilityUtility.dll я создал новый компонент WIX, содержащий новую dll.

Это вызывает проблемы в следующем сценарии

1) Пользователь устанавливает продукт 1 {Utility.dll 1.0}
2) Пользователь устанавливает продукт 2 {Utility.dll 2.0, UtilityUtility.dll 2.0}
3) Пользователь удаляет продукт 2 {Utility.dll 2.0}

Теперь, когда пользователь использует Utility.dll, он не сможет найти ссылочную UtilityUtility.dll

Это привело меня к добавлению UtilityUtility.dll к исходному компоненту, который предотвращает удаление UtilityUtility.dll в предыдущем сценарии, но имеет собственную проблему.

1) Пользователь устанавливает продукт 1 {Utility.dll 1.0}
2) Пользователь устанавливает продукт 2 {Utility.dll 2.0, UtilityUtility.dll 2.0}
3) Пользователь удаляет продукт 2 {Utility.dll 2.0, UtilityUtility.dll 2.0}
4) Пользователь удаляет продукт 1 {UtilityUtility.dll 2.0}

UtilityUtility.dll осиротел, поскольку не удаляется при удалении Продукта 1 (он не существовал в компоненте при его первоначальной установке).

Есть ли у меня другие варианты здесь?

Спасибо

Ответы [ 4 ]

3 голосов
/ 01 апреля 2009

Если вы не можете обновить продукт 1 (что, я полагаю, не вполне возможно), я думаю, что вы облажались ИМХО, Правила для компонентов - худшая вещь в установщике Windows. Эта ссылка на мой старый блог подводит итог большей части. Ваш случай немного отличается от описанного там, но результаты ожидаются.

Я думаю, вы можете выбрать меньшее из двух зол.

1 голос
/ 01 апреля 2009

Я не уверен на 100% ... но я думаю, что добавление второго .DLL к исходному компоненту, вероятно, является "нарушением" правил компонента. Взгляните на: http://blogs.msdn.com/robmen/archive/2003/10/18/56497.aspx

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

Каковы ваши планы на обновления (в терминах MSI: Major, несовершеннолетний, патч)? Если я правильно помню, незначительные обновления не допускаются для определения компонентов. Понятия не имею о патчах.

Возможно, вы захотите беспокоиться о ремонте.

0 голосов
/ 12 мая 2009

Я сам столкнулся с этой проблемой. Я согласен с @rbobby и далее утверждаю, что тот факт, что вы можете представить себе этот сценарий неработающего пользователя, является доказательством того, что вы нарушаете правила. Обновлять общий компонент следует только в том случае, если он полностью и полностью совместим. Если Duck 2.0 не крякает и не плавает, придумайте для него новое имя.

В вашем случае у вас есть Utility.dll 1.0 и Utility.dll 2.0, но они являются только «одним и тем же компонентом» в том смысле, что они делают подобные вещи по-другому. Utility.dll 2.0 действительно должен называться UtilityPlus.dll 1.0.

Извините, я знаю, что это, вероятно, не тот ответ, который вы хотели услышать, но с технической точки зрения все понятно.

0 голосов
/ 01 апреля 2009

Можете ли вы воспроизвести второй выпуск? Теоретически после установки продукта 2 версия компонента становится 2.0. После шага 3 версия компонента по-прежнему 2.0. Когда пользователь удаляет продукт 1 на шаге 4, установщик Windows знает, как удалить Utility.dll 2.0 и UtilityUtility.dll 2.0.

Обновление : я ошибся, извините.

...