Search
Write a publication
Pull to refresh

Как принудительно перезаписывать файлы приложения при установке

В статье речь пойдет об особенности Setup проектов в VS2008/2010.

Иногда возникает проблема: содержимое сборки у вас изменилось, а версия сборки — нет.
Вы собираете Setup проект, изменив номер версии и ProductCode, но после инсталляции
файлы в директории установки остались старыми.
Установка значения свойства RemovePreviousVersions в true проблемы не решает.
Примечание: поведение свойства RemovePreviousVersions начиная с VS2008 поменялось
в соответствии с File Versioning Rules.

Варианты решения проблемы:

1. Руками изменять версии сборок до построения Setup проекта:
Заходим в свойства проекта -> Application -> Assembly Information,
далее увеличиваем значение «Assembly version»

2. Обновлять версии сборок автоматически
Setup проекты в Visual Studio 2008/2010 не имеют встроенной поддержик подобной функциональности.
Один из возможных путей — использование MSBuild.
Примечание: каждая из 4 цифр версии ограничена максимальным значением 65535.

3. Изменять значение свойства REINSTALLMODE в msi файле.
Для этого надо скачать утилиту ORCA.
После установки и запуска утилиты открываем msi файл, заходим в таблицу Property,
добавляем новую строку с именем REINSTALLMODE и значением amus (omus по умолчанию).
Это приведет к принудительной установке всех файлов из msi пакета
С дополнительной информацией по свойству REINSTALLMODE вы можете ознакомиться здесь.
Но возникает другая проблема:
после перестроения Setup проекта значение этого свойства «обнуляется» до значения по умолчанию (omus).

Для автоматизации встраивания свойства REINSTALLMODE в msi файл нужно проделать следующие шаги:
а) с помощью утилиты ORCA создаем файл преобразований
б) открываем в ORCA msi файл
в) кликаем «New transform»
г) вносим все необходимые там изменения в таблицы msi пакета
д) кликаем «Generate transform» и сохраняем наш mst файл.
Примечание! Не сохраняйте файл преобразований в Debug/Release папки, т.к. при каждой сборке
сетапа они очищаются от всего содержимого. Сохраняй лучше в корень папки проекта или любое другое место по вашему усмотрению.
е) далее воспользуемся утилитой msitran.exe, которая входит в состав пакета Misrosoft Windows SDK.
Подробное описание утилиты Msitran здесь.

В свойстве PostBuildEvent setup проекта пишем следующую команду:
msitran.exe -a "$(ProjectDir)transform.mst" "$(BuiltOuputPath)"
где transform.mst — файл преобразований,
$(BuiltOuputPath) — полный путь к msi файлу

Теперь после каждого перестроения Setup проекта на него будут накладываться
необходмые преобразования и нам ничего не надо будет делать руками.
Tags:
Hubs:
You can’t comment this publication because its author is not yet a full member of the community. You will be able to contact the author only after he or she has been invited by someone in the community. Until then, author’s username will be hidden by an alias.