Проект развертывания не обновляет .exe

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

Вот что я делаю:

  • Я увеличиваю версию сборки в проекте вывода (который является основным выходом проекта развертывания).
  • Я увеличиваю версию проекта развертывания (и обновляю код продукта при появлении запроса).
  • В проекте развертывания установлено удаление предыдущих версий
  • Свойство 'Permanent' на .exe установлено на False

Я уверен, что сделал это раньше, но теперь я не могу это сделать. Что я делаю не так?

Изменить: я получил его для работы, изменив версию файла в свойствах проекта, как в этом ответе

Ответ 1

Трудно сказать, что может быть причиной этого. Как вы устанавливаете MSI, который не удаляет предыдущую версию? Я бы рекомендовал запустить установку, которая не работает с подробным протоколированием. Я бы запустил его из командной строки следующим образом:

msiexec /i "project.msi" /l*v "c:\install.log"

/l сообщает msiexec (который является службой установщика) для создания журнала, * сообщает ему, что он регистрирует все, и v сообщает ему использовать подробный режим.

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

ДОПОЛНИТЕЛЬНЫЕ ВОПРОСЫ: Файл журнала заставляет его выглядеть так, как будто установщик считает, что делать нечего. Когда вы заявляете, что обновляете версию файла, что вы обновляете? Как у вас есть файлы, которые должны быть развернуты? Вы включили их как "первичные выходы" в проект установки, или вы включаете сборки непосредственно? У вас есть определение зависимостей и их автоматическое включение, или вы включили вывод проекта?

ОБНОВЛЕНИЕ. См. это сообщение для описания того, что необходимо изменить для автоматического обновления MSI. Вопрос 511789

Ответ 2

Ваш исполняемый файл приложения может не обновляться, поскольку вы не увеличивали информационный ресурс VERSION в своем проекте MFC.

Недостаточно просто увеличить версию проекта установки. См. Ниже:

http://msdn.microsoft.com/en-us/library/6fkzft86.aspx

"Информация о версии также используется API-интерфейсом установки."

Ответ 3

Наконец понял это, несколько часов стукнув головой о стену.

Моя проблема была идентична этой, и в итоге ее очень просто решить. Два ответа выше привели меня в правильном направлении и помогли мне разобраться в моей проблеме, но здесь это в двух словах.

Если у вас установлено значение RemovePreviousVersion равным true, проблема наиболее вероятна в настройках приложения под кнопкой информации о сборке.

Я запустил журнал как mohlsen, показанный в ответе выше, msiexec/i "project.msi" /l * v "c:\install.log" и закончил тем же ответом, не будет перезаписывать; Не будет патч; Существующий файл имеет равную версию

Обратный указал мне в правильном направлении, но также немного отбросил меня с помощью ссылки MFC. Я пишу приложение Windows и, наконец, добавляю два и два вместе и перешел к свойствам приложения, которое я пишу на вкладке "Приложение". Существует кнопка "Информация о сборке", которая приводит к версии сборки и версии файла. Я увеличил их и теперь обновил файлы .exe.

Итак, вам нужно сделать две вещи, увеличить фактическую версию сборки в приложении, которое вы пишете, а также версию пакета установки.

Ответ 4

Еще один совет: если вы откроете файл AssemblyInfo.cs для своего проекта и измените AssemblyVersion на

[сборка: AssemblyVersion ( "1.0. *" )]

тогда информация о версии сборки автоматически обновляется каждый раз при создании проекта. Затем закомментируйте или удалите запись AssemblyFileVersion из того же файла, поэтому версия файла по умолчанию совпадает с версией сборки. Это означает, что версия файла обновляется автоматически каждый раз, когда вы его создаете, поэтому вам нужно только обновить версию установщика, чтобы файлы были перезаписаны так, как вы ожидаете.

Ответ 5

Вы пытаетесь выполнить обновление во время работы приложения? Если это так, это будет невозможно. Вам нужно подумать о лучшем способе, например, использовать небольшое внешнее приложение для уничтожения текущего запущенного процесса, а также установить обновление и перезапустить новую версию.

Ответ 6

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