Проект установки VS2008: удаление предыдущей MSI

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

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

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

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

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

Спасибо!

Ответы

Ответ 1

Полу-отвечая на мой собственный вопрос, только на благо любого, кто интересуется:

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

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

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

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

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

Ответ 2

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

  • Выделите проект установки.
  • Нажмите клавишу F4 для свойств. (Щелкните правой кнопкой мыши другой вкладкой.)
  • Изменить версию. Скажите "да" на приглашение с просьбой изменить код продукта.

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

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

Ответ 3

Я не на 100% знаком с проектами VS 2008 (я использую Advanced Installer сам. ВЫСОКО рекомендую это BTW, у них даже есть бесплатная версия!), но я столкнулся с этим раньше, и он не задокументирован очень четко.

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

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

Ответ 4

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

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

Ответ 5

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

Ответ 6

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