Проект развертывания не обновляет .exe - PullRequest
11 голосов
/ 30 апреля 2009

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

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

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

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

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

Ответы [ 6 ]

9 голосов
/ 30 апреля 2009

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

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

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

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

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

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

5 голосов
/ 23 апреля 2012

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

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

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

5 голосов
/ 03 декабря 2009

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

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

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

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

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

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

5 голосов
/ 14 октября 2009

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

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

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

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

1 голос
/ 30 апреля 2009

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

1 голос
/ 30 апреля 2009

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

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