Понимание GUIDS, обновлений и исправлений с помощью Windows-Installer - PullRequest
9 голосов
/ 18 ноября 2009

Я изучаю Windows-Installer и Wix, и у меня есть несколько вопросов, касающихся того, как это работает:

  1. Если GUID компонента изменяется, но в нем находятся те же файлы, что происходит при серьезном обновлении? Файлы заменяются?
  2. Если компонент удаляется из продукта, что происходит с соответствующими файлами при значительном обновлении? Удаляются ли исходные файлы при удалении?
  3. Правильно ли я сказал, что при значительном обновлении будут заменены все файлы во всех компонентах, независимо от того, была ли изменена версия файла сборки, и что при небольших обновлениях и незначительных обновлениях файл заменяется только в том случае, если GUID то же самое, а сборочная версия файла была увеличена? Что если файл не имеет версии сборки, такой как страница aspx?
  4. Предположим, что продукт был развернут на машине без использования установщика. Если вы затем создали программу установки с файлами с тем же именем в компоненте, что и в установленном каталоге, что произойдет с этими файлами, если вы попытались выполнить установку? Они заменены?
  5. Правильно ли я сказал, что если бы я использовал такой инструмент, как heat, чтобы создать XML-файл со всеми файлами в каталоге (например, для веб-сайта), вам бы пришлось оставить одинаковые GUID (вручную или с помощью сценария), или вы сможете выполнять только крупные обновления?

Ответы [ 2 ]

4 голосов
/ 19 ноября 2009

Если GUID компонента изменяется, но те же файлы находятся в компоненте, что происходит при серьезном обновлении?

Во-первых, вопрос заключается в том, удаляется ли старый компонент. Если вы не настроите обновление для удаления предыдущих версий вашего продукта, компонент не будет удален (хотя его файлы могут быть перезаписаны). См. Также ответ на вопрос 2.

Во-вторых, вопрос в том, будет ли установлен новый компонент. Компонент устанавливается, только если его путь к ключу отсутствует. Если ключевой путь является версионным файлом, то более низкая версия также считается «отсутствующей».

Наконец, если новый компонент был помечен для установки, и установщик Windows обнаружил файл с тем же именем, что и тот, который он пытается установить, Правила создания версий файлов определяют, будет ли файл заменен или не. Например, файл с более высокой версией не будет понижен.

Если компонент удален из продукт, что происходит с связанные файлы при серьезном обновлении? Удаляются ли исходные файлы на удалить?

Если вы не поместите правильные записи в таблицу обновлений и InstallExecuteSequence, которая говорит установщику Windows удалить старый продукт, старые компоненты останутся одни. См. Это сообщение в блоге Алекса Шевчука для руководства о том, как создать установщик в wix, который удаляет старые версии.

Правильно ли я сказал, что майор обновление заменит все файлы во всех компоненты ...

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

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

Опять же, это зависит от того, установлены ли компоненты, в зависимости от пути к ним и правил управления версиями файлов.

Правильно ли я сказал, что если бы я использовал инструмент, как тепло, чтобы создать файл XML со всеми файлами в каталоге (как для веб-сайта), что у вас будет сохранить идентификаторы GUID (вручную или со сценарием), или вы бы только в состоянии сделать серьезные обновления?

Правильно. GUID является идентификатором компонента, поэтому, если вы измените GUID, существуют два компонента (в старой и новой версии вашего продукта), которые установили одинаковые ресурсы в одно и то же целевое местоположение. И это нет-нет в соответствии с MSDN : «Никогда не создавайте два компонента, которые устанавливают ресурс под одним и тем же именем и целевым расположением».

3 голосов
/ 19 ноября 2009

Изучите Правила для компонентов . Их очень легко сломать, и установщик Windows не применяет их. Однако если вы не будете следовать правилам, случится странное странное вуду.

Простое решение, придерживайтесь одного файла на компонент и используйте heat с генерацией GUID времени компиляции (выходные данные с Guid="*" используют стабильный алгоритм, это не случайно). Наличие идентификаторов GUID для генерации тепла является случайным, но идентификаторы GUID, сгенерированные candle во время компиляции, будут стабильными (на основе имени файла + пути хэша или чего-то из памяти)

Если установщик Windows обнаружит файл, уже находящийся на диске во время установки, он увеличит счетчик ссылок для этого файла, предполагая, что это «общий» файл. Файлы удаляются с диска только после того, как счетчик ссылок возвращается к нулю, поэтому, если файл уже существует, счетчик может никогда не вернуться к нулю, и вы можете получить файлы, оставленные без присмотра, даже после удаления.

...