В статье речь пойдет об особенности 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 проекта на него будут накладываться
необходмые преобразования и нам ничего не надо будет делать руками.
Иногда возникает проблема: содержимое сборки у вас изменилось, а версия сборки — нет.
Вы собираете 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 проекта на него будут накладываться
необходмые преобразования и нам ничего не надо будет делать руками.