Проект установки VS2008: удаление предыдущего MSI - PullRequest
13 голосов
/ 15 января 2010

У меня есть проект установки VS2008, который создает файл setup.msi, который устанавливает приложение WinForms (C #).

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

Это то, что я делаю уже при сборке новой версии установщика:

  • Set RemovePreviousVersions = true и DetectNewerInstalledVersion = true
  • Увеличение AssemblyVersion (развертываемого exe-файла)
  • Увеличение Версия (проекта установки)
  • Создание нового ProductCode (в соответствии с запросом VS при изменении версии)
  • Оставить Код обновления без изменений

И все же он по-прежнему отказывается удалить предыдущую версию. Итак, что я пропустил? Или что я делаю не так?

Спасибо!

Ответы [ 6 ]

19 голосов
/ 21 января 2010

Полуответ на мой вопрос, только для тех, кто заинтересован:

Во-первых, я нашел невероятно полезную статью о том, как работают обновления MSI.

Во-вторых, я нашел InstEd , довольно приятный бесплатный редактор MSI, который показал мне, что с моим файлом MSI все в порядке. (Да, я мог бы вместо этого использовать Orca, если не возражал против загрузки всего пакета Windows SDK.)

В-третьих, досадно, что первоначальная проблема, похоже, устранилась, и я больше не могу ее воспроизводить. Если он вернется, и если я исправлю это снова, я добавлю сюда комментарий!

В любом случае, все это вызвало новую, возможно, еще более серьезную проблему: MSI потребовала для обновления приложения, но фактически ничего не установила! Решение этого заключается в следующем:

  • AssemblyVersion не имеет значения, но AssemblyFileVersion абсолютно делает : он должен увеличиваться, если вы хотите, чтобы новые файлы были установлены. (Это изменение в VS2008 по сравнению с VS2005. См., Например, this обсуждение в Microsoft группы.)
  • Однако AssemblyFileVersion не может автоинкрементировать способ AssemblyVersion Можно. Установка 1.9. * (Или что угодно) просто приведет к ошибка. Решение, от Стек Переполнение на этот раз, чтобы установить Сборка Версии к автоинкременту, и затем откройте AssemblyInfo.cs и удалите атрибут AssemblyFileVersion в целом. Это заставит файл версия, равная сборке версия.
5 голосов
/ 16 января 2010

Чтобы установить его поверх предыдущей версии:

  1. Выделите проект установки.
  2. Нажмите клавишу F4 для выбора свойств.(Правый клик - это другое окно свойств.)
  3. Изменить версию.Скажите «да» на приглашение с просьбой изменить код продукта.

Имейте в виду, даже если вы перестраиваете решение, оно не перестраивает проект установки.Вам нужно перестроить проект установки как отдельный шаг.

Во-вторых, вам не нужно каждый раз увеличивать AssemblyVersion.Установите для него что-то вроде 2.1. * И он сделает это автоматически.

4 голосов
/ 16 января 2010

Я не на 100% знаком с проектами установки VS 2008 (сам пользуюсь Advanced Installer - НАСТОЯТЕЛЬНО рекомендую, кстати, у них даже есть бесплатная версия!), Но я сталкивался с этим раньше, не задокументировано очень четко.

В номере версии есть 4 части - как вы хорошо знаете, я уверен: Major.Minor.Build.Revision. ПЕРЕСМОТР НЕ проверяется установщиком Windows. Если все, что вы делаете - это увеличиваете ревизию, она не будет работать. Вы должны увеличить хотя бы сборку значения ProductVersion.

Надеюсь, это поможет!

0 голосов
/ 02 сентября 2015

Я пришел сюда, чтобы получить помощь по той же проблеме. После прочтения связанной невероятно полезной статьи я полагаю, что моя проблема заключалась в том, что я установил предыдущую версию с опцией «Только я», а у нового установщика было выбрано свойство InstallAllUsers (в свойствах проекта Visual Studio). Таким образом, после удаления предыдущей установки из панели управления обновление теперь работает. Может быть, это кому-то поможет.

0 голосов
/ 11 июля 2012

Не забудьте увеличить сборку FileVersion! Если вы не укажете версию файла сборки, то компилятор предполагает, что она будет такой же, как AssemblyVersion. Однако, если указано assemblyFileVersion, его необходимо увеличить.

0 голосов
/ 21 января 2010

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

MSDN описывает все это здесь - http://msdn.microsoft.com/en-us/library/aa372379%28VS.85%29.aspx

...