none
Стандартный иснталятор, апдейт приложения. RRS feed

  • Вопрос

  • Всем доброе время суток.

    Столкнулся с проблемой, что когда собираю новый билд приложения, при иснтале приложения появляется следующее сообщение: http://clip2net.com/s/xZaD

    Использую стандартный setup project в 2008 студии. Хотелось добиться, чтобы инсталятор полностью перезаписывал старые файлы новыми.

    • Перемещено Tagore Bandlamudi 2 октября 2010 г. 21:11 MSDN Forums consolidation (От:Разработка Windows-приложений)
    28 сентября 2010 г. 10:54

Ответы

Все ответы

    • Помечено в качестве ответа Michael Cherkasov 4 октября 2010 г. 10:26
    • Снята пометка об ответе Michael Cherkasov 8 октября 2010 г. 10:48
    • Помечено в качестве ответа Michael Cherkasov 12 октября 2010 г. 8:23
    28 сентября 2010 г. 19:14
  • Насколько я понял, если не менять продукт код и пакедж код( он кстати не доступен для редактирования через проперти, но если открыть файл сетап проекта блокнотом его можно там найти), то будет появляться repair/remove диалог. Однако этого не происходит, выводится ошибка о том что приложение уже установленно и требует удаления, собсно скриншот выше я уже приводил. И тако каждый раз как только построишь новый билд, даже можно ничего в проекте не менять. Вопрос все еще актуален.
    30 сентября 2010 г. 7:52
  • При каждом билде студия сама меняет package code. Возьми Orca, открой два собранных подряд msi и сравни код во view/summary information. Если руками через Orca вбить одинаковый код - будет показывать repair/remove dialog.
    30 сентября 2010 г. 11:17
  • Так чем именно актуален вопрос? Что вообще ты ожидаешь от инсталлятора? 

    С точки зрения msi - каждая версия - это новый продукт, со своим кодом. В системе может быть установлен только один package каждого продукта.

    Каждый package знает только о своих файлах. Он не знает как удалить или "перезаписать" файлы другого package. Поэтому не показывается repair/remove. Он вообще не знает как поступить с другим package - потому что понятия "апгрейд" между packages нет. Нет никаких правил, какой из packages "главнее" или "новее". Собранный вчера 2.0 новее, чем собранный сегодня 1.0? :)

    Хочешь апгрейда - собирай новый продукт с тем же upgrade code. Он удалит старый продукт (== "старую версию") и поставит новый.

    30 сентября 2010 г. 13:34
  • Хочешь апгрейда - собирай новый продукт с тем же upgrade code. Он удалит старый продукт (== "старую версию") и поставит новый.

    Так апгрейд код и не меняется, а как собрать продукт с тем же самым пекедж кодом если он каждый раз генерится сам студией?

    в WIX он задается вручную насколько помню, как это возможно сделать в стандартном проекте инсталера?

    1 октября 2010 г. 11:25
  • Никак нельзя, только если по факту оркой поменять. Package Code должен быть разный для каждого собранного msi. 

    Никак не пойму - зачем собирать msi с тем же package code? Какое это отношение имеет к апгрейду ("перезаписыванию старых файлов новыми"). Корректно работающий апгрейд ты без смены product code не получишь.

    1 октября 2010 г. 15:00
  • Не работает апдейт, не пойму, что за дела.

    Поставил флаг RemovePreviousVersions = True, увеличил номер версии, сгенерил новый продукт кей, апгред код все тотже.

    Инсталю новую версию, запускаю - всё таже старая версия на экране. Несколько раз все пересобирал и перепроверял. Не работает.

    Причем поставил новую версию, запустил, старая перед глазами. Удалил exe файл, запустил инсталятор с новой версией, выбрал Repair, вот тогда только появился исполняемый файл новой версии. Что за баг инсталлера? куда копать? как обойти?

    8 октября 2010 г. 10:48
  • Скорее всего ты не увеличил версию (AssemblyFileVersion) у устанавливаемого exe-файла. MSI, к сожалению, достаточно "умен" чтобы считать два exe-ника с одинаковой версией действительно одинаковыми.
    Если точнее - версия компонента, который студия создает для exe-ника, упаковываемого в инсталлер, явно привязана к версии файла. MSI при установке обнаруживает одинаковый компонент и в новом и в старом продукте, и оставляет его как есть. 
    • Помечено в качестве ответа Michael Cherkasov 12 октября 2010 г. 8:23
    10 октября 2010 г. 20:00
  • Доброго времени суток.

    Я столкнулся с той же проблемой, что и Michael Cherkasov. Поставил флаг RemovePreviousVersions = True, увеличил номер версии, сгенерил новый продукт кей, апгред код все тотже, более того, версии устанавливаемых сборок разные. Но предыдущая версия так и не удаляется. Как можно решить эту проблему?

    4 декабря 2010 г. 23:47
  • Заходим в Project -> Properties -> AssemblyInformation и обязательно меняем значение полей File Version (как вариант можно поставить аналогичным версии сборки). Обьяснение такого поведения инсталлера подробно описал PashaPash в предидущем ответе =)
    25 января 2011 г. 14:12