Установка обновлений только оставляет файлы новыми для новой версии, удаляя файлы, общие как для старых, так и для новых - PullRequest
0 голосов
/ 30 августа 2010

У меня есть проект веб-приложения и развертывания, который изначально был создан в VS 2008, на котором была установлена ​​версия 1.51 моего приложения.Сейчас я использую VS 2010 (и мое приложение требует .Net 4 и Installer 4.5) и обновил мое приложение и проект развертывания до 1.52.Если я запустил установку на чистой системе, все работает как положено.

Если я запускаю установку 1.52 в системе с уже установленным 1.51, вместо полной копии 1.52 в конце настройки, все файлы, общие для 1.51 и 1.52, удаляются (независимо отнезависимо от того, отличаются ли они между версиями), развертываются только те файлы, которые вообще не существовали в 1.51, и мои пользовательские действия не выполняются.Установка утверждает, что успешно завершена.Я запустил установку с параметром / l * vx и использовал Wilogutl.exe для анализа файла журнала, и он говорит: «Ошибка не найдена» и «Решение не требуется».

У меня для параметра RemovePreviousVersions установлено значение True, один и тот же код UpgradeCode для обеих версий, обновленный код продукта и версия.Если я установлю RemovePreviousVersions в false, то установка 1.52 в систему с уже включенным 1.51, похоже, даст мне желаемый результат.

Разве он не должен работать, если для RemovePreviousVersions установлено значение true?

Какие потенциальные проблемы следует искать при установке обновления, если я оставляю RemovePreviousVersions в значении false?

  • Марк

Ответы [ 2 ]

1 голос
/ 13 апреля 2011

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

0 голосов
/ 16 июня 2011

Измените свое обновление на серьезное обновление и переместите стандартное действие RemoveExistingProducts перед InstallInitialize в InstallExecuteSequence.

Как пишет Стивен Коннолли, вы, вероятно, испортили ссылку на компонент. Это делает обновления ненадежными или совершенно невозможными. Вы можете «разъединить» новую и более старую версию с помощью значительных обновлений, поскольку серьезное обновление - это не обновление, а удаление старой версии и установка новой версии в цепочечной последовательности.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...